今年年初,广东东莞一家休闲食品厂找到我们。他们生产坚果和膨化类零食,日产能大概10万包,两条包装线靠4个工人灯检挑异物。
问题说穿了就一句话:人眼看久了会花。工人盯传送带盯了一个小时后,头发丝、塑料片、小石子这些东西就很容易漏过去。最严重的一次,有客户在袋子里吃出了塑料片,直接投诉到食药监,工厂被罚了款还停了半天产线整顿。
老板年初就下了死命令:今年必须上视觉检测方案。
这篇文章不是什么成功学案例,就是记录我们实际做了些什么、踩了哪些坑、最后效果怎么样。
一、现场情况摸底
去车间看了两次,记录了几个关键问题:
- 产线情况:两条卧式包装线,运行速度约60包/分钟,包装袋在传送带上间距大概10厘米
- 异物类型:主要是头发丝、包装碎屑、产品焦糊粒、偶尔有小石子——尺寸从0.5mm到5mm不等
- 现有质检方式:4个工人分两班,站在传送带两侧用LED灯板打光目视检查
- 车间环境:有一定油雾和粉尘,温度偏高(约35度),振动比较大(隔壁就是粉碎机)
- IT条件:车间没有网络布线,但有4G信号
这几个条件决定了方案设计的方向:检测精度要高、但要能扛住车间恶劣环境、最好不需要连云端——万一断网了检测不能停。
二、方案设计
最终方案分三层:采集成像层、边缘AI推理层、异常处置层。
成像系统:相机+光源方案
比对了几种方案后,选定了线阵工业相机加高亮LED条形光源的组合:
- 相机:200万像素黑白工业相机,配12mm定焦镜头,帧率设到90fps
- 光源:高亮白色LED条形灯,两侧45度交叉打光——这个角度对透明塑料片和头发丝的反差比较大,有经验的光学厂家跟我们说"交叉打光,异物阴影会拉长变明显",试过之后确实效果明显
- 安装方式:在传送带上方架设一个封闭式检测暗箱,内部贴哑光黑布消除环境光干扰
- 触发方式:用光电传感器检测包装袋位置,触发相机拍照,保证每包都能拍到
这里有个细节花了点时间:包装袋是半透明的铝箔材质,背光打过去袋子内容物的纹理和异物混在一起,AI根本分不清。后来改成正面打光+暗色背景,异物和内容物之间的对比度才拉出来。
边缘AI推理:本地实时检测
在产线旁边装了一台边缘AI网关,不依赖云端:
- 接收相机图像,每包拍2-3张(多角度),每天大约17万张
- 跑轻量化YOLOv8n模型做异物检测,单张推理耗时控制在30ms以内
- 本地保存7天的检测记录和异常图片
- 检测到异物后,通过IO信号发送剔除指令给下游气吹装置
- 4G模块把每天的检测摘要(总检数、异常数、误报数)上传云端看板
之所以选边缘网关而不是上云,主要是三个原因:产线不能停,万一断网检测还得继续;每天17万张图片全传云端流量太大;检测延迟必须控制在200ms以内,云方案的网络抖动不靠谱。
异常处置:自动剔除+人工复核
检测到异物包之后,系统做两件事:
- 通过IO信号触发气吹装置,把有问题的包吹到旁边的剔除通道
- 在边缘网关的本地屏幕上显示剔除包的图片,人工复核确认
人工复核的原因很简单:初期AI误报率肯定不低,直接废掉所有报警包浪费太大。人工看一眼确认一下,是假阳性就放回传送带,是真阳性就记录归档。
三、实施过程
第一周:成像系统搭建和打光调优
硬件安装本身两天就搞定了——架暗箱、装相机、拉电源线,不算复杂。但打光调试花了整整三天。
第一天照着光学厂家的推荐方案布光,拍了500张测试图,发现两个问题:
- 铝箔包装袋的反光太强,某些角度下整张图亮成一片白,什么异物都看不到
- 坚果内容物本身形状不规则,在图像里碎屑和异物的边缘特征非常接近
调整方案:把条形灯从45度改成60度(更倾斜),加装偏振片减少反光。同时把相机曝光时间从2ms降到0.8ms,抑制过曝。前后换了4种打光角度组合才找到相对合适的配置。
踩坑教训:打光比选相机重要得多。我们之前花了很多时间挑相机参数,后来发现光源角度和安装位置才是决定检测精度的关键因素。如果重来一次,我会先花三天做光学测试,再定方案。
第二周:数据集构建和模型训练
自己拍了大约1万张产线真实图片做基础数据集。然后做了几件事:
- 标注:找了两个人标注了3天,标出异物区域(头发丝、塑料片、焦糊粒、石子四类),共计约8000个标注框
- 增强:做了旋转、翻转、亮度变化、高斯噪声——主要是模拟不同打光条件和传送带振动带来的图像差异
- 训练:用YOLOv8n在边缘网关本地跑了大概6个小时,初始mAP 0.72,离目标0.85还差点
- 迭代:加了更多难样本(比如半透明的塑料片、碎渣),重新训练后mAP到了0.81
这里遇到一个实际困难:很多异物太小了(头发丝不到1mm粗),在图像里只有十几个像素宽。YOLOv8n对这种极小目标检测效果一般。后来我们做了一件事:在模型前加了一个超分辨率模块(用FSRCNN做了2倍放大),把小目标的像素撑大后再送检测模型。代价是推理时间从30ms涨到了45ms,还在可接受范围内。
第三周:联调和上线试运行
模型+系统联调阶段遇到的问题比较多:
- 剔除延迟问题:从相机拍照到气吹动作,总延迟约350ms。但传送带速度是60包/分钟,一包过去只要1秒。算下来每包有650ms的滑窗时间。实际测试中350ms延迟够用,但余量不大。后来调高相机帧率缩短了采集等待时间,降到280ms。
- 振动干扰:传送带振动导致相机图像偶尔模糊。解决方案是加了减振支架,并在图像采集时做实时锐度检测——模糊图直接丢弃重拍。
- 误报爆炸:上线第一天,剔除通道不停地响,一个上午剔了800多包。人工复核后发现90%是假阳性——把包装袋封口处的压痕、内容物碎屑误判成了异物。当天下午调整了置信度阈值从0.5提到0.75,误报降到了30%左右,但检出了几包真有异物的。
踩坑教训:不要一上来就追求高检出率。先把阈值调高跑几天,让工人适应系统,再逐步降低到可接受的误报率。工厂现场最怕的是"狼来了"效应——误报多了工人就不信系统了。
第一个月:调优和参数微调
上线第一个月大方向是对了三件事:
- 误报持续降低:通过收集误报样本重新训练,到第三周误报率降到了约15%,第四周降到约8%。最终的稳定水平在5%左右——即100个报警里约5个是假阳性。这个水平工人能接受,每天人工复核量约200-300包。
- 漏检案例分析:前两周漏了3个真阳性——都是极小片状异物(约1mm大小)。翻看日志发现是相机角度问题,异物被包装袋边缘遮挡了。调整相机俯仰角后漏检情况好转。
- 环境适应性:车间白班和夜班的温湿度不一样,光照条件也有变化(窗户自然光)。我们的模型在光照变化下产生了额外的误报。解决方式是在数据增强里加了更多的亮度变化模拟,回炉训练一次后稳定了。
四、实际效果
系统上线稳定运行2个月后,统计了几个关键数据:
包括头发丝14次、塑料片8次、焦糊粒6次、小石子4次。这些如果漏过去就是客户投诉或食药监处罚。
每天约200-300个报警包需要人工复核,占日产能的0.2%-0.3%,在可接受范围内。
2个月内记录了4次漏检——都是非常小的片状异物。比之前人工灯检的漏检率有明显改善。
另外有几个非预期的效果:
- 工人劳动强度降低了很多——以前需要全程精神高度集中盯传送带,现在主要精力放在复核剔除包上,工作节奏合理了很多
- 产线调整时的反馈更快了——比如换产换包装袋材质后,如果新材质导致大量误报,系统能立刻反映出来,不用等人发现
- 数据积累的价值开始显现——2个月积累了约1000万张图像数据,为后续做更精准的检测模型打下了基础
五、遇到的问题和解决办法
除了前面提到的,还有几个值得单独说的问题:
问题一:包装袋规格变化带来的模型退化
工厂有十几种产品规格,包装袋大小、颜色、材质都不一样。模型在一种规格上训练得好,换到另一种就容易误报。试过统一训练集混着训,效果也有起伏。
解决方式:每个产品规格做一个独立的模型文件,换产时手动切换模型。虽然笨,但在当前的条件下反而是方法。后续考虑做一个自动模型选择模块——根据当前产品条码自动加载对应模型。
问题二:春季回南天导致的镜头起雾
广东3-4月回南天,车间湿度很高,相机镜头镜片起雾,图像模糊了整整两天才发现。后来给检测暗箱加了密封圈和除湿包,并在软件里加了图像质量检测——发现清晰度下降超过阈值就推送告警给维护人员。
问题三:气吹剔除装置偶尔漏吹
检查发现是电磁阀响应时间不稳定。换了一款响应速度更快的电磁阀后解决。这个跟AI系统无关,但提醒了我们:检测准了但剔除环节掉链子也是白搭。
六、个人的思考
这个项目做完以后,我自己的几个感受:
AI视觉落地工厂,光学方案比模型选型重要得多。我们团队做软件出身,刚开始一门心思扑在模型精度上。后来发现同样一个模型,换个打光角度精度能从0.7跳到0.85。光源、角度、偏振、暗箱——这些硬件层面的东西才是工厂场景下的决定性因素。
模型精度不是唯一指标,稳定性才是。在实验室里跑mAP 0.9很容易,但放到产线上连续跑一周不出问题很难。振动、温湿度变化、包装袋批次差异——这些"脏"因素才是工厂场景的常态。让模型在这些条件下保持稳定的误报率和漏检率,比单纯刷精度要难得多。
人工复核环节短期内不会消失。AI在工业质检里目前还做不到100%可靠。设计流程时把人工复核当作系统的一部分而不是系统的补充——这样的架构才务实。与其追求"无人化",不如先做到"减人增效"。
数据是越早积累越好。2个月积累了千万级图像数据,这些数据本身的价值可能比当前的检测模型还大。有了这些数据,后续可以做更复杂的模型、针对特定异物做专项优化。工厂如果还在犹豫"什么时候上AI",答案就是现在开始攒数据。
七、给你的建议
如果你也在考虑类似的AI视觉检测项目,几点实在的建议:
- 先做光学测试,再定方案。花一周时间打光试拍,看看不同光源角度下的成像效果。这一步做完基本就知道项目能不能成。
- 从一条产线试点,别一上来就铺开。选一条问题产线先跑通,积累经验和数据后再横向复制。
- 留出至少3周的调优期。不要指望上线第一天就好用。误报率从50%降到5%需要至少两三周的持续调优。
- 让产线工人参与方案设计。他们最清楚"什么东西经常出现"、"什么时间容易出问题"。这些一线知识对模型训练和阈值设定很有帮助。
- 做好设备环境防护。工业相机在工厂环境里的寿命比想象中短——灰尘、高温、振动都会加速老化。选IP65以上的防护等级,定期做镜头清洁维护。