大概去年冬天,福建漳州一家休闲食品厂的老板找到我们。他们的产品——独立小包装的肉干、卤蛋、豆干——超市退货率一直在涨,主要原因是包装问题:封口没封严导致漏气、生产日期喷码看不清、包装膜偏移。
问题说大不大,但很烦人。人工抽检每分钟看几包,一条线一分钟跑200多包,抽检率不到3%。更麻烦的是,包装缺陷不像产品品质缺陷那样有固定规律——封口机刀片磨损是渐进的,喷码机墨水有时候突然堵了,包装膜跑偏可能持续几秒又自己恢复。靠人眼看着实盯不过来。
老板之前找过视觉方案供应商,报价十几万到二十多万不等,他觉得贵,而且担心上下料结构改造要停产。所以我们谈的方案是:不改产线结构,在现有包装机后面加装视觉检测工位,检测到缺陷就触发吹气剔除。这篇文章记录整个过程。
一、现场摸底
去工厂待了一整天,把3条包装线的实际情况摸清楚:
- 产线速度:最快的线每分钟240包,最慢的160包,平均200包/分钟。意味着检测窗口只有300毫秒不到。
- 缺陷类型:封口缺陷占约60%(封口不严、热封偏位、夹料),喷码缺陷占约25%(模糊、缺失、偏移),包装膜缺陷占约15%(膜偏移、褶皱、破损)。
- 包装材质:铝箔复合膜,表面高反光,上面印有产品信息和图案——给视觉检测增加了不少难度。
- 环境条件:车间有蒸汽(包装线附近有杀菌工序),温度偏高温控一般,照明条件差。
- 现有质检:每半小时人工抽检10包,记录缺陷。但抽检结果反馈到产线调整往往已经滞后了十几分钟。
车间主任还提了一个关键信息:“你们别只看封口,有时候膜跑偏半毫米,封口就没封在热封区域上,看着是封了其实一捏就开。”这意味着检测不能只看封口外观,还要看封口位置是否在正确区域内。
二、方案设计
根据现场情况,确定了方案架构:
光学系统
最难的部分。包装膜高反光、高速运动、三种缺陷需要不同的光照方式。
- 封口检测:背光源透射。包装通过封口区域时,用背光从下方打光,封口良好的地方透光均匀,有缺陷的地方(未封严、夹料)会产生明显的透光差异。
- 喷码检测:同轴光源+低角度光。喷码是黑色油墨在白底区域,同轴光能拍清楚字符边缘。低角度光用来检测凸起的喷码高度一致性——墨水不足时喷出的字符高度会变矮。
- 包装膜偏移:正面条形光源,通过检测包装膜边缘与参考线的距离来判断是否跑偏。
但三条检测功能共用一条产线,不能装三套相机——成本太高,而且空间不够。最终方案是一台高速工业相机+两路分时光源:
- 包装经过第一个检测位时,触发背光源,拍封口透光图
- 下一帧切换到同轴光源,拍喷码图
- 第三帧切换到条形光,拍包装膜位置图
- 三帧都在包装通过相机视野的300毫秒内完成
触发方式用编码器+光电传感器组合,保证每包包装的拍摄位置一致。
计算系统
- 边缘AI网关(RK3588平台):部署YOLOv8 nano模型做封口缺陷检测+OCR模型做喷码识别+边缘检测算法做膜偏移计算
- 剔除装置:检测到缺陷后,延时200ms触发气嘴吹气,把缺陷包吹到次品箱
- 看板:实时显示检测数量、缺陷率、缺陷分类统计。车间主任的手机也能收到告警——当某类缺陷率超过设定阈值时,推送消息提醒调整设备
检测流程概览:
┌──────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
│ 光电触发 │ → │ 背光拍摄封口 │ → │ 同轴光拍摄喷码│ → │ 条形光拍 │
│ │ │ (帧1) │ │ (帧2) │ │ 包装位 │
└──────────┘ └──────────────┘ └──────────────┘ └──────────┘
│
▼
┌────────────────────────────────────────────┐
│ 边缘AI网关模型推理 (YOLOv8 + OCR + 边缘检测) │
│ 检查A: 封口是否有缺口/夹料/未封严 │
│ 检查B: 喷码字符是否完整/清晰/位置正确 │
│ 检查C: 包装膜边缘是否在允许范围内 │
└────────────────────────────────────────────┘
│
┌────────────┴────────────┐
▼ ▼
全部通过 → 放行 任一不合格 → 延时200ms → 气嘴剔除
模型选型考虑
一开始我考虑过用一个模型同时检测所有缺陷(多任务学习),但实际测试发现封口缺陷和喷码缺陷的图像特征差异太大——一个是透光图看纹理,一个是正面图看字符——硬塞进一个模型效果不好,两个模型交替跑更合理。
- 模型A:YOLOv8n-seg(分割版),输入封口透光图,输出封口区域的缺陷掩码。训练集2000张标注图,含好品和6种缺陷类型。
- 模型B:PaddleOCR轻量版(ch_PP-OCRv4),输入喷码区域裁剪图,输出字符序列。加上额外的位置校验——喷码必须位于包装上的指定区域内。
- 膜偏移检测:不跑模型,用传统图像处理——Canny边缘检测+霍夫变换找直线,算包装膜边缘到基准线的距离。
踩坑教训:一开始我用YOLOv8检测喷码字符区域再去OCR识别,但多了一步检测增加了延迟(约50ms)。后来直接根据包装设计稿的固定ROI区域裁剪喷码位置——前提是包装位置一致(靠机械定位保证)。位置稳定的情况下,固定ROI比动态检测更可靠。
三、实施过程
第一周:打光和成像调试
光学方案是最花时间的环节,没有之一。
背光方案我们试了三种光源:
- 红色背光板(建议方案):透过铝箔膜时对比度高,封口缺陷一目了然。但实际安装后发现,包装膜上的印刷图案也会被透射上来,干扰判断。比如印刷区域刚好在封口位置时,透光图上会多出一块"伪缺陷"。
- 红外背光(第二方案):红外光能穿透铝箔膜的印刷油墨,只反映封口区域的热封状态。效果很好,但红外相机贵且分辨率低。放弃。
- 蓝色背光+偏振片(最终方案):蓝光波长适中,加偏振片过滤表面反光。最终采用的方案。偏振方向调了大概半天才找到角度。
喷码的拍摄更折腾。同轴光打在铝箔膜上会产生严重的镜面反射,喷码字符被亮斑淹没。最后在相机镜头前加了偏振镜,并且把同轴光源的角度调到约15度——既照亮字符区域,又避免镜面反射进入镜头。
第二周:数据采集和标注
从产线上收集了大约5000包样本(包括好品和各类缺陷),打标签花了3个人工日。主要工作量:
- 封口缺陷:标注了6类——正常封口、封口有缺口、封口夹料(食品碎屑夹在封口处)、封口未封严(连续一段没封上)、封口过热(发黄/变形)、封口偏位(封口不在热封带上)。
- 喷码缺陷:4类——正常、模糊、缺失(某几位字符没喷出来)、偏移(喷码位置超出设计区域)。
- 包装膜偏移: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%。
一个让我印象深刻的踩坑:有几天喷码检测突然大量报错——明明喷码看着没问题,系统一直判不合格。排查了半天发现是白平衡漂移。车间那台包装机旁边新增了一台设备,改变了环境光照色温。自适应白平衡解决了这个问题。后来我们在代码里加了定时自动白平衡校准。
第四周:联调上线
联调阶段暴露了几个问题:
- 剔除延时不准:气嘴触发到吹气有个机械延迟,加上包装在传送带上的位置漂移,一开始吹不准。调整了延时参数(从200ms调到约240ms),配合光电传感器检测包装实际到达位置再次校准。
- 误报率偏高:头两天误报率约15%。主要原因是包装膜上偶尔有油污和水渍,被模型误判为缺陷。数据增强(加入油污/水渍的负样本)重新训练后,误报率降到约8%。
- 包装膜跑偏阈值太敏感:设定每包检测膜偏移位置,但包装机启动和停机时膜会自然抖动,偏移量超出阈值。解决方案:只在产线稳定运行后开始检测,启动后前10包跳过。
正式上线后的前三天,我们有人驻场观察。第三天晚上,系统在凌晨2点检出连续5包封口缺陷(封口夹料),触发了阈值告警,直接推送到车间主任手机。他起来一看,是投料工人在换料时把一块塑料膜碎片带进了包装机。如果不及时发现,后面至少2000包都要报废。
四、实际效果
系统运行满2个月后,做了一次全面的效果评估:
系统检出的缺陷中,人工复判确认约90%是真缺陷。漏检部分主要是轻微封口偏移(模型判为了正常),以及个别喷码字符缺失但被OCR识别为模糊放行的。
项目上线前的包装缺陷退货率约1.2-1.8%,上线两个月后降至约0.3-0.5%。超市端反馈明显改善。
头两周偏高(10-15%),第三周开始稳定在6-8%左右。误报主要是包装膜上的非规律污渍被误判为缺陷。老板说能接受,因为误报品会回流重新检查,不会直接报废。
也有些预期之外的效果:
车间主任最满意的一个功能是缺陷趋势图。以前他只能凭感觉说"最近的封口好像不太行",现在能看到每天的缺陷分类统计和趋势曲线。比如他观察到封口缺陷率在每周二下午偏高,排查发现是封口机刀片的热电偶每两周需要校准一次——周二下午刚好是校准周期结束时,刀片温度开始偏离。
质检员的工作也变了。以前她们需要站在产线边盯着每一包包装看,眼累而且效果差。现在她们的工作变成了:确认AI检出的缺陷是否真实、记录新的缺陷类型、管理剔除品的回流和复检。劳动强度降了不少。
五、遇到的问题
这个项目踩了几个印象比较深的坑:
镜头起雾。车间有蒸汽,相机镜头在开机半小时后起雾,图像模糊。一开始以为是镜头质量问题,后来发现是相机和车间温差导致的冷凝。方案:给相机加了一个小型加热环(类似车载摄像头的除雾设计),同时把相机安装在密封防护罩内并充入干燥氮气——设备供应商提供的标准方案。
铝箔膜切光。不同批次的铝箔膜反光特性有差异,同一批次首尾卷也有差异。有一批包装膜表面加了哑光涂层,背光源穿透力不足,封口透光图变暗。解决方案:加了自动增益控制(AGC),根据每帧图像的亮度自动调整曝光时间。
产线速度波动。包装机有时候会降速(比如上游供料不足),相机触发频率跟着变。原来的编码器触发方案在低速下没问题,但高速下有累计误差。改用了编码器+光电传感器双触发:编码器做粗定位,光电传感器做精确定位。
OCR被非喷码字符干扰。包装膜上印刷的生产批号和图案在某些角度下会被误识别为喷码字符。解决方案:在训练OCR时加入了背景负样本(无喷码区域的图片),模型学会了"看不到字符时输出空结果"。
六、个人思考
这个项目做完之后,有几个感受:
高速产线的视觉检测,光学方案比模型更关键。模型可以在上线后持续优化,但光学方案选错了,后面再怎么调也救不回来。打光调试占了整个项目将近一半的时间,不是没有道理的。
"多缺陷合一检测"听起来很帅,但实际拆分更靠谱。一开始我也想搞一个模型解决所有问题,但不同的缺陷需要不同的光照、不同的分辨率、不同的算法。拆开来做反而简单、可靠。
食品包装的缺陷检测比工业零部件质检更难,但原因不是你想的那样。不是因为精度要求高,而是因为"缺陷"的定义在变。食品包装的材质批次差异大、环境温湿度变化大、设备状态也在变——今天看起来正常的封口,换了新批次膜可能就是缺陷。所以模型必须能持续学习和自适应。
剔除装置是系统的薄弱环节。视觉检测做得再好,吹气口没把缺陷包吹下来,一切等于零。机械部分——气嘴位置、气压大小、吹气延时——这些看似简单的环节反而需要反复调试。机械可靠性的重要程度不亚于AI模型。
车间主任的手机告警是最有价值的功能之一。凌晨2点的那次告警在一线工人还没发现异常时就触发了,避免了大量次品流出。这种"发现问题→推送告警→立即处理"的闭环,比单纯出报表有意义得多。
七、给你的建议
如果你也在考虑给包装线加视觉检测:
- 先搞清楚缺陷的真假比例。有些所谓的"缺陷"其实不影响使用(比如包装膜微皱),不要为了追求检出率把合格品也判掉。先收集样本、和客户沟通清楚标准再动手。
- 不要低估打光的难度。预留至少一周时间专门调试光学方案。测试不同光源颜色、角度、偏振方案,在产线实际速度下验证成像效果。
- 选一个合适的剔除方案。气嘴剔除适合轻小包装,但精度有限。如果是重型包装,考虑拨杆或推板。不管哪种方案,都要留出机械调试时间。
- 安排模型持续迭代的机制。新包材、新批次、季节变化都会影响检测准确率。保留数据采集和标注的能力,定期用新数据微调模型。
- 做好车间环境的心理准备。食品车间油腻、潮湿、温度高,电子设备需要工业防护(IP65以上)。镜头起雾、电路板受潮、传感器进水——这些都不是小概率事件。