VisionPro工业视觉实战:零件测量、硬币统计与骰子识别案例解析
2026/9/23 2:24:00 网站建设 项目流程

简介:本资源是一套面向机器视觉工程师、自动化产线开发人员及高校相关专业学习者的VisionPro工业应用实战案例集,聚焦尺寸测量、目标计数、缺陷识别、定位标注等核心检测任务,解决实际产线中零件质检、金融设备清分、娱乐设备识别等典型问题。压缩包含930个文件(650张JPG/PNG/BMP测试图像、76个C#源码文件、55个VPP视觉流程工程、40个RESX资源文件及配套Sln/Exe/DLL可执行环境),整体大小65.75MB,结构清晰,支持开箱即用与二次开发。已有112人下载学习,涵盖从硬币面额统计、骰子点数识别到陶瓷釉面瑕疵标注、地面裂痕检测等20+细分场景,每个案例均提供完整图像样本、可运行工程及关键参数配置逻辑,便于理解VisionPro工具链在OCR、Blob分析、几何匹配、缺陷分类等模块的工程化落地路径。

1. 项目概述:从“看”到“懂”,VisionPro的工业视觉实战

最近在整理一些工业视觉的落地案例,发现很多朋友对康耐视VisionPro这套工具的兴趣点,已经从“怎么用”转向了“怎么用好”。大家不再满足于跑通一个简单的定位或识别Demo,而是希望它能解决产线上那些实实在在的、有点“麻烦”的测量与统计问题。比如,一个机加工零件下来,几个关键尺寸是否在公差范围内?一盒混合的硬币,里面各种面值各有多少枚?或者,游戏骰子生产线上,快速判断每一面的点数是否正确。这些场景听起来简单,但真要稳定、高效、准确地实现,里面门道不少。

VisionPro作为一套成熟的机器视觉开发平台,其强大之处在于提供了从图像采集、预处理、定位、测量到通信的完整工具链。但工具是死的,思路是活的。今天,我就结合“零件尺寸测量与显示”、“硬币统计”、“骰子点数统计”这几个典型又接地气的案例,来拆解一下背后的实现逻辑、关键工具选型,以及那些只有踩过坑才知道的调参技巧和避坑指南。我们不止步于“能跑通”,更要追求“在现场能跑稳”。

2. 案例一:零件尺寸的高精度测量与结果可视化

这个案例的核心是“测量”,目标是替代传统卡尺、影像仪等接触式或半自动测量,实现非接触、快速、自动化的尺寸检测,并将结果实时显示给操作员或上传给MES系统。

2.1 方案设计:为什么选择“PatMax”定位 + “Caliper”测量?

很多新手会直接用一个找边工具(如EdgeFinder)去卡零件的边缘,然后计算像素距离。这种方法对于简单、背景干净、位置固定的零件或许可行,但对于实际产线中可能存在轻微旋转、遮挡或光照变化的零件,稳定性极差。

我们的方案是:PatMax定位 + Caliper工具测量。这是经过大量项目验证的黄金组合。

PatMax是一种基于几何特征的图案匹配工具,它不依赖于灰度,而是提取目标的轮廓、边界等几何信息进行训练和搜索。这意味着即使光照不均匀、零件表面有反光或部分被遮挡,PatMax依然能稳定地找到零件,并输出其精确的位置(X, Y)和旋转角度(Rotation)。这是后续所有测量操作的“坐标系基础”。没有稳定可靠的定位,测量就是空中楼阁。

Caliper工具是专为高精度边缘检测和间距测量而设计的。你可以把它想象成一个智能的、可多方向搜索的“游标卡尺”。它允许你沿着一条搜索线(Search Line)去寻找边缘,并能找到亚像素精度的边缘位置。通过配置两个Caliper工具(例如,一个找左边缘,一个找右边缘),我们就能得到两个边缘点的坐标,进而计算出像素距离。

注意:PatMax训练时,务必使用清晰、无变形的标准品图像,并在训练界面中合理勾选“缩放”、“旋转”等允许的变形参数,以平衡搜索速度与抗干扰能力。一个常见的误区是允许所有变形,这会导致搜索时间暴增且容易误匹配。

2.2 关键步骤与参数调校:从像素到实际毫米

  1. 图像采集与预处理:确保打光均匀,零件边缘对比度高。通常使用背光或低角度环形光能获得清晰的轮廓。预处理步骤可能包括灰度转换、滤波(如中值滤波去噪)和阈值分割,目的是让目标区域更突出。对于测量,图像质量是第一生命线。

  2. 训练PatMax模型:在零件轮廓最清晰的位置绘制一个训练区域(不要包含背景),进行训练。关键参数是“分数”(Score),它表示匹配的置信度。在线运行时,可以设定一个阈值(如0.7),低于此分数的结果视为定位失败,应触发报警。

  3. 建立测量坐标系:这是最易出错的一步。PatMax输出的是一个“变换”(Transform),它包含了定位结果。我们需要将这个变换传递给后续的Caliper工具,告诉Caliper:“请在我定位到的这个零件的位置上进行测量”。在VisionPro中,这通常通过“坐标空间”(Coordinate Space)或“图形空间”(Graphic Space)的关联来实现。确保Caliper的搜索线是相对于PatMax定位到的零件位置绘制的,而不是固定在图像绝对坐标上。

  4. 配置Caliper工具

    • 搜索方向:必须垂直于边缘。如果测量宽度,搜索线应水平放置;测量高度,则垂直放置。
    • 投影长度:搜索线要有足够的长度,确保能完整覆盖边缘可能出现的区域。
    • 边缘极性:明确指定从“暗到亮”还是“亮到暗”。这必须与实际图像一致。
    • 滤波参数:如“平滑度”(Smooth)和“阈值”(Threshold),用于过滤噪声,精确定位边缘点。需要根据图像实际情况微调。一个技巧是:在调试模式下,观察Caliper工具生成的边缘强度剖面图,理想的边缘应该是一个陡峭的单峰。
  5. 像素标定:这是将像素距离转换为实际物理尺寸(毫米)的核心环节。你需要一个已知尺寸的标准件(如标准块规),在同样的工作距离和镜头下拍摄。用Caliper测量标准件在图像中的像素距离P_pixels,已知其实际物理长度L_mm,则标定系数K = L_mm / P_pixels。此后,任何测量得到的像素距离乘以K即得到实际毫米值。务必注意:标定必须在最终的、不再变动的光学系统(镜头、工作距离)下进行。

  6. 结果显示与输出:测量结果(如宽度、直径、角度)可以通过VisionPro的“结果显示”工具叠加在图像上,直观地显示给操作员。同时,必须通过“通信”工具(如TCP/IP、串口、OPC UA)将结果(包括OK/NG状态、具体尺寸值)发送给PLC或上位机系统。这里常遇到数据格式转换和通信协议匹配的问题,需要提前与电气工程师沟通确认。

2.3 避坑经验:测量波动与误差来源分析

即使步骤正确,测量值也可能在小范围内波动。我们需要区分这是“噪声”还是“系统误差”。

  • 重复精度波动:如果连续测量同一静止零件,结果在±0.02mm内波动,这很可能是图像噪声和边缘检测的亚像素级计算波动所致,属于正常现象。可以通过对连续多次测量结果取平均值来平滑。
  • 一致性误差:测量不同位置的相同尺寸,结果有系统性偏差。这可能是镜头畸变导致。广角镜头边缘的畸变较大,会影响测量精度。解决方案是使用远心镜头,或进行更复杂的“二维标定”(使用棋盘格标定板),建立图像坐标与实际物理坐标的映射关系,校正畸变。
  • 整体尺度误差:所有测量值都按比例偏大或偏小。这通常是像素标定不准确造成的。重新进行标定,并确保标定用的标准件放置平面与产品放置平面一致(景深影响)。
  • 定位失败导致的测量失败:这是产线上最常见的问题。除了优化PatMax参数和光照,一定要在程序中加入健全性检查。例如,检查PatMax的匹配分数、检查Caliper是否成功找到边缘、检查测量结果是否在合理范围内(如零件宽度不可能为负值)。任何一步失败,都应记录错误日志并触发报警,而不是传递一个错误的结果。

3. 案例二:混合硬币的识别与数量统计

这个案例的核心是“分类”与“计数”。目标是从一堆混合的硬币中,自动识别出不同面值(如1元、5角、1角)并分别统计数量。它比单纯的“有无”检测更进了一步。

3.1 方案设计:为何不用颜色而用“特征”?

最容易想到的思路是利用颜色:1元是镍白色,5角是金黄色。但在复杂的自然光或车间照明下,颜色信息极不可靠,且1角硬币也有金色版本。因此,我们放弃颜色,转向更稳定的尺寸、图案(纹理)和轮廓特征

我们的核心方案是:Blob分析(区域分割) + 特征提取 + 分类器

  1. 图像分割(Blob分析):首先,我们需要将图像中的每一个硬币“分离”出来。通过合适的打光(如穹顶光提供均匀无影照明)和阈值分割,将硬币区域(前景)从背景(桌面)中提取出来,形成一个个独立的“斑点”(Blob)。
  2. 特征提取:对每一个Blob,计算一系列特征值。对于硬币识别,关键特征包括:
    • 面积:1元 > 5角 > 1角。这是最直接、最稳定的特征。
    • 等效直径:与面积相关,同样用于区分大小。
    • 圆度:硬币应该是接近完美的圆形,圆度值接近1。这可以过滤掉非硬币的杂质。
    • 灰度均值/方差:反映硬币的材质和表面纹理。1元(钢芯镀镍)和5角(钢芯镀铜)的灰度分布有差异。
    • Hu矩等不变矩:这是一种对旋转、缩放、平移具有一定不变性的形状特征,对于区分正反面或细微图案差异有帮助。
  3. 分类决策:将提取的特征送入一个分类器进行判断。在VisionPro中,有几种实现方式:
    • 简单规则分类:如果面积在[A1, A2]区间且圆度>0.9,则为1元;面积在[A3, A4]区间且圆度>0.9,则为5角……这种方式简单直接,但特征区间需要精心设置,且对特征重叠的情况处理能力弱。
    • 康耐视PatMax或PatFlex:如果不同面值硬币的图案(如数字、花纹)差异明显,可以直接用图案匹配工具来识别。但硬币可能正反面朝上,需要训练多个模型。
    • 使用VisionPro的CogCaliperTool或CogPMAlignTool结合特征:更高级的方法是使用这些工具提取更精细的轮廓或图案特征,但通常规则分类已足够。
    • 集成外部分类器(如基于YOLO的深度学习):这是当前的热点。当硬币种类繁多、新旧程度不一、表面有污损,或者需要识别更复杂的图案(如纪念币)时,传统算法可能力不从心。此时可以考虑引入深度学习模型。这也是为什么“visionpro 中怎么引入yolo算法”会成为热搜词。

3.2 YOLO算法在VisionPro中的集成思路

VisionPro本身是一个传统机器视觉算法平台,但它提供了灵活的.NET开发接口(C#或VB.NET),这为我们集成第三方深度学习模型打开了大门。集成YOLO(或其他ONNX格式模型)的一般思路如下:

  1. 模型训练与导出:在外部(如用PyTorch、YOLOv5/v8框架)使用标注好的硬币图像数据集训练一个目标检测模型。将训练好的模型导出为ONNX格式,这是一种开放的模型交换格式。
  2. 在VisionPro中调用:在VisionPro的C#脚本工具(CogToolBlock)或自定义的.NET工具中,使用微软的ML.NET库或ONNX Runtime库来加载这个ONNX模型。
  3. 预处理与后处理
    • 预处理:将VisionPro采集到的图像(CogImage8Grey或CogImage24PlanarColor)转换为模型所需的输入格式(如调整尺寸、归一化、转换颜色通道顺序)。
    • 推理:将预处理后的数据输入模型,得到推理结果(通常是边界框、类别置信度和类别ID)。
    • 后处理:对推理结果进行过滤(如应用置信度阈值、非极大值抑制NMS),并将得到的边界框坐标转换回原始图像坐标系。
  4. 结果融合:将深度学习模型识别出的“硬币类别”和“位置”,与传统视觉工具(如Blob分析得到的精确轮廓、位置)进行融合,可以计算出更精确的中心位置或进行二次验证,最后完成计数。

重要提示:引入深度学习会显著增加系统复杂度、开发周期和计算资源消耗。对于简单的1元、5角、1角分类,传统方法完全够用且更稳定高效。深度学习的优势在于处理复杂、多变的缺陷检测或极其复杂的分类场景。不要为了用YOLO而用YOLO。

3.3 实操难点:重叠与粘连硬币的处理

实际场景中,硬币常常会堆叠或部分粘连,这会严重干扰Blob分析,导致多个硬币被识别成一个大的Blob。

解决方案:

  • 物理层面:优化上料方式,使用振动盘或斜面滑道,使硬币尽量平铺、单层分离。这是最有效、最根本的方法。
  • 算法层面:如果无法避免轻微粘连,可以采用以下方法:
    • 分水岭算法:VisionPro的CogBlob工具中通常集成了分水岭分割功能。它可以将粘连在一起的Blob根据其形状凹陷处进行分割。但对于重叠(一个完全盖住另一个一部分)的情况,效果有限。
    • 轮廓分析:对粘连Blob的轮廓进行分析,寻找轮廓曲率较大的凹陷点(可能是硬币之间的缝隙),作为分割点。
    • 深度学习:YOLO等目标检测模型天生具备处理部分遮挡和重叠的能力,因为它学习的是物体的整体特征而非简单的轮廓分割。在重叠严重的场景下,这是更优的选择。

统计逻辑:确保你的计数逻辑是“基于每个被成功分割和分类的Blob”,并且在图像处理流程的最后一步进行累加。避免在循环或每次触发时重复累加。

4. 案例三:骰子点数的快速识别与统计

这个案例的核心是“模式识别”和“小目标计数”。目标是识别骰子每一面上黑点(或凹坑)的数量。关键在于处理低对比度、形状相似且可能因旋转角度不同而呈现不同透视变形的目标。

4.1 方案设计:从“数黑点”到“找白点”的思维转换

骰子点数识别,最直观的想法是去找黑色的圆点。但在实际打光下,黑色的点可能与骰子本体的阴影、污渍难以区分。一个更鲁棒的方法是:寻找白色的背景(骰子面)上的黑色点,转换为寻找黑色背景上的白色连通区域

具体步骤:

  1. 定位骰子本体:首先,需要找到图像中的骰子。可以使用PatMax或Blob分析来定位骰子的整体位置和方向。如果骰子颜色与背景对比明显,简单的阈值分割+Blob分析就能快速定位。
  2. 提取单个面:一个骰子通常有多个面朝上,我们需要识别的是朝上的那个面。如果摄像头是垂直向下拍摄,通常只能看到一个面。如果需要识别多个面,则需要3D视觉或多相机系统,这超出了基础案例范围。我们假设只识别最顶面。
  3. 顶面图像提取与校正:根据定位结果,从原图中“抠出”(通过仿射变换)顶面区域的图像。如果骰子有倾斜,这个校正步骤能将其“摆正”,得到一个正对着的骰子面图像,极大简化后续处理。
  4. 图像预处理与二值化:对抠出的顶面图像进行预处理。目标是让点和背景分离得尽可能干净。可以尝试:
    • 对比度拉伸:增强图像对比度。
    • 顶帽变换:这是一种形态学操作,能有效提取出比背景暗且面积较小的区域(即黑点)。
    • 自适应阈值:由于光照可能不均匀,全局阈值效果不好,使用自适应阈值能根据局部像素亮度动态确定阈值,效果更好。经过处理,我们得到一个二值图像:骰子点(前景)为白色,骰子面(背景)为黑色。
  5. Blob分析与过滤:对二值图像进行Blob分析,连通白色区域。现在,每一个白色Blob就代表一个潜在的骰子点。但我们需要过滤掉噪声:
    • 面积过滤:点的面积应该在一个合理范围内,太小的可能是噪声,太大的可能是污块。
    • 圆度过滤:骰子点通常是圆形或接近圆形,圆度太低的Blob可以排除。
    • 位置过滤:真正的骰子点应该大致分布在骰子面的特定网格位置上(如中心、四角)。可以建立一个简单的区域掩模,只保留这些感兴趣区域内的Blob。
  6. 计数与输出:统计过滤后剩余的Blob数量,即为骰子的点数。

4.2 进阶挑战:处理低质量图像与倾斜视角

  • 光照不均或反光:骰子材质(如塑料、树脂)可能反光,导致部分区域过曝,黑点消失。解决方案是使用漫射光源,如穹顶光或同轴光,创造均匀无影的照明环境。这是成败的关键,往往比算法调参更重要。
  • 骰子点本身不清晰:有些骰子的点是凹进去的(凹坑),在特定光照下对比度很低。可以尝试低角度照明(如环形光从侧面打光),让凹坑产生阴影,从而增强边缘对比度。
  • 倾斜视角导致点变形:如果相机不是严格垂直,或者骰子本身放置不正,顶面的点会发生透视变形,从圆形变成椭圆。这会影响Blob的圆度判断。解决方法一是尽量保证垂直拍摄,二是在Blob过滤时适当放宽圆度要求,或者使用更复杂的形状描述符(如椭圆拟合)。

4.3 一种替代思路:基于图案匹配的识别

如果骰子的样式固定(例如,某种特定游戏的标准骰子),还有另一种更直接的方法:将1点到6点的每一种图案,都训练成一个PatMax模型

在线检测时,让PatMax工具在骰子定位区域内,同时搜索这6个模型(可以设置较低的分数阈值和较大的角度范围)。匹配分数最高的那个模型,其对应的点数就是识别结果。这种方法避免了“数点”的复杂过程,直接将问题转化为“6选1”的分类问题,对于图案清晰、样式固定的骰子非常高效稳定。它的缺点是如果引入新样式的骰子,需要重新训练模型。

5. 系统集成与工程化考量

无论案例多么典型,最终都要落地成一个稳定运行的视觉系统。这远远不止是调通几个工具那么简单。

5.1 视觉程序的结构设计

一个健壮的视觉程序应该像一座建筑,有清晰的结构:

  • 初始化模块:负责加载相机参数、标定数据、模型文件、通信参数等。这些数据通常保存在配置文件(如XML、JSON)中,便于修改而不需重新编译程序。
  • 图像采集模块:控制相机硬触发或软触发,确保图像同步,处理采集回调。
  • 图像预处理流水线:将一系列图像处理工具(如滤波、二值化、形态学)按顺序组织起来。在VisionPro中,可以使用“CogToolBlock”以图形化方式搭建,也可以用C#代码组织。
  • 核心检测流水线:包含定位、测量、识别等核心工具链。每个工具的输出应作为下一个工具的输入(如坐标变换的传递)。
  • 结果判断与输出模块:根据检测结果(尺寸、数量、点数)与预设标准(公差、预期值)进行比较,得出OK/NG结论。然后将结论、数据、错误代码通过通信接口(TCP/IP、串口、IO卡)发送出去。
  • 日志与报警模块:记录每一次检测的原始图像、中间结果、最终结果和错误信息。这对于后期追溯问题、优化参数至关重要。当出现定位失败、通信中断等异常时,能立即触发声光报警。

5.2 通信与交互设计

视觉系统很少孤立运行,它需要与PLC、机器人、MES等交互。

  • 协议选择:TCP/IP Socket是最灵活通用的方式,但需要自己定义数据包格式。Modbus TCP/RTU在工业领域更常见,PLC支持性好。Profinet、EtherCAT等实时以太网协议性能最高,但实现复杂。OPC UA是新兴的跨平台标准,信息建模能力强。
  • 心跳与握手机制:必须设计通信状态监测。例如,视觉系统定时向上位机发送“心跳”信号,上位机也需回复。一旦心跳超时,双方都应进入安全状态并报警。
  • 数据格式与触发逻辑:与电气工程师明确约定:PLC发给视觉的触发信号是脉冲还是电平?视觉回复的结果数据包包含哪些字段(状态位、数据1、数据2…)?数据的字节序(大端/小端)是什么?这些细节的疏忽会导致通信完全不通。

5.3 部署、维护与性能优化

  • 硬件选型:根据检测节拍(每秒检测多少次)选择相机帧率;根据视野和精度要求计算分辨率并选择镜头;根据现场环境选择工业相机防护等级;确保工控机的CPU、内存足够,并配备固态硬盘存储图像日志。
  • 参数管理:所有可调参数(如阈值、分数、公差)必须界面化,最好有权限管理。操作员可以微调参数以适应微小变化,但关键参数(如标定系数)应锁定。
  • 稳定性测试:上线前需要进行长时间的连续无故障测试,模拟各种边界情况(如空料、反光、位置偏移)。
  • 性能优化:对于节拍要求高的场景,需要优化程序:减少不必要的图像复制;合理设置ROI(感兴趣区域),只处理关键区域;对于并行可用的工具,考虑使用多线程处理;定期检查内存泄漏。

从“零件测量”到“硬币统计”再到“骰子识别”,这三个案例由浅入深地覆盖了定位、测量、计数、分类、模式识别等机器视觉的核心任务。实现它们的关键,不在于记住某个工具的按钮在哪里,而在于理解问题本质,并据此设计合理的图像处理流程。VisionPro提供了丰富的工具,但如何组合、如何调参、如何应对异常,才是真正体现工程师价值的地方。每个项目现场的光照、机械、物料情况都独一无二,拷贝参数很难成功,唯有深入理解原理,才能灵活应对,做出稳定可靠的视觉系统。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询