大概去年冬天,福建漳州一家休闲食品厂的老板找到我们。他们的产品——独立小包装的肉干、卤蛋、豆干——超市退货率一直在涨,主要原因是包装问题:封口没封严导致漏气、生产日期喷码看不清、包装膜偏移。

问题说大不大,但很烦人。人工抽检每分钟看几包,一条线一分钟跑200多包,抽检率不到3%。更麻烦的是,包装缺陷不像产品品质缺陷那样有固定规律——封口机刀片磨损是渐进的,喷码机墨水有时候突然堵了,包装膜跑偏可能持续几秒又自己恢复。靠人眼看着实盯不过来。

老板之前找过视觉方案供应商,报价十几万到二十多万不等,他觉得贵,而且担心上下料结构改造要停产。所以我们谈的方案是:不改产线结构,在现有包装机后面加装视觉检测工位,检测到缺陷就触发吹气剔除。这篇文章记录整个过程。

一、现场摸底

去工厂待了一整天,把3条包装线的实际情况摸清楚:

车间主任还提了一个关键信息:“你们别只看封口,有时候膜跑偏半毫米,封口就没封在热封区域上,看着是封了其实一捏就开。”这意味着检测不能只看封口外观,还要看封口位置是否在正确区域内

二、方案设计

根据现场情况,确定了方案架构:

光学系统

最难的部分。包装膜高反光、高速运动、三种缺陷需要不同的光照方式。

但三条检测功能共用一条产线,不能装三套相机——成本太高,而且空间不够。最终方案是一台高速工业相机+两路分时光源

触发方式用编码器+光电传感器组合,保证每包包装的拍摄位置一致。

计算系统

检测流程概览:
┌──────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────┐
│ 光电触发  │ →  │ 背光拍摄封口  │ →  │ 同轴光拍摄喷码│ →  │ 条形光拍 │
│          │    │ (帧1)        │    │ (帧2)        │    │ 包装位   │
└──────────┘    └──────────────┘    └──────────────┘    └──────────┘
                                                              │
                                                              ▼
                     ┌────────────────────────────────────────────┐
                     │  边缘AI网关模型推理 (YOLOv8 + OCR + 边缘检测) │
                     │  检查A: 封口是否有缺口/夹料/未封严          │
                     │  检查B: 喷码字符是否完整/清晰/位置正确      │
                     │  检查C: 包装膜边缘是否在允许范围内           │
                     └────────────────────────────────────────────┘
                                 │
                    ┌────────────┴────────────┐
                    ▼                         ▼
              全部通过 → 放行          任一不合格 → 延时200ms → 气嘴剔除

模型选型考虑

一开始我考虑过用一个模型同时检测所有缺陷(多任务学习),但实际测试发现封口缺陷和喷码缺陷的图像特征差异太大——一个是透光图看纹理,一个是正面图看字符——硬塞进一个模型效果不好,两个模型交替跑更合理。

踩坑教训:一开始我用YOLOv8检测喷码字符区域再去OCR识别,但多了一步检测增加了延迟(约50ms)。后来直接根据包装设计稿的固定ROI区域裁剪喷码位置——前提是包装位置一致(靠机械定位保证)。位置稳定的情况下,固定ROI比动态检测更可靠。

三、实施过程

第一周:打光和成像调试

光学方案是最花时间的环节,没有之一。

背光方案我们试了三种光源:

喷码的拍摄更折腾。同轴光打在铝箔膜上会产生严重的镜面反射,喷码字符被亮斑淹没。最后在相机镜头前加了偏振镜,并且把同轴光源的角度调到约15度——既照亮字符区域,又避免镜面反射进入镜头。

一个意外的发现:喷码机的墨水在不同批次包装膜上的附着力不一样。有一批包装膜表面处理工艺改了,喷码容易模糊。我们用OCR的置信度分数作为"喷码质量"的量化指标——低于某个阈值就判为缺陷。这个阈值需要在每种新膜批次上重新标定。

第二周:数据采集和标注

从产线上收集了大约5000包样本(包括好品和各类缺陷),打标签花了3个人工日。主要工作量:

标注时发现一个典型问题:有些封口"假好"——表面看着封上了,但轻轻一捏就开。这类缺陷在常规光照下很难看出来,只有背光透射才能发现。这从反面验证了背光方案的必要性。

第三周:模型训练和调优

YOLOv8n-seg的推理速度:在RK3588 NPU上跑约15ms一帧。加上前处理和后处理,算上三帧切换的时间,单包总检测耗时约120ms,远低于300ms的窗口——满足要求。

OCR部分遇到了问题:PaddleOCR的推理在NPU上不支持优化,只能跑CPU。6B模型每帧约需80ms,加上三帧的总耗时到了200ms+,有点悬。解决方案是把OCR模型换成更轻量的PP-OCR_mobile_v2(5B模型),推理时间降到约40ms。

但mobile模型的识别率在模糊喷码上下降了。特别是在油墨不足时,字符残缺严重,mobile模型经常认成空字符串。我们加了一个预处理步骤:对喷码区域做自适应直方图均衡化(CLAHE),增强字符对比度后再送入OCR。处理后识别率从约85%提升到约93%。

一个让我印象深刻的踩坑:有几天喷码检测突然大量报错——明明喷码看着没问题,系统一直判不合格。排查了半天发现是白平衡漂移。车间那台包装机旁边新增了一台设备,改变了环境光照色温。自适应白平衡解决了这个问题。后来我们在代码里加了定时自动白平衡校准。

第四周:联调上线

联调阶段暴露了几个问题:

正式上线后的前三天,我们有人驻场观察。第三天晚上,系统在凌晨2点检出连续5包封口缺陷(封口夹料),触发了阈值告警,直接推送到车间主任手机。他起来一看,是投料工人在换料时把一块塑料膜碎片带进了包装机。如果不及时发现,后面至少2000包都要报废。

四、实际效果

系统运行满2个月后,做了一次全面的效果评估:

缺陷检出率:约90%
系统检出的缺陷中,人工复判确认约90%是真缺陷。漏检部分主要是轻微封口偏移(模型判为了正常),以及个别喷码字符缺失但被OCR识别为模糊放行的。
退货率变化
项目上线前的包装缺陷退货率约1.2-1.8%,上线两个月后降至约0.3-0.5%。超市端反馈明显改善。
误报率:稳定在约6-8%
头两周偏高(10-15%),第三周开始稳定在6-8%左右。误报主要是包装膜上的非规律污渍被误判为缺陷。老板说能接受,因为误报品会回流重新检查,不会直接报废。

也有些预期之外的效果:

车间主任最满意的一个功能是缺陷趋势图。以前他只能凭感觉说"最近的封口好像不太行",现在能看到每天的缺陷分类统计和趋势曲线。比如他观察到封口缺陷率在每周二下午偏高,排查发现是封口机刀片的热电偶每两周需要校准一次——周二下午刚好是校准周期结束时,刀片温度开始偏离。

质检员的工作也变了。以前她们需要站在产线边盯着每一包包装看,眼累而且效果差。现在她们的工作变成了:确认AI检出的缺陷是否真实、记录新的缺陷类型、管理剔除品的回流和复检。劳动强度降了不少。

五、遇到的问题

这个项目踩了几个印象比较深的坑:

镜头起雾。车间有蒸汽,相机镜头在开机半小时后起雾,图像模糊。一开始以为是镜头质量问题,后来发现是相机和车间温差导致的冷凝。方案:给相机加了一个小型加热环(类似车载摄像头的除雾设计),同时把相机安装在密封防护罩内并充入干燥氮气——设备供应商提供的标准方案。

铝箔膜切光。不同批次的铝箔膜反光特性有差异,同一批次首尾卷也有差异。有一批包装膜表面加了哑光涂层,背光源穿透力不足,封口透光图变暗。解决方案:加了自动增益控制(AGC),根据每帧图像的亮度自动调整曝光时间。

产线速度波动。包装机有时候会降速(比如上游供料不足),相机触发频率跟着变。原来的编码器触发方案在低速下没问题,但高速下有累计误差。改用了编码器+光电传感器双触发:编码器做粗定位,光电传感器做精确定位。

OCR被非喷码字符干扰。包装膜上印刷的生产批号和图案在某些角度下会被误识别为喷码字符。解决方案:在训练OCR时加入了背景负样本(无喷码区域的图片),模型学会了"看不到字符时输出空结果"。

六、个人思考

这个项目做完之后,有几个感受:

高速产线的视觉检测,光学方案比模型更关键。模型可以在上线后持续优化,但光学方案选错了,后面再怎么调也救不回来。打光调试占了整个项目将近一半的时间,不是没有道理的。

"多缺陷合一检测"听起来很帅,但实际拆分更靠谱。一开始我也想搞一个模型解决所有问题,但不同的缺陷需要不同的光照、不同的分辨率、不同的算法。拆开来做反而简单、可靠。

食品包装的缺陷检测比工业零部件质检更难,但原因不是你想的那样。不是因为精度要求高,而是因为"缺陷"的定义在变。食品包装的材质批次差异大、环境温湿度变化大、设备状态也在变——今天看起来正常的封口,换了新批次膜可能就是缺陷。所以模型必须能持续学习和自适应。

剔除装置是系统的薄弱环节。视觉检测做得再好,吹气口没把缺陷包吹下来,一切等于零。机械部分——气嘴位置、气压大小、吹气延时——这些看似简单的环节反而需要反复调试。机械可靠性的重要程度不亚于AI模型。

车间主任的手机告警是最有价值的功能之一。凌晨2点的那次告警在一线工人还没发现异常时就触发了,避免了大量次品流出。这种"发现问题→推送告警→立即处理"的闭环,比单纯出报表有意义得多。

七、给你的建议

如果你也在考虑给包装线加视觉检测:

  1. 先搞清楚缺陷的真假比例。有些所谓的"缺陷"其实不影响使用(比如包装膜微皱),不要为了追求检出率把合格品也判掉。先收集样本、和客户沟通清楚标准再动手。
  2. 不要低估打光的难度。预留至少一周时间专门调试光学方案。测试不同光源颜色、角度、偏振方案,在产线实际速度下验证成像效果。
  3. 选一个合适的剔除方案。气嘴剔除适合轻小包装,但精度有限。如果是重型包装,考虑拨杆或推板。不管哪种方案,都要留出机械调试时间。
  4. 安排模型持续迭代的机制。新包材、新批次、季节变化都会影响检测准确率。保留数据采集和标注的能力,定期用新数据微调模型。
  5. 做好车间环境的心理准备。食品车间油腻、潮湿、温度高,电子设备需要工业防护(IP65以上)。镜头起雾、电路板受潮、传感器进水——这些都不是小概率事件。