去年秋天,福建一家饮料代工厂的老板找到我们。他们主要给几个区域品牌代工PET瓶装水,有一条高速灌装线,额定速度每分钟600瓶。问题提得很直接:人工灯检漏检导致客户投诉越来越多了。
投诉的内容集中——瓶盖没旋紧(运输渗漏)、液位不满(消费者觉得"缺斤短两")、标签歪斜(影响品牌形象)、喷码模糊(批次追溯困难)。最严重的一次,有客户收到一瓶盖子完全没旋上的水,直接在电商平台上给了差评,还拍了视频发到抖音上。
老板说,他们已经配了6个灯检工,每班3人轮岗,站在灌装线两边盯着看。但每分钟600瓶的速度,相当于每秒钟10个瓶子从眼前过,一瓶一瓶看根本不现实。灯检工的实际做法是"抽检"——几分钟看一段,没发现问题就继续放行。漏检率有多高?没人知道确切数字,但品控经理估算至少有15-20%的次品会漏过去。
这篇文章记录了我们怎么用AI视觉来做高速灌装线的在线全检,以及这个过程中遇到的种种问题。
一、现场情况摸底
第一次去车间是在一个周三下午,灌装线正在生产550ml纯净水。在车间里待了两个多小时,一边看一边记:
- 线速:灌装线额定600瓶/分钟,实际跑530-560瓶/分钟(考虑了设备老化和偶尔的卡瓶停机)。瓶子间距比较小,瓶与瓶之间大约间隔3-4cm。
- 瓶型:主要是圆柱形PET瓶,高度约22cm,瓶身直径约6cm。有几种不同的瓶型(不同客户不同规格),同一批次内各瓶之间的高度和直径一致。
- 检测点位:灌装后需要检查的位置有4个——瓶盖(是否旋紧、有无损坏)、液位(是否在标线附近)、标签(有无贴歪、起泡、缺失)、瓶底喷码(日期批号是否清晰、位置是否正确)。
- 现有质量管控:人工灯检(6人排班)、每半小时取1瓶做扭力测试、每2小时取一瓶量液位高度。全是抽检,没有全检。
- 环境条件:灌装车间温度约25°C、湿度较高(约75%RH)、瓶身从灌装段出来时表面带有冷凝水。
- 次品分类:瓶盖问题(未旋紧、歪盖、缺盖)约占投诉的40%,液位问题(不满或过满)约占30%,标签问题(贴歪、起泡、破损)约占20%,喷码问题(模糊、缺码、位置偏)约占10%。
和品控经理聊了聊,他说了一句话让我印象很深:"做饮料这么多年,我知道灯检就是个心理安慰——瓶子跑那么快,人眼根本看不过来。" 这句话基本就定调了:必须做在线全检,而且必须是机器视觉。
二、方案设计
方案的核心思路:在灌装线和旋盖机之后、贴标机之后、喷码机之后分别布置视觉检测工位,用一台边缘AI网关统一处理3个工位的图像,检出不合格品后通过气动剔除装置在输送带末端剔除。
第一工位:瓶盖+液位检测(灌装后、贴标前)
这个工位最考验速度。瓶子刚从旋盖机出来,每分钟要处理近600个。分3个检测任务并行运行:
- 瓶盖密封检测:顶部相机拍瓶盖顶部,检测盖子是否旋到底(盖子顶部边缘与瓶口参考线之间的间隙)、盖子有无破损变形、防伪环是否断裂(用力矩旋盖的盖子拧紧后防伪环会断一圈)。
- 液位检测:侧方相机拍瓶身液位线。PET瓶是透明的,但灌装后瓶身有冷凝水膜,透光性下降。
- 缺盖检测:同顶部相机,如果完全没盖子一眼就能看出。
光学方案:顶部用环形LED光源(白光,提供均匀的顶光照明),相机用200万像素全局快门工业相机,镜头焦距8mm,视场覆盖一个瓶盖完整区域。侧方用背光+前光组合——瓶子背面放一块均匀背光板,前面用条形光源补光,让液位线形成清晰的黑白分界线。
第二工位:标签检测(贴标后)
瓶子经过贴标机后进入第二工位。这里检测:标签是否贴到位(上沿和下沿是否在规定的区域内)、标签有无明显歪斜(歪斜角超过设定阈值判定不合格)、标签有无气泡/褶皱/破损。检测需要覆盖瓶身180°的范围(瓶子另一面看不见),所以用了一个90°棱镜+双侧相机方案——两台相机从两侧同时拍摄,覆盖整个瓶身圆周。
第三工位:喷码检测(喷码后)
瓶底喷码,喷的是生产日期和批次号。检测任务:喷码是否清晰可读(对比度是否符合OCR识别要求)、喷码位置是否在指定区域内(偏移超过3mm判定不合格)、是否有缺码(喷码机故障导致漏喷)。
这个环节用了OCR模型——先定位喷码区域,然后用轻量级OCR模型读取字符,再逐个比较字符的完整性。难点在于瓶底是曲面,喷码在曲面上的变形会导致OCR识别困难。
剔除机制
任何工位检出不合格品,边缘AI网关立即发送剔除信号给PLC,PLC在输送带末端的气动剔除站执行剔除操作。考虑到从检测到剔除之间瓶子已经前进了约2-3米(大约0.25-0.3秒),需要在PLC里做一个移位寄存器——用编码器跟踪瓶子位置,把检测结果写入移位寄存器的对应位,等到该瓶子到达剔除位时才触发气动推杆。
教训:最开始我们以为检测到不合格就能立刻剔除,完全忘了输送带是连续运转的。瓶子检测完了已经往前走了一两米,气动推杆推的是后面的瓶子。这是做硬件集成的新手最容易犯的错误——"检测"和"执行"之间隔着物理距离。编码器位置跟踪是必修课。
边缘网关
3个检测工位共5台工业相机(1台顶部 + 1台侧方 + 2台标签 + 1台瓶底),全部通过GigE接口连接到一台边缘AI网关。网关规格:
- 算力:约8 TOPS(使用NPU加速推理)
- 相机:5台全局快门200万像素相机,GigE接口,触发模式
- 触发:编码器信号接入边缘网关,每走一个瓶子间距触发一次
- 剔除接口:Modbus TCP写入PLC寄存器,指示哪一帧图像判定为不合格
- 本地存储:保留最近30天的检测记录(图像+检测结果),供事后追溯
三、实施过程
第一周:光学方案验证和打光调试
光学方案是整个项目的基石。我们先在离线环境下搭建了一个模拟工位,用相同的瓶子和相机验证各检测项的光学条件。
瓶盖+液位工位是最先调试的。顶部环形光拍瓶盖没有问题,但液位检测出了状况。问题的核心是:PET瓶是透明的、水也是透明的——水、瓶壁、空气三者之间的折射率非常接近,普通正面光照明下液位线完全看不到。
试了4种光学方案:
- 正面背光:在瓶子背面放LED背光板——能看到液位线,但冷凝水在瓶身上形成的水滴干扰严重,水滴的边缘被误判为液位线。
- 侧面漫射光+偏光滤镜:减少冷凝水反光——有一定效果,但相机帧率下降(加了偏光滤镜进光量减少了约一半),需要更强的补光。
- 红外光照明:利用水在近红外波段吸收率高的特性——有效!在850nm红外光下,水呈现深色,瓶壁和空气相对较亮,液位线对比度很高。最终方案选了红外背光+红外滤镜。
- 结构光方案:用线激光在瓶身表面打一条线——理论上最精确,但安装空间不够,放弃了。
标签工位:标签的问题是瓶子是圆柱形的,标签贴在弧面上,从正面拍中间清楚、两边模糊、或者反过来。我们用两台相机从不同角度拍,然后用图像拼接算法合成一个完整的展开图。照明方面用了两个条形光源从左右两侧45°打光,平衡曲面上的光照不均。
瓶底喷码工位:瓶底透光,喷码是黑墨打在透明PET上,对比度不错。但曲面变形是OCR的主要敌人——同一行喷码字符在瓶底边缘比在中心小得多。解决方案是在训练OCR模型时,把不同曲率位置的喷码图片都加入训练集,让模型适应这种变形。
第二周:相机安装和产线集成
离线调试好了,接下来是上产线。安装花了不少功夫:
- 支架设计:每个工位需要一套可调节的支架来固定相机和光源。考虑到了产线的振动——灌装车间有泵、有压盖机、有输送带电机,支架必须有减振设计。我们用了铝合金型材支架+橡胶减振垫,稳住了。
- 防冷凝水:相机和镜头在一个潮湿环境里工作,镜头起雾是大概率事件。方案是在防护罩内加了一个小的加热片(类似工业摄像头的加热窗口),让镜头表面温度略高于环境温度,防止水汽凝结。
- 触发同步:5台相机需要精确同步触发——每检测到一个瓶子,5台相机同时拍照。编码器信号接到边缘网关的GPIO输入,网关作为触发源通过光耦隔离模块同时触发所有相机。
踩坑:第一天上产线测试时发现液位检测工位的图像全是糊的——不是对焦问题,是快门速度跟不上线速。瓶子在600瓶/分钟的线速下移动速度是约1.2米/秒。我们用的全局快门相机需要快门速度至少1/2000s才能拍清楚运动中的瓶子。但红外光的效果需要更长的曝光时间来补偿进光量。折中方案是把红外光强度提高(换了大功率红外灯),快门设为1/2500s,图像清楚了。
第三周:模型训练和阈值标定
模型训练分4个独立模型:
- 瓶盖检测模型:基于YOLOv8n,检测帽子顶部轮廓的完整性和位置偏移。训练用了约3000张标注图片(正常瓶盖2000张、歪盖/破损/缺盖各300多张)。最关键的是标注了"瓶盖边缘到瓶口参考线的距离"——这比单纯分类"好/坏"提供了更精确的判断依据。
- 液位检测模型:用语义分割(轻量级UNet)分割出瓶身区域和水体区域,计算水体区域的高度比例。训练数据1500张(正常液位1000张、不满300张、过满200张)。数据里有不同水位线的图片——550ml和350ml两种瓶型液位线不同。
- 标签检测模型:YOLOv8n检测标签的上沿和下沿,判断位置和歪斜角。训练数据2000张,覆盖了标签贴正、上偏、下偏、歪斜、起泡等缺陷。
- 喷码OCR模型:用轻量级CRNN模型(类似PaddleOCR的tiny版本),专门针对瓶底喷码做了微调。训练数据3000张,包含正常喷码、模糊、残缺、偏移等。
4个模型部署到边缘网关后,做一个帧级别的推理调度——每收到一次触发信号,5张图片并行推理,4个模型同时跑,总推理时间控制在100ms以内(从图像采集到输出检测结论)。
关于推理速度有个教训:最开始我们是在CPU上跑的,4个模型串行推理,一张图片的平均耗时约120ms,5张图像加起来超过600ms——完全跟不上线速。换到NPU推理后,4个模型并行推理,Total time降到约85ms,才算够用。如果算力不够,宁可减分辨率、减模型精度,也得保证推理速度。
第四周:试运行和调优
试运行阶段每天生产约10小时,我们全程在场记录。
第一天的崩溃:系统上线第一天,剔除率高达12%——即12%的瓶子被判不合格被推下线。品控经理一看就急了,说我们正常次品率只有3-4%,你们的系统是不是有问题?
排查下来有几个原因:
- 瓶盖检测模型过度敏感——有些瓶盖在运输过程中被碰了一下,顶部有一点轻微擦痕就被判不合格。而实际这些瓶盖密封是完好的。调整:放宽瓶盖外观缺陷的阈值,只对明显变形/破损/歪斜/缺盖做剔除。
- 液位检测在换批(从550ml切换到350ml)时出现大批误报。原因是模型的液位参考线是基于瓶型预设的,切换瓶型时没有自动更新参数。修复:加入瓶型识别(用顶部相机判断瓶口直径来识别瓶型),自动切换液位阈值。
- 标签工位在换不同客户的瓶子时,不同品牌的标签材质不一样(有的标签是PP收缩膜、有的是PE不干胶),对光的反射特性不同。一开始我们用通用阈值,结果部分标签类型的检测准确率差。解决:给每个客户/瓶型预置独立的标定参数。
调了三天之后,剔除率降到约5.5%,其中经人工复判确认真正不合格品约占总产量的4.2%——和品控经理之前估算的3-4%基本吻合。约1.3%的剔除是误报(正常瓶被推下了线)。误报比例在预期范围内,后续还可以通过模型迭代进一步降低。
真实检出:试运行第二周,系统检出一批瓶盖有系统性问题——某次原料切换后,瓶盖供应商同一批次的盖子偏大,导致旋盖机设定的力矩无法拧紧。人工灯检完全没发现,AI视觉检出了连续12瓶盖子未旋到位。品控紧急换了盖子和调整力矩,避免了3000箱产品的质量事故。这个事件之后,操作工对系统的态度明显转变了——从"这个机器老是乱报警"变成了"今天AI抓了几个坏的?"
四、实际效果
系统跑了约3个月后,我们和数据团队一起做了效果评估。
人工灯检阶段漏检率约15-20%,AI全检上线后,漏检率降到约2-3%(即合格品被误判为不合格的误报率约1.5%,不合格品漏过的漏检率约0.5%)。客户投诉量下降了约八成。
原来每班3人做灯检(两班倒共6人),AI全检系统上线后,灯检工位改为"AI初检+人工复判"——AI剔除的不合格品由1名质检员复判确认,另一人处理设备报警和日常维护。6人减到2人,人工成本有明显节约。剩下的灯检工转岗到其他工序,没有裁员。
人工灯检时,灯检工有时候跟不上速度会暂缓输送带,导致灌装机间歇停机(灌装机不能装满了再等)。AI检测没有这个瓶颈,输送带可以全速运行。产线利用率从85%提升到约93%。
也有一些没想到的问题。
问题1:红外光源衰减。3个月后液位检测工位的红外光源明显变暗了。排查发现是大功率LED红外灯在高湿环境下散热不良,LED光衰加速。换了防水等级更高的IP66红外灯,并在灯罩内加了散热风扇。
问题2:标签检测的"新标签综合征"。每次客户换新包装(新标签设计、新材质),模型需要约1-2天的新数据来微调。品控现在养成了习惯——新包装上线前提前一周通知我们做模型适配。
问题3:瓶底喷码的脏码。喷码机偶尔会喷出模糊的码——不是喷码机坏了,而是瓶底在灌装过程中沾了水,墨水打在湿的表面就晕开了。生产线在喷码工位前加了一个吹气干燥装置后,问题基本解决。
五、我的思考
这个项目做下来,几个体会比较深:
高速产线的AI视觉,瓶颈往往不在AI而在光学。模型精度做到98-99%不难,难的是让相机在600瓶/分钟、高湿、振动、冷凝水的环境下稳定拍出清晰的图片。红外光的发现是这个项目最大的转折点——如果没有液位检测的光学突破,模型再强也没用。
"检测-剔除"之间的物理距离是新手最容易被忽视的坑。一开始我们花了大量时间搞模型精度,但真正上线时出问题的反而是剔除逻辑和编码器跟踪。模型精度从95%提到98%可能花了两周,但编码器跟踪的逻辑bug修复花了三天。做工业项目的精力分配,应该和做纯软件项目完全不一样。
全检和抽检的心理影响完全不同。抽检时操作工知道"大概没问题就行",心态上是放松的。全检系统上线后,每个人都看到精确的检测数据——今天多少个瓶盖不合格、液位超了多少次、哪个环节问题比较多。数据透明之后,灌装段的操作工会主动去调整旋盖机的力矩参数,贴标机的操作工会注意标签卷的张力。品控经理说了一句话:"以前靠抽检的时候,大家觉得'差不多就行了'。现在每瓶都检、每个数据都记录,大家就较真了。"
消费品行业的质量投诉成本比工厂行业高得多。一瓶盖子没旋紧的水,被消费者拍个视频发到社交媒体上,品牌方的损失可能比那一箱水的成本高几百倍。这就是为什么即使AI视觉方案初期投入不低,饮料厂的ROI也比大多数制造行业更容易算清楚。
六、给你的建议
如果你的产线也在考虑上AI视觉全检,几个经验供参考:
- 先搞定光学,再谈AI——花足够的时间在现场做打光测试。好的打光方案可以降低模型复杂度,坏的打光方案即使模型再强也救不回来。
- 高速线必须用全局快门——卷帘快门下运动的瓶子会产生果冻效应,检测精度会大打折扣。
- 编码器位置跟踪是必修课——"检测"和"剔除"之间隔着物理距离,不要以为检测到结果就能立刻执行。
- 留足误报空间——上线第一周误报率可能会偏高,给现场团队打好预防针。同时设计好"人工复判"的流程,让AI剔除的瓶子有人确认而不是直接丢掉。
- 瓶型和产品变更要做好配置管理——不同的瓶型、不同的标签材质、不同的液位线需要不同的检测参数。提前设计好切换逻辑,不要等上线了才现场改。
- 高湿环境要注意传感器的长周期可靠性——红外光源衰减、镜头冷凝水、传感器接口氧化,这些问题是高湿食品/饮料车间的常态。防护等级和定期维护计划要提前规划。