欢迎光临
我们一直在努力

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

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

基于 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.githttps://github.com/zhangsansh/Python-PyQt56.git

    赞(0)
    未经允许不得转载:171主机测评 » 基于 Python + PyQt5 的水果目标检测与分割可视化系统——水果深度学习识别可视化大屏
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址