
1. 项目概述这个基于Python的果蔬识别电子秤模拟系统是我带过的一个计算机专业毕业设计项目它完美结合了深度学习技术和嵌入式硬件开发。作为一名长期指导毕业设计的技术顾问我发现这个项目特别适合作为计算机专业的综合实践课题——它不仅涵盖了AI算法应用还涉及前后端开发、数据库设计等完整开发流程。系统核心功能是通过摄像头采集果蔬图像利用训练好的CNN模型进行识别再结合电子秤的称重数据自动计算价格。相比传统电子秤需要人工选择商品类型这套系统能自动识别30种常见果蔬识别准确率可达98%以上称重精度±0.1克从放置物品到显示价格全程不超过1秒。2. 技术选型与架构设计2.1 为什么选择Django框架作为Python最成熟的Web框架之一Django的MTV模式特别适合这类需要快速开发的原型系统。我在指导学生时主要考虑以下几点内置Admin后台省去开发商品管理模块的时间通过简单配置就能实现果蔬档案的CRUD操作ORM支持用Python类定义数据模型即可自动生成MySQL表结构适合不熟悉SQL的学生模板引擎前后端分离开发前可以用Django模板快速搭建演示界面# 示例商品模型定义 class Product(models.Model): name models.CharField(max_length50) # 果蔬名称 price models.DecimalField(max_digits5, decimal_places2) # 单价/斤 image models.ImageField(upload_toproducts/) # 样本图片 created_at models.DateTimeField(auto_now_addTrue) def __str__(self): return self.name2.2 图像识别方案对比我们测试了三种主流算法在自建数据集上的表现算法类型准确率推理速度(FPS)模型大小适合场景MobileNetV392.3%4512MB嵌入式设备部署ResNet5096.8%2898MB服务器端高性能识别YOLOv5s(改进版)98.1%3827MB平衡精度与速度最终选择YOLOv5s进行改进主要考虑到电子秤硬件算力有限使用树莓派4B需要实时性1秒响应对苹果、橙子等相似果蔬的区分能力实际开发中发现在YOLO的损失函数中加入Focal Loss能有效改善小样本类别如稀有果蔬的识别效果3. 核心模块实现细节3.1 图像采集优化方案传统电子秤的拍摄角度会导致严重遮挡和变形。我们通过实验确定了最佳方案45度倾斜摄像头安装在秤盘侧上方避免用户手部入镜环形补光灯解决超市背光环境下的曝光问题背景板颜色使用Pantone 448C最丑绿色作为背景与果蔬形成最大对比度# OpenCV图像预处理代码示例 def preprocess_image(img): # 转换为HSV空间便于颜色分割 hsv cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 背景掩膜针对特定绿色 lower_green np.array([40, 40, 40]) upper_green np.array([70, 255, 255]) mask cv2.inRange(hsv, lower_green, upper_green) # 形态学处理 kernel np.ones((5,5), np.uint8) mask cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 提取前景 res cv2.bitwise_and(img, img, mask~mask) return res3.2 称重-识别联动设计硬件交互是项目的难点之一关键要实现重量稳定检测连续5次读数差值0.5g才触发识别防抖机制用户放置物品时的震动会导致误触发双线程通信主线程处理UI子线程监控串口数据# 串口通信核心代码 import serial from threading import Thread class ScaleReader: def __init__(self, port/dev/ttyUSB0): self.ser serial.Serial(port, 9600, timeout1) self.current_weight 0.0 self.stable False def start_monitoring(self): def _read_loop(): while True: line self.ser.readline().decode().strip() if line.startswith(WT:): weight float(line[3:]) self._check_stable(weight) Thread(target_read_loop, daemonTrue).start() def _check_stable(self, new_weight): # 实现重量稳定判断逻辑 ...4. 模型训练关键技巧4.1 数据集构建经验我们收集了超过8000张果蔬图像涵盖不同角度、光照条件和成熟度。几个重要经验数据增强策略针对遮挡随机添加20%-40%面积的灰色方块针对反光添加高斯噪声和随机高光针对角度±30度随机旋转类别不平衡处理对样本少的类别如杨桃、牛油果进行过采样在损失函数中设置类别权重# 使用Albumentations的数据增强管道 import albumentations as A train_transform A.Compose([ A.Rotate(limit30, p0.5), A.RandomBrightnessContrast(p0.2), A.Cutout(num_holes8, max_h_size20, max_w_size20, p0.5), A.HueSaturationValue(hue_shift_limit20, sat_shift_limit30, val_shift_limit20, p0.5), ])4.2 模型轻量化部署为了让模型能在树莓派上流畅运行我们做了以下优化知识蒸馏用ResNet50作为教师模型训练轻量学生模型量化压缩将FP32模型转为INT8体积减少75%TensorRT加速推理速度提升3倍实测发现INT8量化会导致准确率下降约2%但对常见果蔬影响不大。如果识别失败系统会自动降级为手动选择模式5. 系统集成与测试5.1 关键性能指标经过2000次实测得到的系统性能指标测试结果行业标准识别准确率98.3%Top195%称重精度±0.08g±0.1g响应时间0.7-1.2秒2秒连续工作稳定性8小时无内存泄漏4小时无故障5.2 典型问题排查在实际调试中遇到的几个坑串口数据丢失现象偶尔读取到乱码原因树莓派USB供电不足解决给电子秤模块单独供电模型误识别现象将红苹果识别为番茄原因训练样本中番茄占比过高解决调整数据集比例添加更多苹果变种多线程冲突现象界面卡死原因UI线程直接调用串口操作解决采用PyQt的信号槽机制跨线程通信6. 项目扩展方向这个基础系统还可以进一步优化加入条形码识别处理预包装商品开发手机APP实现会员价、电子小票等功能对接进销存系统实时库存监控增加语音提示方便视障人士使用我在实际部署中发现超市员工更希望有个学习模式——当新果蔬上架时可以现场拍照录入系统。这个功能已经在v2版本中实现采用few-shot learning技术只需5张照片就能添加新品类