Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

果视智选 —— 基于计算机视觉的智能水果品质检测与分拣系统

基于 YOLOv5 目标检测 + Retinex 图像增强 + HSV 颜色分析 的苹果品质自动检测与分级系统,提供完整的 PyQt5 图形界面,支持实时摄像头检测、自动抓拍、品质分级和历史数据管理。


系统架构

摄像头实时画面
      │
      ▼
YOLOv5 目标检测(定位苹果区域)
      │
      ▼  检测面积占比 > 75.5% 时触发自动抓拍
      │
      ▼
┌─────────────────────────────────┐
│       图像处理流水线              │
│  ┌───────────────────────────┐  │
│  │  MSRCP Retinex 图像增强    │  │
│  └─────────┬─────────────────┘  │
│            ├──→ 果径测量(最小外接圆)
│            ├──→ HSV 颜色分析(红/黄/黑面积)
│            └──→ 损伤区域检测
└─────────────────┬───────────────┘
                  ▼
         苹果品质自动分级
        (一级 / 二级 / 三级)
                  │
          ┌───────┴───────┐
          ▼               ▼
    SQLite 存储       GUI 界面展示

核心功能

  • 实时目标检测:基于 YOLOv5s 对摄像头画面进行实时苹果检测与标注
  • 自动抓拍:当苹果检测区域占画面比例超过阈值时自动触发抓拍
  • 图像增强:MSRCP(Multi-Scale Retinex with Chromaticity Preservation)增强算法,提升颜色特征
  • 品质指标分析:
    • 果径:通过轮廓检测 + 最小外接圆计算
    • 红色着色度:HSV 色彩空间多区间红色面积占比
    • 损伤面积:黑色区域检测
  • 自动分级:依据着色度、果径、损伤面积三项指标划分品质等级
  • 图像操作工具箱:灰度化、滤波、形态学、边缘检测、阈值处理、直方图均衡化、伽马校正等
  • 历史数据管理:日期查询、范围筛选、趋势图表可视化

分级标准

等级 红色着色度 果径 损伤面积
一级 >= 0.80 >= 7 无损伤
二级 0.55 ~ 0.80 5 ~ 7 <= 1
三级 其余情况 — —

技术栈

类别 技术
GUI 框架 PyQt5
目标检测 YOLOv5s (PyTorch)
图像处理 OpenCV, NumPy
图像增强 Retinex (SSR / MSR / MSRCR / MSRCP)
数据库 SQLite(主用)/ MySQL(备选)
数据可视化 Matplotlib
数据导出 openpyxl (Excel)

项目结构

fruit_classify/
├── main.py                     # 程序入口
├── config.py                   # 全局配置(路径、算法参数)
├── requirements.txt            # Python 依赖清单
│
├── gui/                        # GUI 界面层
│   ├── main_window.py          # 主窗口(摄像头检测 + 操作面板)
│   ├── graphics_view.py        # 图像显示控件(缩放/拖拽/另存为)
│   ├── tree_view.py            # 文件系统树(双击加载图片)
│   ├── list_widgets.py         # 操作列表控件(拖拽排序)
│   ├── list_widget_items.py    # 图像操作项(灰度/滤波/边缘检测等)
│   ├── stacked_widget.py       # 参数面板堆叠切换
│   ├── table_widget.py         # 参数表格(SpinBox/ComboBox)
│   ├── database_viewer.py      # 历史数据查看器(日历/图表)
│   ├── item_config.py          # 操作项 ↔ 参数表格映射
│   └── flags.py                # OpenCV 操作常量
│
├── processing/                 # 图像处理核心
│   ├── pipeline.py             # 完整检测流水线(分析→分级→入库)
│   ├── functions.py            # 核心算法(果径/颜色/损伤检测)
│   ├── enhance.py              # Retinex 图像增强算法库
│   └── auto_grab.py            # 自动抓拍判断逻辑
│
├── models/                     # 模型文件
│   ├── best.pt                 # 自定义微调权重
│   └── yolov5s.pt              # YOLOv5s 预训练权重
│
├── resources/                  # 静态资源
│   ├── icons/                  # 界面图标
│   ├── styles/style.qss        # Qt 样式表
│   └── reference/              # 参考图片
│
├── data/                       # 数据文件
│   ├── database.db             # SQLite 检测记录数据库
│   └── output/                 # Excel 导出目录
│
├── tests/                      # 测试脚本
│   ├── batch_test.py           # 批量图片处理并导出 Excel
│   ├── generate_test_data.py   # 生成随机测试数据
│   └── camera_test.py          # 检测可用摄像头
│
└── tools/                      # 工具脚本
    ├── install_deps.py         # 依赖自动安装
    └── mysql_viewer.py         # MySQL 数据查看器(可选)

部署说明:本项目最终部署在 树莓派(Raspberry Pi) 平台上,配合外接摄像头、电机、传送带硬件使用。以下安装步骤仅供参考,不建议直接在本地电脑上运行,部分硬件相关功能(如实时摄像头检测、自动抓拍)需要在实际部署环境中才能正常工作。

快速开始

环境要求

  • Python >= 3.8
  • 树莓派(推荐 Raspberry Pi 4B 及以上)或兼容的 Linux 开发板
  • USB 摄像头(用于实时检测)

安装

# 克隆项目
git clone <repository-url>
cd fruit_classify

# 安装依赖
pip install -r requirements.txt

# 或使用自动安装工具
python -m tools.install_deps

运行

# 启动主程序
python main.py

使用流程

  1. 启动程序后,点击 「实时监测」 按钮开启摄像头
  2. YOLOv5 自动检测画面中的水果,检测框实时显示
  3. 当苹果完全进入画面后,系统自动抓拍并分析
  4. 界面工具栏实时显示 红色着色度 / 果径 / 损伤面积 / 分级结果
  5. 检测结果自动写入 SQLite 数据库
  6. 点击 「检测历史记录」 可按日期查询和查看趋势图

辅助工具

# 批量处理图片并导出 Excel
python -m tests.batch_test <图片文件夹路径> <输出Excel路径>

# 生成测试数据(默认 5000 条)
python -m tests.generate_test_data 5000

# 检测系统可用摄像头
python -m tests.camera_test

# MySQL 数据查看器(需额外安装 mysql-connector-python)
python -m tools.mysql_viewer --host 192.168.1.100 --user root --password xxx --database db_2024

算法说明

Retinex 图像增强

系统采用 MSRCP(Multi-Scale Retinex with Chromaticity Preservation) 算法进行图像预处理,核心原理:

  1. 对图像三通道计算平均亮度
  2. 在多个尺度(sigma = 15, 80, 200)上执行 Single Scale Retinex
  3. 加权求均值得到 Multi-Scale Retinex 结果
  4. 通过色彩保持映射还原到 RGB 空间

该算法能有效消除光照不均的影响,增强苹果表面颜色特征,提升后续 HSV 颜色分析的准确性。

HSV 颜色分析

将增强后的图像转换到 HSV 色彩空间,通过预定义的颜色区间掩膜计算各色域面积:

颜色类别 H 范围 用途
橙红色 0° ~ 10° 红色着色度计算
纯红色 0° ~ 5°, 175° ~ 180° 红色着色度计算
深红色 150° ~ 180° 红色着色度计算
黄色 20° ~ 40° 背景区域
黑色 V < 70 损伤区域检测

红色着色度 = 红色区域面积 / (红色 + 黄色 + 黑色) 总面积

果径测量

  1. MSRCP 增强 → 灰度化 → 高斯模糊
  2. 轮廓检测(RETR_EXTERNAL)
  3. 提取最大轮廓 → 计算最小外接圆半径
  4. 像素半径按标定比例转换为实际尺寸(cm)

配置说明

部署说明

所有可调参数集中在 config.py 中:

参数 默认值 说明
DETECTION_AREA_THRESHOLD 0.755 YOLOv5 检测框占画面比例阈值
RETINEX_SIGMA_LIST [15, 80, 200] 多尺度 Retinex 的 sigma 值
RETINEX_LOW_CLIP 0.01 自动色阶下限裁剪比例
RETINEX_HIGH_CLIP 0.99 自动色阶上限裁剪比例
PIXEL_TO_CM 1/50 像素到厘米的换算系数
PIXEL_AREA_TO_CM2 1/50625 像素面积到平方厘米的换算系数

注意:PIXEL_TO_CM 和 PIXEL_AREA_TO_CM2 需根据实际拍摄距离和镜头参数进行标定。

数据库结构

SQLite 数据库 data/database.db 中的 data 表:

字段 类型 说明
r TEXT 果径(像素半径)
red_area INTEGER 红色区域面积(px)
yellow_area INTEGER 黄色区域面积(px)
black_area INTEGER 黑色/损伤区域面积(px)
red TEXT 红色着色度(0~1)
class INTEGER 分级结果(1/2/3)
date TEXT 检测日期(yyyy-MM-dd)

License

本项目仅供学习与研究使用。

About

基于 YOLOv5 目标检测 + Retinex 图像增强 + HSV 颜色分析的苹果品质自动检测与分级系统,提供完整的 PyQt5 图形界面,支持实时摄像头检测、自动抓拍、品质分级和历史数据管理。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages