机器视觉尺寸外观一体检测算法模型:从理论到产线,全是泪

摘要:聊聊我最近做的汽车油封检测项目,为了把尺寸测量和外观缺陷塞进同一个算法模型,踩了不少坑。这篇不扯太多理论,就讲实际选型和工程落地。

上周刚干完一个项目,给汽车油封检测尺寸和外观。油封这东西,外径公差±0.01mm,表面不许有0.3mm以上的划痕。客户要求在一个工位完成,节拍2.5秒。说实话,传统分开干倒是轻松,但搬运定位误差和节拍加一倍,客户不乐意。所以只能把尺寸和外观合在一起。这就是题目说的“一体检测”。

为什么非要把尺寸和外观搅在一起?

为什么非要把尺寸和外观搅在一起?
为什么非要把尺寸和外观搅在一起?

先说说传统玩法。尺寸检测用背光,剪影轮廓,亚像素边缘拟合,精度能到微米级。外观检测用正光或斜光,抓划痕、凹陷、脏污。两套光源、两套相机、两套算法,各走各的路。听起来挺合理,但实际上一旦有毛刺凸起,尺寸系统可能把它当成外径变大,误判。更别说二次定位带来的误差。

一体化检测的好处就是定位基准统一,一次成像,同时出尺寸和缺陷。而且两个结果能互相校正。比如划痕在边缘附近,可能影响尺寸提取,算法就可以做局部重测。这种联动信息,分开的系统根本给不了。所以趋势就是这样,逼着你去做一个统一的模型。

算法模型选型:老牌库还是深度学习?

我一开始就没打算用纯深度学习一把梭。尺寸测量要亚像素精度,你用卷积神经网络回归边缘位置,训到天荒地老也未必稳定。但外观缺陷是典型的小样本多形态问题,传统Blob分析被光照一折腾就废。最后我选了混合模型——尺寸部分用传统边缘算法,外观部分用轻量语义分割网络。

这里涉及到一些关键参数。尺寸测量必须用远心镜头,畸变率要小于0.1%,而且视野和相机分辨率得匹配。比如视野20mm×20mm,用500万像素相机(2448×2048),单个像素物理尺寸就是20/2448≈8.2微米。要保证±0.01mm重复性,至少得1/4像素子像素精度,也就是靠亚像素边缘提取算法,比如灰度矩法。

外观方面,我用了一个UNet轻量变体,输入是正光图,输出缺陷掩码。最大的坑是训练数据不足。客户给的不良样本,连一个像样的分类网络都训练不出来。后来学了招:用仿真缺陷数据合成训练集,再做数据增强,勉强把召回率拉上去。但这个要看产品形态,如果是PCB那种缺陷规则的东西,就比较好办。

机器视觉尺寸外观检测远心镜头背光源安装示意图
机器视觉尺寸外观检测远心镜头背光源安装示意图

落地前最后一公里:标定、光照和速度

落地前最后一公里:标定、光照和速度
落地前最后一公里:标定、光照和速度

模型在电脑里再好,装到机台上就变味。先说标定。尺寸测量必须把像素坐标转到物理坐标,用圆点标定板做畸变校正。注意标定板选陶瓷,热膨胀小。圆点标定板比棋盘格好,因为圆心提取重复性能到0.02像素。但标定板千万别有脏污,有一次我标定时没注意,板上有油污,算出的畸变参数全歪了,整批产品误判,气得我差点把板子扔了。还有,标定不是一劳永逸,镜头松动或温度变化都会飘,最好定期放标准件验证。

再说光照,这是所有问题的根源。尺寸需要均匀背光,轮廓锐利;外观需要斜射光,凸显瑕疵。两个相位相反。用一台相机,我建议双光谱方案:一个白光背光,一个红外侧光,配上分时拍摄。或者干脆分两次拍照,背光一次,侧光一次,反正都在一个工位,算好时间就行。但要是碰到磨砂金属件,光源散射能把边缘搞成锯齿状。后来加了个偏振片,图像立刻干净了,这招有效。

速度这块儿,2.5秒节拍内,你得完成两次成像、标定补偿、尺寸算法、深度学习推理、结果同步。我是用C++和OpenCV,推理引擎用TensorRT,把UNet量化成FP16,在RTX 3060上推理一次约20ms。但真正的瓶颈在预处理和尺寸算法。一个技巧是先做ROI裁剪,把2448×2048的图像裁到500×500,再跑边缘检测,速度能快4倍。还有,图像缩放千万别用双线性插值,它会模糊亚像素边缘,用最近邻反而更好,真是反直觉。

一个粗陋但能跑的工程框架

分享一个我现在在产线上用的框架,不花哨,但稳。流程如下:

1. 相机采集原始图;
2. 标定映射到物理坐标系;
3. 背光图做尺寸测量,得到关键尺寸及超差状态;
4. 侧光图送入轻量分割网络,得到缺陷掩码;
5. 两个结果汇总,如果缺陷区域靠近尺寸边缘,就重新测一次边缘,避免缺陷干扰尺寸;
6. 最终输出一个结构体,包含尺寸和缺陷列表。

机器视觉尺寸与缺陷协同判定算法流程图
机器视觉尺寸与缺陷协同判定算法流程图

实现细节上的坑也不少。尺寸测量我用的基于轮廓的方法,先提取最大连通域,再拟合圆或直线。拟合前必须剔除离群点,否则一个灰尘点就能把直径拉偏几十微米。我用RANSAC,迭代次数别设太大,不然超时。外观分割出的掩码,要用连通域过滤噪点。阈值怎么算?按像素分辨率换算。比如最小缺陷0.3mm,像素尺寸8.2um,那么缺陷直径约36.6像素,面积阈值就是π*(36.6/2)^2≈1050像素,小于这个的直接丢弃。

另外,别忘了经验法则校验。比如尺寸超差但缺陷面积很小,可能是边缘毛刺,不是真实变形;缺陷在非功能面,也许客户能接受。这些规则得和客户一条条确认,做成可配置判定矩阵。这块算法替代不了。

结尾说一句,这套方案已经在我两个项目里稳定跑了半年多。但每次换新产品,还是会冒出新的幺蛾子。视觉检测这行,没有银弹,只有持续调参、打标和优化。希望我这些经历能让你在一体化检测路上少踩几个坑。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:机器视觉尺寸外观一体检测算法模型:从理论到产线,全是泪
文章链接:https://www.yqhljx.com/list_9/1292.html