水果深度学习识别可视化大屏
基于 Python + PyQt5 的水果目标检测与分割可视化系统。提供上传识别、多/单目标检测、手动框选分割、四宫格图像交互、指标分析、日志归档、图表统计、参数配置与系统样式定制等完整能力。
一、项目简介
本程序面向水果图像智能识别场景,将计算机视觉算法与可视化大屏相结合:
-
左侧/中部展示 原图、识别结果、分割图、分割识别图 四宫格
-
右侧展示 准确率、召回率、精确率、识别明细与类别分布图
-
顶部导航切换 识别、日志、图表、参数、管理、配置、样式 七大页面
-
识别结果、日志、参数、图片按 日期目录 + SQLite 双重持久化
未配置 YOLO 权重时,系统自动使用 OpenCV HSV 颜色分割 演示引擎,保证开箱可运行;配置自定义/通用 YOLO 权重后,可切换为深度学习推理。
二、功能说明
2.1 识别主页
| 区域 | 功能 |
|---|---|
| 左上 | 上传后的原始图片;支持 手动框选 分割区域 |
| 右上 | 自动/手动识别后的检测框与类别标注 |
| 左下 | 分割后的前景区域图像 |
| 右下 | 分割结果叠加类别标签的可视化图 |
| 右侧面板 | 准确率 / 召回率 / 精确率、识别文本明细、柱状分布图 |
图像交互(四宫格均支持):
-
鼠标滚轮:缩放
-
左键拖动:平移(框选模式下改为右键/中键平移)
-
工具按钮:放大、缩小、左转、右转、复位
-
双击:视图复位(框选模式下禁用,避免误触)
识别模式:
-
多目标识别:检测图中多个水果目标
-
单目标识别:仅保留置信度最高的一个目标
手动框选分割:
-
点击「手动框选」进入框选模式
-
在左上原图按住左键拖拽矩形,可多次框选
-
可「撤销框选」「清除框选」
-
点击「应用框选分割」:对选区执行 GrabCut 精修 + 颜色分类识别
2.2 日志记录页
-
查看操作日志(上传、识别、保存、切页等)
-
查看识别记录(水果类别、数量、准确率、召回率、详情)
-
导出当日日志文件
-
一键打开日志目录
2.3 图表分析页
-
水果类别占比饼图
-
各类识别次数柱状图
-
最近若干次识别的准确率 / 召回率折线趋势图
2.4 参数设置页
可调整:
-
置信度阈值(Confidence)
-
IoU 阈值(非极大值抑制)
-
最大检测数量
-
模型输入尺寸
-
默认多/单目标模式
-
是否启用分割可视化
-
识别后是否自动保存图片
支持保存参数、恢复默认、重新加载模型;参数快照会写入 SQLite。
2.5 数据管理页
-
查看已保存图片记录、参数快照、识别归档
-
按日期归档路径浏览
-
手动备份当前全部参数
-
打开图片/日志根目录
2.6 系统配置页
-
日志存储目录
-
图片存储目录
-
SQLite 数据库路径
-
YOLO 模型权重路径
-
界面缩放系数(兼容旧配置)
日志与图片会在对应目录下按 YYYY-MM-DD 自动分子目录。
2.7 系统样式页
统一设置整站外观:
-
主题预设:深空蓝 / 墨绿科技 / 浅灰办公 / 夜紫
-
字体族、正文字号(默认 六号 / 7.5 磅)、标题字号、导航字号
-
自定义主背景、面板、按钮、文字、强调色、边框色
-
预览、保存并应用、恢复默认样式
各页面均带 横向/纵向滚动条,小屏也可完整查看内容。
三、使用方式
3.1 环境要求
-
操作系统:Windows 10/11(已按 Windows 路径与
os.startfile适配) -
Python:建议 3.8+(开发验证环境为 3.12)
-
内存:建议 4GB 以上;启用 YOLO/Torch 时建议 8GB 以上
3.2 安装依赖
在项目根目录执行:
py -3 -m pip install -r requirements.txt
或:
pip install -r requirements.txt
基础依赖(必装):
| 包 | 用途 |
|---|---|
| PyQt5 | 桌面 GUI 框架 |
| opencv-python | 图像读写、颜色空间、形态学、GrabCut、轮廓 |
| numpy | 数组与数值计算 |
| matplotlib | 识别指标与统计图表 |
| Pillow | 图像格式辅助 |
可选深度学习依赖(启用 YOLO 时安装):
pip install ultralytics torch torchvision
然后将权重文件放到 models/best.pt(或 models/yolov8n.pt),也可在「系统配置」中指定绝对路径。
3.3 启动程序
方式一:
py -3 main.py
方式二:双击 run.bat
启动后窗口默认最大化显示。
3.4 演示图片
项目内提供演示图生成脚本:
py -3 utils/make_demo_image.py
生成文件:assets/demo_fruits.jpg,可用于快速体验识别与框选。
四、操作流程
4.1 自动识别流程(推荐入门)
启动程序
→ 进入「识别主页」
→ 点击「上传图片」选择水果图像
→ 选择「多目标」或「单目标」
→ 点击「开始识别」
→ 查看四宫格结果与右侧指标/图表
→ (可选)点击「保存结果」手动再存一份
→ 到「日志记录 / 图表分析 / 数据管理」查看归档与统计
若「参数设置」中开启了自动保存,识别完成后会自动写入当日图片目录与数据库。
4.2 手动框选分割流程
上传图片
→ 点击「手动框选」(按钮保持选中)
→ 在左上原图左键拖拽框选目标(可多个)
→ 需要时「撤销框选」或「清除框选」
→ 点击「应用框选分割」
→ 系统对每个选区做 GrabCut 分割 + HSV 类别估计
→ 右上/左下/右下与右侧面板同步更新
框选模式下:
-
左键:拖拽画框
-
右键/中键:平移图像
-
滚轮:缩放
4.3 调参与模型切换流程
「参数设置」调整置信度 / IoU / 最大检测数等 → 保存参数
「系统配置」指定 YOLO 模型路径 → 保存配置
「参数设置」点击「重新加载模型」
回到主页重新识别验证效果
4.4 样式定制流程
「系统样式」选择主题预设
→ 调整字体/字号/颜色(可选)
→ 「预览效果」临时查看
→ 「保存并应用」持久化到 config/settings.json
4.5 数据查看与导出流程
「日志记录」刷新 / 导出当日日志 / 打开日志目录
「图表分析」刷新查看统计图
「数据管理」查看已存图片、参数快照、识别归档
五、技术架构
5.1 总体分层
┌─────────────────────────────────────────────┐
│ main.py 入口 │
│ 高 DPI / 启动窗口 │
└──────────────────────┬──────────────────────┘
│
┌──────────────────────▼──────────────────────┐
│ ui/ 表现层(PyQt5) │
│ NavBar · MainWindow · Pages · Widgets │
└──────────────────────┬──────────────────────┘
│
┌──────────────────────▼──────────────────────┐
│ core/ 业务与算法层 │
│ fruit_detector · database · storage │
│ config_manager · theme │
└──────────────────────┬──────────────────────┘
│
┌──────────────────────▼──────────────────────┐
│ 数据与资源(本地文件) │
│ config/ · data/logs · data/images │
│ data/db/*.db · models/*.pt · assets/ │
└─────────────────────────────────────────────┘
5.2 目录结构
python9/
├── main.py # 程序入口
├── run.bat # Windows 一键启动
├── requirements.txt # 依赖清单
├── README.md # 说明文档(本文件)
├── config/
│ └── settings.json # 运行参数与样式配置
├── core/
│ ├── config_manager.py # 配置加载/保存
│ ├── database.py # SQLite 持久化
│ ├── storage.py # 按日期文件存储与写日志
│ ├── fruit_detector.py # 检测/分割/识别引擎
│ └── theme.py # 主题与全局 QSS
├── ui/
│ ├── main_window.py # 主窗口与页面切换
│ ├── pages/ # 各功能页面
│ │ ├── home_page.py # 识别主页
│ │ ├── log_page.py # 日志页
│ │ ├── chart_page.py # 图表页
│ │ ├── param_page.py # 参数页
│ │ ├── manage_page.py # 管理页
│ │ ├── config_page.py # 系统配置页
│ │ └── style_page.py # 系统样式页
│ └── widgets/
│ ├── nav_bar.py # 顶部图标导航
│ ├── image_viewer.py # 可交互图像面板
│ └── scroll_page.py # 带滑条的页面基类
├── utils/
│ └── make_demo_image.py # 演示图生成
├── models/ # YOLO 权重目录(可选)
├── assets/ # 演示资源
└── data/
├── logs/YYYY-MM-DD/ # 按日日志
├── images/YYYY-MM-DD/ # 按日图片(original/detected/segmented/labeled)
└── db/fruit_app.db # SQLite 数据库
5.3 基础框架与库
| 类别 | 技术 | 说明 |
|---|---|---|
| GUI 框架 | PyQt5 | 主窗口、导航、多页面 QStackedWidget、表格、表单、文件对话框 |
| 视觉库 | OpenCV | 图像编解码、HSV、形态学、轮廓、GrabCut、画框标注 |
| 数值计算 | NumPy | 掩膜运算、置信度统计、坐标裁剪 |
| 图表 | Matplotlib | 嵌入 Qt 的 FigureCanvasQTAgg 绘制饼图/柱状图/折线图 |
| 深度学习(可选) | Ultralytics YOLO + PyTorch | 目标检测/实例分割推理 |
| 数据库 | SQLite3 | 操作日志、识别记录、参数快照、图片索引 |
| 配置 | JSON | config/settings.json 持久化业务参数与样式 |
5.4 UI 设计要点
-
无侧边栏:顶部图标按钮切换页面
-
全局主题引擎 :
core/theme.py生成 QSS,一处修改、全站生效 -
ScrollPage:页面内容超出时可滚动,适配不同分辨率
-
ImageCanvas:自研视图变换(缩放/平移/旋转)与框选坐标映射
六、所用算法说明
6.1 引擎选择策略
启动 / 重新加载模型
→ 若配置路径或 models/best.pt、yolov8n.pt 存在且 ultralytics 可用
→ backend = yolo(深度学习)
→ 否则
→ backend = opencv(HSV 颜色分割演示引擎)
主页「开始识别」调用 FruitRecognizer.recognize(); 「应用框选分割」调用 FruitRecognizer.recognize_regions()。
6.2 OpenCV HSV 颜色分割(默认演示引擎)
思路: 不同水果在 HSV 空间有较稳定的色相区间,通过阈值分割 + 形态学 + 轮廓提取得到候选目标。
主要步骤:
-
BGR → HSV,高斯模糊降噪
-
按水果类别预设 HSV 范围做
inRange得到二值掩膜 -
开运算 / 闭运算去除噪点、填补空洞
-
findContours提取外轮廓,过滤过小面积与异常长宽比 -
由填充率、面积占比估算置信度
-
简易 NMS(非极大值抑制) 去除重叠框
-
生成检测框图、分割图、分割标注图
涉及 OpenCV API: cvtColor、GaussianBlur、inRange、morphologyEx、findContours、boundingRect、drawContours 等。
6.3 手动框选 + GrabCut 精修
思路: 用户提供矩形作为"可能前景",用图割算法自动分离前景/背景。
主要步骤:
-
将框选矩形映射到原图像素坐标
-
对 ROI 执行
cv2.grabCut(GC_INIT_WITH_RECT) -
取确定/可能前景像素作为分割掩膜;前景过少时回退为整框
-
对掩膜内像素做 HSV 直方图与预设水果色域匹配,估计类别与置信度
-
汇总为
Detection列表并统一渲染四宫格结果
6.4 YOLO 深度学习检测(可选)
当加载到 .pt 权重时:
-
调用 Ultralytics
YOLO.predict -
读取
boxes(类别、置信度、xyxy 框) -
若模型带
masks,缩放对齐到原图尺寸作为分割掩膜 -
按多/单目标模式筛选结果
-
进入统一的结果构建与可视化流程
适用于自定义水果数据集训练的权重,或 COCO 等含 apple/banana/orange 等类别的通用权重。
6.5 后处理与评价指标(演示计算)
-
NMS:按置信度排序,抑制 IoU 过高的重复框
-
准确率 / 召回率 / 精确率:在演示引擎中由检测置信度分布估算,用于大屏展示与趋势分析(非严格标注集评测)
-
类别统计:按中文类别名聚合计数,驱动柱状图与饼图
6.6 图像交互中的坐标变换
框选与标注需要在「控件坐标 ↔ 图像像素坐标」之间转换,算法考虑:
-
画布居中平移偏移
-
旋转角(以 90° 步进为主)
-
用户缩放系数 × 自适应 fit 缩放
从而保证缩放/旋转后仍能正确框选原图像素区域。
七、数据存储说明
7.1 文件归档(按日期)
data/logs/2026-08-29/app.log
data/images/2026-08-29/original/*.jpg
data/images/2026-08-29/detected/*.jpg
data/images/2026-08-29/segmented/*.jpg
data/images/2026-08-29/labeled/*.jpg
目录根路径可在「系统配置」中修改。
7.2 SQLite 主要表
| 表名 | 内容 |
|---|---|
operation_logs |
操作日志(时间、级别、消息) |
recognition_logs |
识别记录(类别、数量、准确率、召回率、路径等) |
saved_params |
参数/样式快照 |
saved_images |
已存图片索引(类别、路径、备注) |
默认数据库:data/db/fruit_app.db。
八、配置项说明
配置文件:config/settings.json
| 字段 | 含义 | 默认示例 |
|---|---|---|
confidence_threshold |
置信度阈值 | 0.45 |
iou_threshold |
NMS IoU 阈值 | 0.45 |
max_detections |
最大检测数 | 50 |
detect_mode |
multi / single |
multi |
model_path |
YOLO 权重路径 | 空 |
enable_segmentation |
是否分割可视化 | true |
save_results |
识别后自动保存 | true |
log_dir / image_dir / db_path |
存储路径 | data/... |
theme_preset |
主题预设 | dark_blue |
font_hao |
正文字号 | 六号 |
font_family |
字体 | Microsoft YaHei UI |
bg_main 等 |
自定义颜色(空则用预设) | 空 |
九、常见问题
Q1:启动后识别不准? 默认是 HSV 演示引擎,适合色差明显的水果图。要提高精度请训练/放置 YOLO 水果权重并在配置中指定。
Q2:中文路径图片读不出? 程序已使用 np.fromfile + cv2.imdecode 兼容中文路径;请确认文件本身未损坏。
Q3:如何确认当前引擎? 识别完成后,右侧「识别内容」摘要中会显示 引擎:opencv、引擎:yolo 或 引擎:manual。
Q4:字太小/太大? 到「系统样式」调整正文字号(默认六号);标题/导航可单独设置。
Q5:页面内容显示不全? 各页已启用滚动条,向下/向右拖动即可查看全部控件与表格列。
十、快速命令汇总
# 安装依赖
py -3 -m pip install -r requirements.txt
# (可选)深度学习
py -3 -m pip install ultralytics torch torchvision
# 生成演示图
py -3 utils/make_demo_image.py
# 启动
py -3 main.py
十一、开发与扩展建议
-
替换为自研水果 YOLO 模型 :将
best.pt放入models/,类别名建议与core/fruit_detector.py中FRUIT_CN对齐或自行扩展映射。 -
增加真实评测:引入带标注的验证集,用标准 Precision/Recall/mAP 替换演示指标。
-
扩展框选方式:可在现有矩形框选基础上增加多边形/画笔掩膜。
-
批量识别:可在主页增加文件夹批量导入与结果导出 CSV。
十二、版本信息
-
项目名称:水果深度学习识别可视化大屏
-
界面框架:PyQt5
-
视觉算法:OpenCV(HSV + GrabCut) / 可选 YOLO
-
数据层:SQLite + 按日期文件归档
-
默认字号:中文六号(7.5 磅)
如需二次开发,建议从 core/fruit_detector.py(算法)与 ui/pages/home_page.py(主交互)入手;样式统一修改 core/theme.py 与「系统样式」页即可。







https://github.com/zhangsansh/Python-PyQt56.git
https://github.com/zhangsansh/Python-PyQt56.git