重构——工业视觉质检系统搭建与应用
第一章 视觉的力量
第二章 课程知识篇
第三章 实操训练
3.1 产品部件外观缺陷检测
3.2 产品部件几何尺寸测量
3.3 产品部件字符与条码识别
3.4 产品部件装配检测
3.5 产品部件功能测试辅助
第四章 项目实战
4.1 3C产品工业视觉应用
4.2 汽车部件工业视觉应用
4.3 物流场景工业视觉应用
由锐软科技提供技术支持
-
+
首页
3.4 产品部件装配检测
##### [学习视频](https://b23.tv/CElgC1h) ##### 学习目标: - 理解机器视觉在装配完整性检测中的作用,掌握比较实际图像与标准模板以发现装配缺陷的方法。 - 熟悉搭建装配检测系统的硬件要点,包括多视角成像、均匀照明和基准治具的使用。 - 掌握通过图像差分、模板匹配等算法检测漏装、错装部件的编程思路,并能够设定合理的判定阈值。 ##### 任务成果: - 能够构建用于部件装配检测的视觉硬件平台,并采集到反映产品装配状态的清晰图像。 - 编写程序对比产品图像与正确装配模板图,自动识别出缺件、位置偏移等装配问题并生成缺陷报告。 - 总结影响装配检测可靠性的因素(如视角覆盖、光照阴影、部件公差等),提出改进方案以提升检测的鲁棒性。 #### 3.4.1 场景破解 许多工业产品由多个部件装配而成,只有所有部件都正确就位,产品才能正常工作。因此,检测产品部件的装配完整性是视觉质检的重要任务之一。 让我们以一个**电子装配**场景为例:一块电子设备板上需要安装若干螺丝和连接器插针,我们希望通过机器视觉来判断这些元件是否都已正确安装到位(没有缺件、位置没有偏移)。 在传统人工质检中,工人需要逐一查看每个螺丝孔和插针位置,非常费时且容易漏检;而机器视觉系统可以在一张照片中同时检查所有目标区域,大大提升效率和准确率。 <center> <图片: 电子设备板装配示例 (螺丝与插针)>  </center> 装配检测的难点在于**空间位置的对比**。我们不仅要识别出各个部件是否存在,还要判断它们的位置和方向是否符合要求。例如,一个螺丝装上去了但没有拧紧到位,可能高度突出或者角度歪斜,视觉上也算"异常装配"。 另外,背景往往是复杂的——例如电路板上有各种其它元件和纹路,我们需要区分出哪一些特征对应我们关注的装配部件。 这通常需要结合**模板匹配**(预先知道正确装配时各部件应在的样子)或**特征对齐**(通过基准特征将被测图像与理想模型进行比较)。 颜色也是线索之一:例如银色的螺丝在绿色PCB板上非常显眼,利用颜色分割可以快速定位螺丝的位置;插针通常是金属光泽,而空洞则可能呈黑色,通过亮度也可加以区分。 ```mermaid flowchart LR A[装配完成的产品] --> B[图像采集] B --> C{与基准比对} C -->|一致| D[判定合格] C -->|不一致| E[识别缺件/错位] E --> F[输出缺陷报告] ``` 上图描述了一个典型流程:获取待检产品的图像后,与预先记录的正确装配基准进行比较。 如果全部关键部位都匹配,说明装配完整无误;如有不匹配之处,进一步定位是哪个部件缺失或偏差,并输出缺陷信息。 为了帮助理解,我们打一个比方:把装配检测想象成**拼图游戏**的检查。当一副拼图完成后,我们可以将它与完成示例图对照,看看有没有空缺的位置或错误的拼块。如果发现某个拼块缺失,就相当于装配中有零件没装;如果拼块放错位置,就类似某部件错位。机器视觉所做的,就是自动完成这一对照过程。 ```mermaid flowchart LR X[完整拼图样例] --> Z{对比当前拼图} Y[当前拼好的拼图] --> Z Z -->|完全匹配| M[拼图完成] Z -->|存在差异| N[定位缺失/错误拼块] N --> O[提示重新装配] ``` 正如拼图对照能快速发现问题部件,视觉装配检测通过图像对比也能迅速发现产品上遗漏的螺丝或插针。当我们掌握了如何获取清晰稳定的装配图像,并拥有正确的装配基准模板,就可以借助算法高效地发现装配错误。 <center>  </center> #### 3.4.2 系统搭建 ##### (1)硬件配置 构建装配检测系统,需要考虑视野能够覆盖整个产品,以及分辨率足以看清所有关键部件。针对电子板上螺丝和插针的检测,我们选择: 1. **工业相机**:500万像素彩色相机。彩色成像有助于利用颜色区分不同部件(如螺丝的银色、PCB板的绿色),高分辨率确保即使细小的插针缺失也能被察觉。 2. **镜头**:16mm广角定焦镜头,配合相机安装在距板面约300mm处,可覆盖整个板卡区域。如果板上部件高度不一,为保证全部清晰,可适当收小光圈增大景深。 3. **光源**:选择**环形漫射光源**或**半球罩光源**,在相机周围从多个角度照亮板卡。这样可以最大程度避免元件阴影,并减少金属螺丝的高光反射。均匀的照明让背景板和部件颜色都能真实呈现,利于后续算法分析。 4. **基准治具**:制作一个简单的定位治具,确保每块待检板放置在相同位置和角度。这有利于图像与模板的对齐,也避免不同拍摄之间出现大的位移偏差。 5. **基准板样本**:准备一块装配正确的"金样"板,包含所有螺丝和插针,此板用于拍摄基准图像和调试算法时提供对照参考。 <center> <图片: 装配检测硬件配置示意图>  </center> ##### (2)设备调试步骤 当硬件安装完毕,我们按照如下步骤进行调试: 1. **相机视野调整**:固定相机和镜头俯视板卡。通过实时预览画面,微调相机位置和角度,使所有需要检测的螺丝孔和插针区域都在图像视野范围内,并且居中适当。调节镜头焦距及光圈,确保整个板面在焦深范围内(可利用板上印刷文字检查四角和中心的清晰度是否一致)。 <center> <图片: 装配板清晰视野示例图> _1747362710.jpeg) </center> 2. **光源校准**:开启环形/漫射光源,调整其亮度使图像整体曝光适中。观察图像: * 若发现螺丝顶部有明显反光斑点,可在光罩上增加一层漫射材料(如磨砂板)进一步柔化光线,或略微调整光源与板面的距离。 * 确认整个板面亮度均匀,尤其是插针区域不能因为立体阴影而变暗。必要时增加辅助侧光以填充阴影。 * <center> <图片: 均匀光照下装配板图像示例> _1747362721.jpeg) </center> 3. **基准图像采集**:将准备好的完好装配基准板放置在治具定位点上。采集一张高分辨率图像并保存。这张图像将作为"理想装配"的参照。在保存前,可给图像添加适当备注,例如标记螺丝和插针的位置用于后续分析(或者至少记录这些部件在图像中的坐标区域)。 <center> <图片: 高质量基准板图像 (金样)>  </center> 5. **图像检查**:仔细检查采集的基准图像质量。放大查看每一个螺丝和插针:它们应清晰可辨且颜色自然。如果某个区域不清晰,返回前几步调整(比如某个插针反光太亮以致看不清,可略调光源角度)。确保基准图像的品质,因为它将直接影响后续比对的可靠性。 <center>  </center> 6. **模拟缺陷测试**:为了验证系统灵敏度,可尝试在基准板上**制造一个缺陷**(比如暂时取下一颗螺丝),然后拍摄一张测试图像。观察这张有缺件的图像与基准图像相比,缺件处的差异是否肉眼明显。如果肉眼都难以分辨,则需要增强成像对比(例如在螺丝孔下垫入深色背景以在无螺丝时形成颜色反差)。 <center> <图片: 模拟缺陷板与基准板对比图 (缺螺丝)> _1747362731.jpeg) </center> 6. **批量检测准备**:恢复基准板的完整装配状态,并开始对实际待测板进行测试拍摄。确保每块板都严格按照治具定位放置、并在相同光照和相机参数下成像,以保证后续软件判别的准确性。此时硬件和成像参数就绪,我们可以进入软件比对算法的开发。 <center>  </center> ##### (3)软件开发与算法实现 软件方面,有两种主要思路来进行装配检测: * 基于图像差异:直接将待测图像与基准模板图像进行像素级对比,差异处对应的就是可能缺件或错位的区域。 * 基于特征识别:针对每个关键部件设计检测算法,例如用模板匹配寻找螺丝头的位置、用特征点匹配判断插针排列。 <center> <图片: 算法展示>  </center> 在此我们先实现一种通用的**图像差分法**,然后讨论更智能的算法。图像差分法简便易行,前提是待测产品的姿态和基准尽量一致。下面是核心函数`check_assembly()`的示例代码: ```python import cv2 import numpy as np def check_assembly(test_image_path, ref_image_path): """ 将待测产品图像与参考基准图像进行比较,找出装配差异。 返回差异区域的列表,以及标记差异的输出图像。 """ # 1. 读取待测图和参考图,并转换为灰度 test_img = cv2.imread(test_image_path) ref_img = cv2.imread(ref_image_path) gray_test = cv2.cvtColor(test_img, cv2.COLOR_BGR2GRAY) gray_ref = cv2.cvtColor(ref_img, cv2.COLOR_BGR2GRAY) # 2. 计算绝对差分图并阈值化 diff = cv2.absdiff(gray_ref, gray_test) <图片: 灰度图像差分效果图 (absdiff)> _, diff_bin = cv2.threshold(diff, 50, 255, cv2.THRESH_BINARY) <图片: 二值化差异图 (thresholded diff)> # 3. 去除噪声影响(形态学开运算去小点) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5)) diff_bin = cv2.morphologyEx(diff_bin, cv2.MORPH_OPEN, kernel) <图片: 形态学开运算后差异图> # 4. 查找差异区域的轮廓 contours, _ = cv2.findContours(diff_bin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) differences = [] output_img = test_img.copy() for cnt in contours: area = cv2.contourArea(cnt) if area < 20: continue # 过滤过小的噪点区域 x, y, w, h = cv2.boundingRect(cnt) differences.append((x, y, w, h)) # 用红色矩形标记差异区域 cv2.rectangle(output_img, (x, y), (x+w, y+h), (0, 0, 255), 2) return differences, output_img # 示例使用 diff_regions, annotated_image = check_assembly("test_board.jpg", "reference_board.jpg") print("发现差异区域个数:", len(diff_regions)) cv2.imwrite("annotated_output.jpg", annotated_image) <图片: reference_board.jpg 示例 (装配基准图)> <图片: test_board.jpg 示例 (待检测装配图)> <图片: annotated_output.jpg (标记差异的装配图)> ``` 在这个代码中,我们将参考图和待测图转为灰度后,用`absdiff`求绝对差值,然后通过阈值将差异显著的像素提取出来(这里阈值设为50,假设亮度差异超过50的像素才算有变化)。接着使用形态学开运算去除一些零星噪点,避免微小光照变化造成干扰。之后,我们查找差异图中的轮廓,将面积较小的忽略,只保留可能对应缺件或错位的区域。我们将这些区域的坐标加入列表,并在输出图像上用红色矩形标记出来。最终返回差异区域列表和标记后的图像。 <center> <图片: 图像展示>  </center> 利用这种方法,如果某个螺丝缺失,那么在差分图上该螺丝位置会因为没有螺丝(灰度不同于基准有螺丝的情况)而呈现高亮,形成明显轮廓。插针缺失或歪斜也会导致局部像素变化,进而形成可检测的区域。当然,为了使差分可靠,要求拍摄的待测图在位置和角度上与基准尽量一致(通过前述治具已实现),且光照变化很小。 除了简单的差分,工业上常用更**鲁棒**的方法: * **模板匹配**:对每个螺丝、插针预先截取基准图像的小模板,然后在待测图对应位置执行匹配(cv2.matchTemplate)。如果某位置没有找到高匹配度的模板,则判定该部件缺失或松动。同理,也可匹配出现在不应在的异物。 <center> <图片: 螺丝/插针模板匹配过程示意图> _1747362840.jpeg) </center> * **特征点匹配**:利用ORB、SIFT等算法提取基准图和待测图的特征点并匹配。如果某个本应存在特征(例如螺丝十字槽的角点或插针端点)在待测图中找不到对应匹配,就说明该部件可能异常。这种方法对轻微的位置偏差不敏感,还能同时估计整体位姿变换,使比较更加准确。 <center> <图片: ORB/SIFT特征点匹配在装配检测中应用示例> _1747362869.jpeg) </center> * **颜色/形状分析**:结合颜色阈值和形状判别,例如在预定螺丝位置检测是否有圆形金属色的区域,没有则判定螺丝缺失。这类基于先验特征的规则也很有效且计算量小。 <center> <图片: 基于颜色和形状分析检测螺丝示例> _1747362850.jpeg) </center> 实际系统可以将上述方法融合,以提高可靠性。例如,先用差分快速筛查出可疑区域,再对这些区域应用模板匹配或特征分析以确认真伪,避免光照噪声造成误报。 #### 3.4.3 技能图谱 ```mermaid mindmap root((装配检测技能)) (设备操作技能) [相机视野规划与校准] [多角度均匀照明] [景深控制保证清晰] [基准样品采集保存] (图像处理技能) [图像配准与对齐] [差分法检测] [模板匹配定位] [特征点匹配识别] (Python编程技能) [模板匹配(OpenCV)实现] [ORB/SIFT特征检测] [差异区域标记输出] [容差阈值设定与调优] ``` 这份技能图谱列出了完成装配检测项目所需的关键技能。在设备操作方面,我们必须学会**规划相机视野**以覆盖所有装配点,并通过治具或校准确保每次拍摄的角度和位置一致。 同时需要**多角度布光**来避免由于部件立体结构产生的阴影,调节相机参数获得足够的景深使所有部件都清晰呈现。此外,提前准备并拍摄**基准样品**也是重要步骤,熟练掌握如何获取高质量的模板图像对于后续的软件分析至关重要。 在图像处理层面,我们需要能够**对齐不同图像**(如将待测图通过平移/旋转配准到基准图坐标系),运用**图像差分**快速发现宏观差异,并掌握**模板匹配**和**特征点匹配**等更高级的方法来定位具体缺失的部件或检测错位。 最后,在Python编程技能方面,我们应当能够实现OpenCV的模板匹配接口,调用ORB/SIFT等算法库进行特征提取匹配,并将检测到的差异区域用可视化方式标记出来。同时,需要根据实际情况**设定容差阈值**,调整算法对比敏感度,避免将微小无关差异当做缺陷——这也是装配检测算法调优的一个重点。 #### 3.4.4 典型应用 * **电子产品元件漏装检测** * 对PCB板上的元器件进行AOI(自动光学检查),快速发现是否有电阻、电容等元件漏贴。系统通常先获取PCB的基准图(所有元件齐全),然后对批量生产板逐一拍照比对。通过差分或模板匹配,可检测出缺件的位置及元件类型。 * <center> <图片: PCB元件漏装AOI检测示例> _1747362927.jpeg) </center> * 由于电子元件体积小、种类多,现代AOI设备还结合了机器学习算法,以应对元件方向、丝印差异。但原理上都围绕着"基准对比"展开。 * 此应用在SMT贴片生产中非常普遍,可以在回流焊后立即筛出漏焊漏贴的PCB板,防止不良流入下一环节。 * **机械部件螺钉漏装检测** * 汽车发动机、变速箱等组装件上有大量螺钉需要拧紧到位。视觉系统可以设定每个螺钉的位置区域,并利用模板匹配识别螺钉头部特征(如螺丝刀槽形状)。如果某位置匹配度低,则判定该螺钉未安装或未拧紧。 <center> <图片: 发动机螺钉漏装视觉检测示例> _1747362913.jpeg) </center> * 另一种方法是利用颜色/亮度:将每个螺孔区域提取出来,计算其灰度分布特征;有螺钉时由于金属反光,灰度分布与空孔时明显不同。据此即可快速判别。 * 该技术应用于汽车、家电装配线,实现对每一道紧固工序的质量监控,替代人工点数检查,避免漏装螺钉造成的事故风险。 * **连接器插针定位检测** * 在电子连接器装配中(如插座插针组装),需要核查每一根金属插针是否插入到位且没有弯折。视觉方案是俯视拍摄连接器开口侧,利用高亮度背光使未插入的孔洞在图像中呈现亮点,而插针占据的孔则显暗。 <center> <图片: 连接器插针定位与弯折检测示例>  </center> * 系统通过图像处理计算每个孔位的亮度,如果某孔过亮则表示插针缺失或未到底。此外,对插针顶端的位置进行特征点检测,也可发现插针偏移(位置未对准)的问题。 * 此类检测广泛用于继电器、接口等连接器生产中,确保每个插针都正确就位,以防止后续产品因接触不良而失效。 > 思考与练习: > > 1. 如果需要一条产线同时适应多种产品的装配检测(不同型号的产品零件布局不同),可以采用什么策略来对比多种装配结构?如何设计系统快速切换基准或智能识别产品类型? > 2. 在装配检测中,对于部件位置的轻微偏差或尺寸上的细微差异,应如何设置容差范围以区分"正常公差"和"装配问题"?试举例说明如何确定阈值。
ent
2025年5月16日 22:03
转发文档
收藏文档
上一篇
下一篇
AI问答
手机扫码
复制链接
手机扫一扫转发分享
复制链接
AIChat
代码在线测试
AI问答
你好,我是AI阅读助手,我可以回答与文档内容相关的内容,帮助你快速理解文档,以下是我归纳的几个核心问题,可供您参考:
发送
输入
运行
输出
Markdown文件
分享
链接
类型
密码
更新密码