Skip to content

ceilf6/SmartFruits

Repository files navigation

SmartFruit 智能果实识别与分析系统

项目概述

SmartFruit是一款基于单片机、大数据和视觉识别的智能果实分析系统,结合了计算机视觉、嵌入式系统和机器学习技术,实现了水果的自动识别、重量测量和数据管理等功能。通过摄像头识别水果种类,通过重量传感器测量重量,同时将数据存储到数据库中进行管理和分析,对水果零售业进行了革命性的改革,实现了无人化、自动化、智能化营养,淘汰了标签等不利于环境的因素,最终实现了商家基于大数据进行预判式管控、对购买者交互友好的商业模式(具体的商业分析可以参考“基于单片机、大数据和视觉识别的smartfruit智能系统.pdf”文件

历史进程

“基于单片机、大数据和视觉识别的smartfruit智能系统.pdf”是第一版,后面进行了更新,将单片机更新为了STM32F407VET

由于 Github 有上传文件大小限制,所以无法上传这个 PDF 文件,有需要请通过 README 最后的邮箱联系我

系统架构

SmartFruit系统由三个主要模块组成:

1. 视觉识别模块

  • 硬件:OV7670摄像头、STM32 F4微控制器
  • 功能:捕获水果图像,通过串口传输图像数据到计算机
  • 技术:DCMI接口图像采集,UART串口通信

2. 重量测量模块

  • 硬件:HX711重量传感器、STM32微控制器
  • 功能:精确测量水果重量,数据通过串口传输到计算机
  • 技术:HX711信号放大和转换,串口数据传输

3. 机器学习与数据处理模块

  • 框架:YOLOv5目标检测
  • 功能:水果种类识别、数据分析与存储
  • 技术:深度学习、MySQL数据库、Python数据处理

功能特点

  • 实时水果识别:能够识别至少18种不同种类的水果,包括苹果、香蕉、橙子、草莓、猕猴桃等
  • 精确重量测量:通过高精度传感器测量水果重量
  • 数据管理与分析:结合MySQL数据库存储和管理测量数据
  • 跨平台兼容:支持Windows、macOS和Linux系统
  • 模型导出功能:支持将训练好的模型导出为ONNX、TFLite等格式,方便在单片机上部署

技术实现

视觉识别部分

OV7670摄像头通过STM32 F4微控制器的DCMI接口采集图像,然后通过高速串口(UART)将图像数据传输到计算机。计算机端使用Python程序接收图像数据,并结合YOLOv5模型进行水果种类识别。

# 运行视觉模块显示程序
python ov7670_image_display.py -p COMx

机器学习部分

使用YOLOv5框架训练水果识别模型,识别过程包括:

  1. 准备带标签的水果图像数据集
  2. 配置训练参数(fruits.yaml)
  3. 使用迁移学习训练YOLOv5模型
  4. 将模型部署到应用程序中
# 训练水果识别模型
python train_fruits.py --epochs 100 --batch-size 16 --img-size 640

# 导出优化后的模型
python export_model.py --img-size 320 --format onnx

重量模块部分

重量传感器通过HX711模块将模拟信号转换为数字信号,由STM32微控制器读取并通过串口发送到计算机。计算机端程序接收重量数据,并存储到MySQL数据库中。

# 运行重量数据采集与存储程序
python duqu3.py

# 查看数据库中的重量记录
python db_monitor.py

快速开始

环境需求

  • Python 3.7或更高版本
  • PyTorch 1.7或更高版本(用于YOLOv5)
  • OpenCV 4.5或更高版本
  • MySQL数据库
  • STM32开发环境(Keil MDK或STM32CubeIDE)

安装步骤

  1. 克隆仓库到本地:

    git clone https://github.com/yourusername/smartfruit.git
    cd smartfruit
    
  2. 安装Python依赖:

    pip install -r requirements.txt
    
  3. 配置数据库:

    • 创建MySQL数据库 weight_data
    • 导入数据库结构(可选)
  4. 硬件连接:

    • 将OV7670摄像头连接到STM32 F4开发板
    • 将重量模块连接到另一STM32开发板
    • 通过串口将两个模块连接到计算机

运行系统

  1. 烧录相应固件到STM32开发板:

    • 视觉模块固件
    • 重量模块固件
  2. 启动视觉识别程序:

    python ov7670_image_display.py -p COMx
    
  3. 启动重量数据采集程序:

    python duqu3.py
    
  4. 访问数据管理界面:

    python db_monitor.py
    

开发者指南

模型训练

如需重新训练水果识别模型,按照以下步骤操作:

  1. 准备数据集,放置在 机器学习/dataset 目录下
  2. 修改 fruits.yaml 配置类别和路径
  3. 运行训练脚本:
    python train_fruits.py --epochs 200 --batch-size 16
    
  4. 等待训练完成,模型将保存在 models 目录下

添加新水果类别

  1. 收集新水果的图像
  2. 使用标注工具标注图像
  3. 更新 fruits.yaml 中的类别列表
  4. 重新训练模型

调整重量模块灵敏度

修改重量模块固件中的校准参数,适应不同量程的需求。

故障排除

  1. 视觉模块图像不显示

    • 检查摄像头连接
    • 确认串口配置正确
    • 查看Python控制台错误信息
  2. 水果识别不准确

    • 尝试改善光照条件
    • 提供更多训练数据
    • 调整模型识别阈值
  3. 重量测量不稳定

    • 检查传感器连接
    • 重新校准重量传感器
    • 确保测量平台稳定

贡献指南

欢迎对SmartFruit项目做出贡献!请按照以下步骤:

  1. Fork本仓库
  2. 创建新的特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add some amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 创建Pull Request

联系方式

项目维护者: ceilf6 邮箱: 3506456886@qq.com


SmartFruit - 让果实商业更智能

About

让果实商业更智能:机器学习YOLO + 视觉及重量硬件 + MYSQL数据管理(获评国家级项目)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors