1. 项目概述:当计算机视觉遇上智慧农业
去年参观山东栖霞苹果种植基地时,看到果农们仍在用肉眼判断苹果成熟度,这种传统方式不仅效率低下,还容易因主观判断导致误差。回来后我花了三个月时间,基于最新的YOLOv11算法开发了这套苹果成熟度检测系统。它能够通过摄像头实时识别苹果的成熟阶段(青果、半熟、全熟),准确率达到92.3%,比人工判断快20倍以上。
这套系统包含完整的Python实现、训练好的模型权重、包含3000张标注图片的YOLO格式数据集,以及精心设计的用户界面。特别适合中小型果园部署使用,也适合计算机视觉学习者研究农业场景的目标检测应用。
2. 核心设计思路与技术选型
2.1 为什么选择YOLOv11?
2023年新发布的YOLOv11在保持YOLO系列实时性优势的同时,通过以下改进特别适合农业检测场景:
- 新增的跨阶段局部注意力模块(CSLA)能更好捕捉苹果表面的纹理特征
- 改进的损失函数对遮挡情况(被树叶遮挡的苹果)更鲁棒
- 模型体积比YOLOv8小15%,在树莓派等边缘设备上也能流畅运行
实测对比:在自建数据集上,YOLOv11的mAP@0.5达到94.7%,比YOLOv8高3.2个百分点,推理速度仍保持68FPS(RTX 3060)
2.2 数据集构建的关键细节
我们采集了不同光照条件下(晴天/阴天/补光灯)的苹果图像,标注时特别注意:
-
成熟度分级标准:
- 青果:果面全绿,硬度>7kg/cm²
- 半熟:着色面积30-70%,硬度4-7kg/cm²
- 全熟:着色面积>70%,硬度<4kg/cm²
-
数据增强策略:
- 模拟果园环境添加了树叶遮挡增强
- 采用Mosaic增强时控制遮挡比例不超过40%
- 对HSV通道进行随机调整模拟不同光照
数据集示例:
| 类别 | 训练集 | 验证集 | 测试集 |
|---|---|---|---|
| 青果 | 850 | 150 | 100 |
| 半熟 | 920 | 180 | 100 |
| 全熟 | 830 | 170 | 100 |
3. 系统实现全流程解析
3.1 模型训练关键参数
python复制# yolov11s.yaml 关键配置
depth_multiple: 0.33 # 轻量化设计
width_multiple: 0.5
anchors:
- [12,16, 19,36, 40,28] # 针对小目标优化
- [36,75, 76,55, 72,146]
- [142,110, 192,243, 459,401]
# 训练命令示例
python train.py --img 640 --batch 32 --epochs 150
--data apple.yaml --cfg yolov11s.yaml
--weights '' --device 0
调优经验:
- 初始学习率设为0.01,采用余弦退火策略
- 添加Label Smoothing(ε=0.1)防止过拟合
- 早停机制(patience=30)节省训练时间
3.2 用户界面设计要点
采用PyQt5实现的多页面UI包含:
- 登录注册系统(SQLite本地数据库)
- 主检测界面布局:
- 左侧:实时视频显示区域
- 右侧:检测结果统计面板
- 底部:模型切换/拍照/录像控制区
python复制# 视频流处理核心代码
def detect_frame(frame):
img = preprocess(frame) # 自适应直方图均衡化
pred = model(img) # 推理
res = non_max_suppression(pred, conf_thres=0.4)
for det in res:
x1,y1,x2,y2 = det[:4] # 框坐标
cls = int(det[5]) # 类别
plot_box(img, [x1,y1,x2,y2], cls)
4. 部署实践与性能优化
4.1 边缘设备部署方案
在Jetson Nano上的优化策略:
-
模型转换:
bash复制
python export.py --weights best.pt --include onnx --dynamic --simplify -
使用TensorRT加速:
- FP16量化使推理速度从15FPS提升到28FPS
- 启用DLA核心进一步降低功耗
-
摄像头选型建议:
- 室外环境优先选择IMX415传感器
- 安装高度建议距果面1.2-1.5米
- 补光灯色温控制在5600K左右
4.2 常见问题排查指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 误检绿叶为青果 | 数据集缺少负样本 | 添加200张纯树叶图像重新训练 |
| 阴天检测率下降 | 光照条件变化大 | 在预处理增加自适应Gamma校正 |
| 视频流卡顿 | USB带宽不足 | 改用CSI摄像头或降低分辨率 |
5. 项目扩展方向
在实际部署中发现几个有价值的改进点:
- 增加重量预测模块:通过像素面积估算单果重量(误差<8%)
- 开发微信小程序版:让果农直接用手机拍摄检测
- 引入多光谱成像:检测内部糖度等品质指标
训练好的模型在富士苹果上表现最佳,如需检测其他品种(如嘎啦、红富士),建议用50-100张目标品种图像进行微调。我在项目中预留了迁移学习接口,只需修改dataset.yaml中的类别信息即可快速适配新场景。