在食品包装上,营养成分表和配料表是消费者了解产品特性的重要信息来源。然而,人工识别和记录这些信息效率低下,特别是在零售、健康管理、食品溯源等场景中需要处理大量商品时。这个项目利用YOLOv11目标检测模型,实现了对食品包装上营养成分表和配料表区域的自动化识别定位。
我曾在连锁超市的智能货架项目中亲身体验过人工采集营养信息的痛苦——每个商品平均需要30秒到1分钟,还经常出现漏检错记。而基于深度学习的自动识别方案,单张图片处理时间可以压缩到200毫秒以内,准确率能达到95%以上。这对于需要批量处理食品信息的场景来说,效率提升是颠覆性的。
YOLOv11作为YOLO系列的最新演进版本,在保持实时性的同时,对小目标检测有显著改进。食品包装上的营养表通常只占整个包装面积的5%-15%,属于典型的小目标检测场景。相比前代版本,YOLOv11主要优化了:
实测数据显示,在相同的数据集上,YOLOv11比YOLOv8在小目标检测上的mAP提升了8.3个百分点。
我们构建了包含3.2万张食品包装图片的数据集,覆盖了:
使用LabelImg进行标注时,特别注意两点:
注意:不要将单个营养元素(如"能量"、"蛋白质"等)作为检测目标,我们的目标是定位整个表格区域。
针对食品包装的特殊性,采用了以下增强组合:
python复制transform = A.Compose([
A.RandomBrightnessContrast(p=0.5),
A.RGBShift(r_shift_limit=15, g_shift_limit=15, b_shift_limit=15, p=0.5),
A.MotionBlur(blur_limit=7, p=0.3), # 模拟手持拍摄模糊
A.Perspective(scale=(0.05, 0.1), p=0.3), # 包装变形
A.Rotate(limit=15, p=0.5) # 角度偏移
], bbox_params=A.BboxParams(format='yolo'))
使用预训练的YOLOv11s模型(小型版本),在4块RTX 3090上分布式训练,关键参数如下:
| 参数项 | 设置值 | 说明 |
|---|---|---|
| 输入尺寸 | 640x640 | 平衡精度和速度 |
| Batch size | 64 | 单卡16,梯度累积4步 |
| 初始学习率 | 0.01 | 余弦退火调度 |
| 优化器 | SGD | momentum=0.937 |
| 训练轮次 | 300 | 早停patience=50 |
训练过程中的mAP变化曲线显示,模型在约200轮后趋于收敛,最终验证集指标:
| 指标 | 数值 |
|---|---|
| mAP@0.5 | 0.963 |
| mAP@0.5:0.95 | 0.817 |
| 推理速度(640x640) | 4.2ms |
根据实际应用场景,我们对比了三种部署方式:
云端服务:
边缘设备:
移动端:
bash复制trtexec --onnx=yolov11.onnx --saveEngine=yolov11.engine \
--fp16 --workspace=2048 --minShapes=images:1x3x640x640 \
--optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
优化前后对比(批量大小=4):
| 优化项 | 原耗时(ms) | 优化后(ms) |
|---|---|---|
| 模型推理 | 16.2 | 11.5 |
| 后处理 | 5.8 | 1.2 |
| 总计 | 22.0 | 12.7 |
智能零售货架:
健康管理APP:
食品厂商品质检测:
问题1:反光包装识别率低
问题2:异形包装定位不准
问题3:多语言混合识别困难
我们在自建测试集上对比了不同方案的性能:
| 模型 | mAP@0.5 | 速度(FPS) | 模型大小(MB) |
|---|---|---|---|
| Faster R-CNN | 0.892 | 8.2 | 168 |
| YOLOv5s | 0.931 | 45 | 14 |
| YOLOv8m | 0.947 | 32 | 25 |
| YOLOv11s(本项目) | 0.963 | 52 | 19 |
实际部署中发现,对于营养表检测这种特定场景,YOLOv11在保持实时性的同时,精度超过了传统检测方法。特别是在小包装食品(如口香糖、小袋零食)上,优势更为明显。
基于这个核心检测能力,可以进一步扩展以下功能:
OCR信息提取:
过敏原提醒:
健康评分系统:
在开发过程中,我发现有几个实用技巧值得分享: