视觉算法与成像

漏装、错装、反装怎么检

这三个词经常被写在同一条需求里,但难度完全不同:漏装是有无判断,最容易;错装要区分相似件;反装最麻烦,因为正反两面往往只差一个很小的特征。分开谈才谈得清。

三类问题分别是什么,出现在哪些工况

装配防错的需求几乎都写成「检测漏装、错装、反装」,但这是三件不同的事。 漏装是有无判断,判据二元,最容易做。 错装是装了相似但不同的零件,判据要靠两者在图像上的可测差异。 反装是零件与型号都对但正反颠倒或旋转 180 度, 判据往往是一个占比很小的局部特征。

典型工况:PCBA 插件后检查、连接器与端子装配、汽车卡扣与密封圈装配、 家电总装、包装前的配件齐套检查。 敏洽 机器视觉检测软件 单机支持 4 工位并发,一台工控机可覆盖多个检测位。

实际会遇到的几个坑

1. 需求只写「防错」,没写靠什么判

这是投标阶段最该澄清的一条。「检测反装」四个字背后必须有物理判据—— 正反面到底哪里不一样:有的靠一个 0.3 毫米的倒角, 有的靠丝印,有的靠一个背面才有的浇口痕。 这个判据由客户的工艺人员确认,不是视觉工程师猜的。 规范做法是在方案文件里逐项列表:判据描述、图像上的表现、所需成像条件。

2. 固定 ROI 遇上工件位置浮动

工件由夹具或载具定位,实际总有零点几到几毫米的浮动, 用绝对坐标写死的 ROI 会框错位置——框到旁边结构就误判成有,框到空处就误判成无。 正确做法是先跑定位算子再取 ROI: 模板匹配、特征点、几何基准、Mark 点定位四类算子统一输出 Offset_X / Offset_Y / Angle_θ, 检测区按这组偏移做仿射跟随。PCB 与载具类工件用 Mark 点最稳。

3. 有无检测的背景选错

漏装检测的成败取决于「有」和「无」两个状态的图像差异。 零件是黑色塑料件、载具也是黑色,两种状态灰度几乎一样,再好的算法也分不开。 可用的手段:换对比色载具或背景板、 用背光把零件变成剪影、用侧向打光让零件产生投影。 优先改硬件条件,比算法调参便宜得多。

4. 相似件的差异在图上找不到

错装检测的前提是两种零件在同一成像条件下有可测差异。 常见困境是两种螺钉只差 1 毫米长度,但从上方拍只看到螺钉头, 长度信息完全不在图里。这时候不是调算法,而是改检测位置或增加视角。 如果差异只在装配后不可见的部位,就要在方案里明确该项不可检, 改用其他防错手段(料道分离、扫码校验、机械限位)。

5. 反装的局部特征太小,定位精度不够

反装判据常是一个很小的特征:凹坑、缺口、色环。 这带来两个要求:定位精度必须优于特征尺寸, 否则检测区套不到特征上;视野与分辨率要够。 如果整机视野下特征只占几个像素,可以加一个局部高倍视角单独看它。 倒角、凹坑这类无色差的几何特征往往需要掠射或暗场打光才显形。

6. 阈值写在算法里,现场改不动

防错项目上线后必然要调阈值——来料批次变化、光源衰减、换型号。 如果判定逻辑和阈值编在算法代码里,每次调整都要重新编译发版,现场等不起。 敏洽的架构把这件事分开:C++ 算法侧只输出原始数据 (面积、灰度差、匹配分数、尺寸值、位置偏移), OK/NG 判定与阈值在 C# 侧按型号配方管理,现场可改、有权限控制、有变更记录。 算法层也可按模块单独授权,或通过 跨语言 SDK 嵌进客户已有的上位机。

方案与硬件条件

类型常用算法成像与前置条件
漏装斑点 / 连通域分析、灰度差异、差影异物检测、形状检测对比色背景或背光;先定位再取 ROI
少件 / 多件斑点计数、差影异物检测、周期特征分析差影需标准图
错装(尺寸差)尺寸测量:最小外接圆直径、旋转矩形长短边、轮廓面积与周长差异须在视角内可见
错装(外形差)形状检测、轮廓拟合、圆 / 椭圆检测背光或高对比打光
错装(颜色差)颜色一致性、颜色区域定位彩色相机 + 稳定色温光源
错装(字符差)OCR(PaddleOCR)、条码 / 二维码识别字符区打光均匀
反装(局部特征)模板匹配、形状检测、边缘缺陷检测、对比度检测掠射或暗场让倒角凹坑显形
形态不固定YOLO 目标检测、YOLO 实例分割、图像分类本地训练导出 .aim
项目要求与说明
相机USB/UVC、大华、海康、度申已适配;Mock 虚拟相机可用图片集回放调试
触发硬件 IO(到位信号)、编码器、通讯软触发、连续采集,四种任选
工位数单机 4 工位并发
定位模板匹配 / 特征点 / 几何基准 / Mark 点,统一输出 Offset_X Offset_Y Angle_θ
判定层C++ 侧输出原始数据,OK/NG 阈值在 C# 侧按型号配方配置
运行环境Qt 6.9.2 + C++17 + OpenCV 4.x + ONNX Runtime;Windows 10/11 x64 与 Ubuntu 22.04 x64
客户准备判据确认表、各型号样品(含 NG 样品)、支架与遮光、到位信号与结果反馈接口

NG 样品的重要性经常被低估:漏装样品容易造, 但反装与错装的真实 NG 样品需要客户配合专门做,且要覆盖边界情况。

相关交付情况

交付顺序:先出判据确认表 (逐项写清检测什么、靠什么判、图上怎么体现), 再用样品试拍验证每一项的成像可行性,然后才是软件实现、配方组织与接口对接。

交付内容包括成像方案、硬件选型建议清单、检测软件与参数配方管理、结果与图片留存、 接口文档(触发方式、IO 定义、通讯点表、结果输出格式)。 算法按模块授权;需要嵌进客户已有上位机时提供跨语言 SDK (mqvision.dll / libmqvision.so,支持 C、C++、C#、Java JNI、Python,另有 Qt-free 版本)。 用到 AI 的项目,训练在客户本地进行,图片不出厂,模型导出为加密 .aim 包。

更多算法说明见 内置算法库, 交付案例见 案例中心。

常见问题

多数不是算法弱,而是三件事没做好:一是零件位置有浮动,固定 ROI 框错位置,框到了旁边的结构;二是背景与零件颜色接近,有无状态的灰度差不明显;三是零件本身反光或者被上层结构遮挡,某些角度下看不见。对策依次是:先用定位算子对齐再取 ROI;换背景色或换成侧向、背光打光把有无变成明显的明暗对比;调整相机角度或改在装配前后各拍一次做差影对比。
关键是先人工找出两种零件在图像上的可测差异,而不是直接上算法。常见判据有:外径或长宽尺寸差、孔位数量与位置、颜色或表面处理差别、丝印与激光刻字内容、轮廓形状相似度。找到判据后选对应算法——尺寸差用测量类(最小外接圆直径、旋转矩形长短边、轮廓面积),孔位用圆检测与斑点分析,颜色差用颜色一致性,字符用 OCR。如果两件的差异连人在图上都指不出来,那就要考虑改成像或者换检测位置,而不是硬调参数。
因为正反面的差异往往是一个小倒角、一个凹坑、一处倒扣或者极性标记,占整个视野的比例很小,而其余部分完全一样。这意味着:定位必须精确(否则那一小块特征区都取不到),成像必须让该特征形成稳定对比(倒角与凹坑常需要掠射或暗场打光才显形),并且检测区必须跟着定位结果做仿射跟随。电子件的极性一般看电容负极标记、二极管色环、连接器缺口,这些是明确的判据;机加件则要在设计阶段就跟客户确认「正反到底靠什么区分」,问不清楚这个项目就没法做。
把每个型号的一整套参数做成配方:ROI 位置、检测项启停、算法参数、光源亮度与曝光、判定阈值。换型时由上层按型号号调用对应配方,不允许现场手改单个参数。敏洽软件是 C++/C# 双进程架构,C++ 侧只输出原始算法数据不做 OK/NG 判定,判定阈值在 C# 侧随配方管理,因此改阈值不动算法层。相关做法见多型号换型的配方化专题。

有具体设备清单或工件样品,可以直接给判断

提供设备型号、PLC 品牌与需要采集的数据项,或提供被检工件照片与精度要求,敏洽可先给出可行性判断与硬件前置条件,再谈软件工作量与报价。