基于 Python + PyQt5 的水果目标检测与分割可视化系统——水果深度学习识别可视化大屏

水果深度学习识别可视化大屏

基于 Python + PyQt5 的水果目标检测与分割可视化系统。提供上传识别、多/单目标检测、手动框选分割、四宫格图像交互、指标分析、日志归档、图表统计、参数配置与系统样式定制等完整能力。


一、项目简介

本程序面向水果图像智能识别场景,将计算机视觉算法与可视化大屏相结合:

  • 左侧/中部展示 原图、识别结果、分割图、分割识别图 四宫格

  • 右侧展示 准确率、召回率、精确率、识别明细与类别分布图

  • 顶部导航切换 识别、日志、图表、参数、管理、配置、样式 七大页面

  • 识别结果、日志、参数、图片按 日期目录 + SQLite 双重持久化

未配置 YOLO 权重时,系统自动使用 OpenCV HSV 颜色分割 演示引擎,保证开箱可运行;配置自定义/通用 YOLO 权重后,可切换为深度学习推理。


二、功能说明

2.1 识别主页

区域 功能
左上 上传后的原始图片;支持 手动框选 分割区域
右上 自动/手动识别后的检测框与类别标注
左下 分割后的前景区域图像
右下 分割结果叠加类别标签的可视化图
右侧面板 准确率 / 召回率 / 精确率、识别文本明细、柱状分布图

图像交互(四宫格均支持):

  • 鼠标滚轮:缩放

  • 左键拖动:平移(框选模式下改为右键/中键平移)

  • 工具按钮:放大、缩小、左转、右转、复位

  • 双击:视图复位(框选模式下禁用,避免误触)

识别模式:

  • 多目标识别:检测图中多个水果目标

  • 单目标识别:仅保留置信度最高的一个目标

手动框选分割:

  1. 点击「手动框选」进入框选模式

  2. 在左上原图按住左键拖拽矩形,可多次框选

  3. 可「撤销框选」「清除框选」

  4. 点击「应用框选分割」:对选区执行 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 空间有较稳定的色相区间,通过阈值分割 + 形态学 + 轮廓提取得到候选目标。

主要步骤:

  1. BGR → HSV,高斯模糊降噪

  2. 按水果类别预设 HSV 范围做 inRange 得到二值掩膜

  3. 开运算 / 闭运算去除噪点、填补空洞

  4. findContours 提取外轮廓,过滤过小面积与异常长宽比

  5. 由填充率、面积占比估算置信度

  6. 简易 NMS(非极大值抑制) 去除重叠框

  7. 生成检测框图、分割图、分割标注图

涉及 OpenCV API: cvtColorGaussianBlurinRangemorphologyExfindContoursboundingRectdrawContours 等。

6.3 手动框选 + GrabCut 精修

思路: 用户提供矩形作为"可能前景",用图割算法自动分离前景/背景。

主要步骤:

  1. 将框选矩形映射到原图像素坐标

  2. 对 ROI 执行 cv2.grabCutGC_INIT_WITH_RECT

  3. 取确定/可能前景像素作为分割掩膜;前景过少时回退为整框

  4. 对掩膜内像素做 HSV 直方图与预设水果色域匹配,估计类别与置信度

  5. 汇总为 Detection 列表并统一渲染四宫格结果

6.4 YOLO 深度学习检测(可选)

当加载到 .pt 权重时:

  1. 调用 Ultralytics YOLO.predict

  2. 读取 boxes(类别、置信度、xyxy 框)

  3. 若模型带 masks,缩放对齐到原图尺寸作为分割掩膜

  4. 按多/单目标模式筛选结果

  5. 进入统一的结果构建与可视化流程

适用于自定义水果数据集训练的权重,或 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

十一、开发与扩展建议

  1. 替换为自研水果 YOLO 模型 :将 best.pt 放入 models/,类别名建议与 core/fruit_detector.pyFRUIT_CN 对齐或自行扩展映射。

  2. 增加真实评测:引入带标注的验证集,用标准 Precision/Recall/mAP 替换演示指标。

  3. 扩展框选方式:可在现有矩形框选基础上增加多边形/画笔掩膜。

  4. 批量识别:可在主页增加文件夹批量导入与结果导出 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.githttps://github.com/zhangsansh/Python-PyQt56.git

相关推荐
for_ever_love__21 分钟前
python爬虫: GET请求与POST请求
开发语言·爬虫·python·网络编程
张文君28 分钟前
ubuntu26.04坏块分区隔离急速版
java·前端·python
十三画者30 分钟前
【文献分享】CancerCellNet:评估癌症模型转录保真度的计算工具
人工智能·深度学习·数据挖掘·数据分析·数据可视化
茉莉玫瑰花茶33 分钟前
知识库的构建 [ 3 ]
开发语言·python
旧梦952735 分钟前
Java 枚举类详解:从基础语法到高级用法
java·开发语言·python
yivifu36 分钟前
查拼音程序升级版
开发语言·python
2601_9621741744 分钟前
Spring 核心技术解析【纯干货版】- XI:Spring 数据访问模块 Spring-Oxm 模块精讲
数据库·python·spring
咖啡星人k1 小时前
2026 AI Agent 记忆系统:让智能体告别“三秒失忆“,像人类一样越用越懂你(MonkeyCode 实战)
人工智能·深度学习·机器学习·语言模型·自然语言处理
海兰1 小时前
【应用】基于 Next.js 16 + Python mplfinance的金融K线图与技术指标可视化平台(二)
javascript·python·金融