欢迎光临
我们一直在努力

康耐视VisionPro彩色排线顺序检测实战:ColorExtractor+PMAlign+ToolBlock脚本详解

康耐视 VisionPro 彩色排线顺序检测实战分享

摘要: 本文分享一个基于 Cognex VisionPro 的彩色排线(Flat Cable)颜色顺序检测方案。针对 7 芯排线(红、白、黑、橙、黄、绿、蓝),利用 CogColorExtractorTool 结合 CogPMAlignTool 完成单根芯线定位,再通过 CogToolBlock 脚本对 7 路结果进行逻辑排序判定,最终输出 OK/NG。文章适合 VisionPro 初学者入门参考。


一、项目背景与需求

在消费电子、汽车线束等行业,彩色排线的颜色顺序直接决定了接口定义是否正确。人工目检效率低、易疲劳,因此需要视觉系统实现自动化防错。

本案例检测对象: 7 芯彩色排线
标准顺序(从左到右): 红 → 白 → 黑 → 橙 → 黄 → 绿 → 蓝
检测目标: 判断当前排线颜色顺序是否与标准一致,若错位则输出 NG。


二、整体方案设计

2.1 架构思路

由于需要识别 7 种不同颜色并判断其空间顺序,我采用了 “7 路并行检测 + ToolBlock 集中判定” 的架构:

  • 7 组独立的单颜色检测单元:每组负责在图像中找到一种特定颜色的芯线,并返回其中心 X 坐标。
  • CogToolBlock 脚本:汇总 7 个 X 坐标,通过比较大小判断是否按标准顺序从左到右排列。
  • 结果可视化:通过 CogCreateGraphicLabelTool 在图像上动态标注各颜色名称及最终 OK/NG 结果。
  • 在这里插入图片描述

    2.2 工具链选型

    功能模块选用工具作用说明
    颜色提取 CogColorExtractorTool 将目标颜色从彩色图像中分割出来,生成灰度图
    精确定位 CogPMAlignTool 在灰度图上搜索芯线图案,输出中心坐标 TranslationX
    单路标注 CogCreateGraphicLabelTool 在对应芯线上方绘制颜色文字标签
    逻辑判定 CogToolBlock 执行 C# 脚本,比较 7 个 X 坐标顺序
    结果输出 CogCreateGraphicLabelTool 显示最终的 OK/NG 大字

    三、单路颜色检测实现

    每一根芯线的检测逻辑都是相同的,只是训练的模板和提取的颜色不同。下面以红色通道为例进行说明。

    3.1 ColorExtractor 提取颜色区域

    首先使用 CogColorExtractorTool 对输入彩色图像进行颜色过滤。通过设置目标颜色的阈值范围(Hue/Saturation/Lightness 或 RGB 空间),将红色区域高亮输出为灰度图,其余背景 suppressed。

    • 输出 1:GreyscaleImage —— 供后续 PMAlign 搜索
    • 输出 2:PixelCount —— 可用于后续扩展判断该颜色是否存在(本练习暂未使用)

    在这里插入图片描述

    3.2 PMAlign 精确定位

    将 ColorExtractor 输出的灰度图接入 CogPMAlignTool。
    为什么不用 ColorExtractor 直接算 centroid?
    因为排线可能存在轻微旋转、伸缩或来料位置偏移,PMAlign 的模式匹配能够给出更鲁棒的中心坐标,同时兼具角度输出能力,为后续整体纠偏预留空间。

    • 训练要点:在灰度图上框选单根芯线的稳定纹理区域训练模板。
    • 关键输出:Results.Item[0].GetPose().TranslationX —— 即该颜色芯线在图像中的水平位置。

    3.3 动态标签标注

    为了让调试更直观,每个子流程末尾都挂了一个 CogCreateGraphicLabelTool:

    • X、Y 坐标:直接绑定到本路 PMAlign 输出的 TranslationX、TranslationY,确保文字始终跟随在芯线上方。
    • Text:直接写死为对应颜色名称(如“红色”)。
    • 颜色:目前采用固定颜色显示(未做随排线颜色动态变色,初学者可先这样实现)。

    重复以上步骤 7 次,分别建立红、白、黑、橙、黄、绿、蓝 7 个检测分支,得到 7 个 TranslationX。


    四、ToolBlock 判定逻辑(核心)

    4.1 数据汇总

    将 7 路 PMAlign 的 TranslationX 全部接入一个 CogToolBlock 的输入端。在我的工程中,它们分别对应:

    ToolBlock 输入对应颜色标准顺序位次
    Results_Item_0_GetPose_TranslationX 红色 第 1 位
    Results_Item_0_GetPose_TranslationX1 白色 第 2 位
    Results_Item_0_GetPose_TranslationX2 黑色 第 3 位
    Results_Item_0_GetPose_TranslationX3 橙色 第 4 位
    Results_Item_0_GetPose_TranslationX4 黄色 第 5 位
    Results_Item_0_GetPose_TranslationX5 绿色 第 6 位
    Results_Item_0_GetPose_TranslationX6 蓝色 第 7 位

    4.2 脚本代码

    在 ToolBlock 的 C# 脚本中,我采用了最直接的大小比较逻辑(硬编码标准顺序)。因为排线从左到右水平放置,X 坐标越小越靠左,所以只要判断:

    红 < 白 < 黑 < 橙 < 黄 < 绿 < 蓝

    即顺序正确。

    // CogToolBlock 脚本片段(简化示意)
    if(Inputs.Results_Item_0_GetPose_TranslationX < Inputs.Results_Item_0_GetPose_TranslationX1
    && Inputs.Results_Item_0_GetPose_TranslationX1 < Inputs.Results_Item_0_GetPose_TranslationX2
    && Inputs.Results_Item_0_GetPose_TranslationX2 < Inputs.Results_Item_0_GetPose_TranslationX3
    && Inputs.Results_Item_0_GetPose_TranslationX3 < Inputs.Results_Item_0_GetPose_TranslationX4
    && Inputs.Results_Item_0_GetPose_TranslationX4 < Inputs.Results_Item_0_GetPose_TranslationX5
    && Inputs.Results_Item_0_GetPose_TranslationX5 < Inputs.Results_Item_0_GetPose_TranslationX6)
    {
    Outputs.Output = "OK";
    }
    else
    {
    Outputs.Output = "NG";
    }

    4.3 结果输出

    将 ToolBlock 的 Output 字符串绑定到主界面的 CogCreateGraphicLabelTool,即可在图像右侧显示醒目的 NG 或 OK。

    在这里插入图片描述


    五、位置纠偏与旋转适应

    实际产线上,排线来料不可能完全水平或固定在同一位置。本方案通过以下方式兼容一定范围内的位置偏移和角度旋转:

  • 每路 PMAlign 独立搜索:7 个 CogPMAlignTool 各自在全局图像中搜索目标颜色,不依赖于固定 ROI。即使排线整体平移,只要芯线仍在视野内,就能找到各自坐标。
  • 旋转鲁棒性:在 PMAlign 训练时开启角度搜索( ±45°),当排线整体轻微倾斜时,每根芯线仍能被正确匹配,且输出的 TranslationX/Y 会自动跟随实际位置。
  • 这种“先提取颜色、再独立匹配”的方式,比直接用一个灰度工具找所有线束更抗干扰,因为颜色信息已经将 7 根线预先区分开了。


    六、运行效果展示

    6.1 NG 样例(顺序正确)

    下图为一张典型的 OK 样例。正确顺序应为“红、白、黑、橙、黄、绿、蓝”,,系统正确输出了 OK 红色大字,并在每根线上方标注了当前识别到的颜色名称。

    在这里插入图片描述

    6.2 单路检测细节

    下图展示了“红色”单路检测的内部细节:ColorExtractor 提取红色区域后,PMAlign 精确定位,并将“红色”标签贴在对应位置。

    在这里插入图片描述


    七、总结与后续可优化点

    7.1 方案优点

    • 逻辑简单直观:7 路颜色并行提取 + 坐标排序,非常适合 VisionPro 初学者理解 ToolGroup 和 ToolBlock 的配合。
    • 可视化强:每根芯线都有颜色标签和最终 NG/OK 显示,调试方便。
    • 一定鲁棒性:利用 PMAlign 的角度搜索兼容了来料旋转和位置偏移。

    7.2 当前局限(初学者练习版)

    作为个人练习项目,当前版本为了先跑通流程,做了以下简化,读者后续可按需升级:

    局限优化方向
    未做缺失检测 若某根芯线断线或未拍到,ToolBlock 里仍会比较固定输入,可能误判。后续可加入 PixelCount 或 PMAlign Score 判断是否存在。
    未做乱序具体诊断 目前只知道“NG”,不知道是哪两根线 swapped。后续可在脚本中做数组排序,输出具体错位信息。
    标准顺序硬编码 当前红<白<黑<橙<黄<绿<蓝写死在脚本里。后续可通过 ToolBlock 输入参数或外部配方(Recipe)实现不同机种切换。
    标签颜色固定 可让标签字体颜色跟随排线实际颜色,显示更直观。

    八、结语

    本文通过一个完整的 VisionPro 彩色排线顺序检测案例,展示了 ColorExtractorTool、PMAlignTool 与 CogToolBlock 脚本的基础配合方式。虽然脚本逻辑很“新手向”,但已经能满足基础的顺序防错需求。希望这篇分享能给刚入门 VisionPro 的朋友提供一个可复现的练手项目!

    如果你也在做类似的线束/排线检测,欢迎在评论区交流优化思路。


    文章版本: v1.0(初学者练习版)
    软件环境: VisionPro 9.0
    转载请注明出处。
    如需要检测图片欢迎私


    赞(0)
    未经允许不得转载:171主机测评 » 康耐视VisionPro彩色排线顺序检测实战:ColorExtractor+PMAlign+ToolBlock脚本详解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址