视觉项目调试到后期,最难受的问题往往不是“找不到特征”,而是“说不清”。定位结果看起来都在范围内,可它就是偶尔偏一下;机构那边怀疑视觉不稳,视觉这边又拿不出量化数据反驳。这种时候,我通常会做一件事:把CogResultsAnalysisTool拉进 Job 里,把关键输出项记录下来,连续跑几十次,让统计结果替我说清楚。
这篇文章就围绕 CogResultsAnalysisTool 展开,讲清楚它到底是什么、怎么接入项目、每个统计参数怎么解读,以及我在实际设备项目里踩过的坑。如果你正在用 VisionPro 做视觉调试、设备验收、产线稳定性分析,这篇教程应该能帮你省下不少时间。
1. CogResultsAnalysisTool 是什么:视觉系统的“数据体检仪”
1.1 它在 VisionPro 工具链中的位置
CogResultsAnalysisTool 属于康耐视 VisionPro 中的统计分析类工具,但它不是用来做图像处理的,这一点很多新手容易搞混。它的输入不是图像,而是其他视觉工具的输出结果,比如定位工具的分数和坐标、测量工具的尺寸、Blob 工具的面积、卡尺工具的边缘位置等。
简单理解,它就是一个“采集和统计模块”:
- 每次 Job 运行到该工具时,它会从上游工具取一次数据;
- 数据追加到内置的记录列表中;
- 同时实时计算平均值、标准差、最大值、最小值等统计数据。
这个机制说起来很简单,但实际价值非常大。它给视觉调试提供了一种“用数据说话”的工作方式。我在项目里几乎把它的角色定位成“数据体检仪”——判断一个视觉系统是否稳定,不看感觉,看它输出的统计结果。
1.2 它能解决的三类典型问题
第一类是重复精度评估。比如一个定位工具,要求每次返回的坐标波动不超过正负0.05毫米,这个判断靠肉眼看两三张图完全没有说服力。跑50次,看标准差和极差,结论一目了然。
第二类是参数调整效果的验证。很多工程师改完光源亮度或阈值之后,凭感觉觉得“好像更好了”。但“好像”在工业现场站不住脚。正确做法是改参数前记录30组数据,改之后记录30组数据,对比标准差有没有实质改善。有了数据,优化方向才不会被个人感受带偏。
第三类是设备验收和交付报告。客户要重复性数据,直接打开工具把统计表截图导出,或者把 CSV 放进报告里。这个数据比口头解释有说服力得多。
1.3 和其他分析工具的区分
VisionPro 还有类似的分析工具,比如趋势图、直方图分析等,功能上各有侧重。CogResultsAnalysisTool 的核心特点是“数据列表 + 基础统计量”一体,轻量、直观,适合快速定量判断,而且不依赖额外的脚本或数据库,开箱即用。
我个人的习惯是:如果是做一个快速验证,比如现场验收重复性,用 CogResultsAnalysisTool;如果是要做长时间的产线数据监控、趋势分析和 QC 报表,那可以结合其他数据分析工具或外部脚本做更深度的处理。先用手边最快的工具把结论拿到手,是调试的第一原则。
2. 第一次接入:从添加工具到数据落库的完整流程
2.1 在 QuickBuild 里添加工具
我平时用的比较多的是 QuickBuild,因为它所见即所得,对新手非常友好。添加 CogResultsAnalysisTool 的方法和加其他 VisionPro 工具一样:
在 QuickBuild 的工具流程视图中,右键空白区域调出添加工具选项,然后在工具选择对话框里搜索“Analysis”或“Results Analysis”相关关键词,就能看到它。不同版本显示的名称略有差异,有的叫“结果分析工具”,有的直接显示类名,但核心功能一致。
添加完成后,工具会出现在流程末尾。正常情况下它的图标和其他工具长得不太一样,一眼就能认出来。
2.2 把上游工具的输出结果接进来
添加工具之后最重要的一步,是把数据接进来。在 QuickBuild 里,每个工具都有输入输出端口,CogResultsAnalysisTool 的输入就是一个个可配置的数据通道。
举个例子:你要分析 CogPMAlignTool(模板匹配定位工具)的定位结果,那就把 PMAlign 工具的输出项拖到 CogResultsAnalysisTool 的对应输入上。常用的输出项包括:
- Score:匹配分数,判断每次定位的置信度是否稳定
- TranslationX / TranslationY:定位坐标,判断位置重复精度
- Rotation:旋转角度,判断角度偏差
建立连接之后,每次 Job 运行到 CogResultsAnalysisTool 时,它会读取这些变量的当前值并记录。因为 VisionPro 的工具链是顺序执行的,只要连接没断开,数据就一定会被采集到,这个流程本身不复杂,最容易出错的反而是下一步——确认数据真的进来了。
2.3 确认数据在真实采集
连接好之后,我习惯先手动运行几次 Job,然后打开 CogResultsAnalysisTool 的界面,看数据列表区域有没有逐条增加记录。
这里有个细节要注意:如果你只运行了一次 Job,数据列表里只有一行,很多人就以为工具没生效,其实这是正常的。要跑多次才有统计意义,也才能看到工具在持续记录。如果跑了几次数据还是没有增加,优先检查工具的 Run 状态是否被禁用,以及输入连接是否真的建立了。
2.4 一个快速的连通性验证方法
分享一个我常用的验证小技巧:跑一次 Job,然后手动把上游某个参数改一点点,比如把亮度的阈值从150改到155,再跑一次。如果 CogResultsAnalysisTool 的数据列表里对应变量的数值发生了变化,说明数据链路是通的。
这个验证方法只需要几十秒,但能在正式采集前把“接错线”的风险提前消灭,尤其是面对十几个输入项的项目时,非常省心。
3. 界面参数和统计量逐项拆解:别被一堆数字吓到
3.1 输入项怎么选:哪些数据适合接进来
CogResultsAnalysisTool 适合分析的输入项,都有一个共同点:它们是数值型连续变量。比如坐标、分数、角度、像素距离、面积、灰度均值等,这些变量有明确的数量关系,做统计分析是有意义的。
不适合接进来的包括:
- 布尔型结果(比如 Pass/Fail 标志),值只有0和1,分布信息太少,看不出稳定性;
- 枚举/状态码(比如错误代码),统计量对它没有实际意义;
- 字符串类输出(比如工具名称),连类型都不匹配。
我见过有同事把一个“匹配成功/失败”的布尔输出接到工具里,然后看标准差,问我为什么数据没有区分度。这类问题本质上是对工具的定位理解偏了——它不是看逻辑状态,而是看连续数值的波动。
3.2 核心统计量怎么看:均值、标准差、极值
CogResultsAnalysisTool 界面里最核心的几个统计量,我给大家用“打靶”这个例子来解释:
- Mean(均值):所有记录的平均弹着点。在定位项目里,它代表系统的“平均位置”。如果目标理论位置是已知的,均值与理论值的差就是系统的固定偏移。
- StdDev(标准差):弹着点的散布半径。标准差越小,说明每次结果越一致,也就是重复性越好。这是判断稳定性的核心指标。
- Min / Max(最小/最大值):弹着点的极端位置。它代表系统在最坏情况下会偏到哪,是评估“会不会超差”的保守参考。
- Range(极差 = Max - Min):一次测试中最大的波动范围。虽然受样本量影响较大,不能只靠它下结论,但作为现场快速判断非常好用。
这几个参数里面,我建议大家盯住标准差。极差只反映两个极端点,偶然性很大;标准差反映的是整体散布,统计上更稳健。现场验收时,客户如果只给你看“最大偏差”,你可以主动补充标准差数据,这才是更全面的重复性证据。
3.3 规格界限和过程能力:USL、LSL、Cp、Cpk 的实操解读
CogResultsAnalysisTool 还支持设置规格界限(USL = 上限规格值,LSL = 下限规格值),并基于此计算过程能力指数 Cp 和 Cpk。
概念上可以这么理解:如果你的视觉系统要求定位误差不超过正负0.05mm,那么:
- USL = +0.05mm
- LSL = -0.05mm
- 数据散布越窄、均值越居中,Cp/Cpk 就越高
通常工业实践里,Cp 或 Cpk 达到 1.33 以上,表示系统有能力满足规格要求;1.67 以上表示比较充裕。如果 Cpk 小于 1,说明数据散布或中心偏移已经超过了规格允许范围——这就是一个危险的信号。
需要特别提醒的是,Cp 只反映“数据散布宽度受控于规格宽度”的程度,它不考虑均值偏移;Cpk 则把偏移也纳入了计算。所以现场判断时,优先看 Cpk,Cpk 拉胯时再去检查是散布太大还是均值偏了。
3.4 数据记录的清理与保留策略
每次测试之前,我几乎都会先做一次 Clear Data 操作,把旧数据清掉,确保这次统计只针对当前状态。
实践里有个场景很多人踩过:调完参数以后忘了清数据,新旧两组数据混在一起,标准差被系统性拉大,Cpk 急剧下降。然后你开始怀疑调参调错了——其实只是数据没分开。所以一定要养成习惯:每次改变测试条件之前先清零,让每一次统计回答一个明确的问题。
保留多少条数据合适?我的经验是:快速验证至少30条,正式验收尽量50条以上。样本太少,标准差估算不稳定,说服力也不够。
4. 实战复盘:给视觉定位系统做一次二十分钟的稳定性体检
4.1 项目背景:手机零部件装配线的视觉引导
去年做的一个项目,是手机零部件装配线上的视觉引导抓取。相机俯视安装,视觉系统输出目标物中心坐标给机械手,要求系统的重复定位精度在正负0.05mm以内。客户验收时直接提出:给我一份重复性数据报告。
这种场景下,没有量化证据很难过关。我当时的操作流程,就是下面这套标准步骤。
4.2 实施步骤:固定样本、连续运行、记录数据
第一步,把一片标准样件固定在相机视场范围内,确保50次运行期间样件完全不动。这是整个测试的前提条件——如果被测物本身在移动,测出来的数据是视觉误差和机构误差的叠加,问题就说不清了。
第二步,在 Job 里加入 CogResultsAnalysisTool,把 PMAlign 工具的 Score、TranslationX、TranslationY 接进去,并且在属性面板中设置好规格界限。这里我设置的是 X、Y 方向各正负0.05mm(也就是 USL = 0.05,LSL = -0.05)。
第三步,获取图像、运行 Job,一共循环50次。每次运行后工具自动记录一组数据。
第四步,测试完成后打开工具界面,直接读取统计结果。下面是我当时记录到的数据(整理后):
| 指标 | X坐标(单位mm) | Y坐标(单位mm) |
|---|---|---|
| 均值 | 0.003 | 0.001 |
| 标准差 | 0.011 | 0.009 |
| 最小值 | -0.018 | -0.015 |
| 最大值 | 0.024 | 0.020 |
| 极差 | 0.042 | 0.035 |
| Cpk | 约1.42 | 约1.81 |
4.3 怎么读这份结果
先看标准差,X方向 0.011mm、Y方向 0.009mm,相对正负0.05mm的规格,标准差约为规格的1/5左右,重复性比较健康。
再看极差,最大极差0.042mm,仍然在正负0.05mm规格线以内,说明即便出现最极端情况,也不会直接超差,有一定的安全余量。
再看Cpk,两个方向都大于1.33。X方向1.42 偏低一点,但还在合格范围内,说明X方向的数据波动比例比Y方向更大,如果有余力,可以继续优化一下光源或ROI区域。
整个过程花了不到二十分钟,包括准备样件和测试。最关键的是,导出统计表之后,客户那边没有再多问,因为数据本身说明了一切。
4.4 如果结果不达标,往哪个方向排查
如果跑完发现标准差偏大,不要急着怀疑工具本身。按我的排查顺序来:
- 先看数据里有没有离群点,如果有,检查是不是触发时机、来料状态造成的异常帧;
- 再看外部环境:相机支架是否锁紧、光源是否频闪、产品是否完全静止;
- 然后看图像质量:特征区域是否反光、曝光是否稳定、特征本身一致性如何;
- 最后才看算法参数:ROI是否太小、搜索范围是否过大、模板特征是否具有唯一性。
绝大多数情况下,问题出在图像采集端或者机构端,而不是匹配算法本身。有量化数据之后,这些排查可以做得更有方向感。
4.5 导出 CSV 做进一步分析
CogResultsAnalysisTool 还支持把记录数据导出成 CSV 或其他文本格式。导出后我通常在 Excel 里做两件事:
- 画趋势图,看50次运行有没有随时间漂移。如果越到后面偏差越大,大概率是机构热漂移或者光源衰减;
- 做直方图,看数据分布是否接近正态。如果分布明显偏斜,需要查一下特征状态是否偶尔变化,或者视场边缘是否进入了干扰。
导出这一步很容易被忽略,但恰恰是发现隐蔽问题的最好方式。只看统计量,你能知道“稳不稳”;看趋势图,你能知道“是不是越跑越差”。
5. 用了大半年,最值得注意的坑和心得
5.1 常见问题排查速查表
这一年多里,我把客户现场和同事咨询里碰到的高频问题做了个汇总,列成下面这个表格,先给大家一个快速索引:
| 现象 | 可能原因 | 对策 |
|---|---|---|
| 数据一直没有新增 | 工具未执行或被禁用 | 检查工具状态,确认处于使能运行状态 |
| 标准差突然变大 | 旧数据没清,混入不同条件的样本 | 调整条件后先 Clear Data 再测 |
| 数据有离群点 | 触发时机不对/来料状态异常 | 检查触发逻辑,结合图像回查异常帧 |
| 均值偏移严重但散布正常 | 相机或机构存在固定偏移 | 做坐标标定,检查相机装配位置 |
| Cpk 很低但数据类型正常 | 规格界限设置不对/样本量不足 | 核对 USL/LSL,增加测试次数 |
| 工具重启后历史数据丢失 | 内存数据未导出 | 测完及时导出 CSV |
5.2 数据清零这件事,比想象中更重要
很多人对 Clear Data 不够敏感,觉得清了可惜。但在我眼里,统计数据的唯一价值就是“单一条件下的清晰描述”。一旦混入了不同条件的数据,统计量就没有意义了。
之前有个项目,同事连续测试了几轮,中间改了光源亮度,但没有清零。结果看标准差,从0.008mm涨到0.02mm,大家以为光源调坏了,回退参数后还是一样。最后发现是两轮数据混在一起了。清零重测之后,数据恢复正常,白白浪费了小半天。
所以现在我在团队里定了一条规矩:任何一次正式测试,开始前必须检查工具数据列表是否为空;测试过程中如果改动了参数,必须重新清零再跑。这个习惯救过我好几次。
5.3 样本量过小就下结论,是很危险的
有一次我自己在调试一个二维码读取项目,顺手用 CogResultsAnalysisTool 记录读取耗时,只跑了5次,看到标准差很小就以为系统非常稳定。结果第二次测试跑到30次,发现偶尔出现一次耗时飙高的情况,标准差瞬间翻了好几倍。
这件事给我的教训是:样本量太小时,统计量什么也证明不了。视觉系统受曝光、触发、机构抖动等因素影响,偶发波动本来就存在,只有采样次数足够,才能暴露这些低频异常。
30次是最低门槛,有条件就跑50次,像做长稳测试的话,我会直接跑几百上千次,然后重点看极值和趋势,而不只是看平均值。
5.4 最后分享两个提高效率的小习惯
第一个习惯,是我会在保存 Job 文件时把 CogResultsAnalysisTool 的规格界限提前配置好,这样每次打开项目,不用重新设置 USL/LSL,测试数据直接带判定结果,给现场验收省了很多沟通成本。
第二个习惯,是在异常排查时,我会同时把原始图像保存打开,让 CogResultsAnalysisTool 记录的每一组数据都能对应到当时的图像。这样一旦统计结果里出现异常值,我能立刻回看那组数据对应的图像,判断是算法问题、图像问题还是外部环境问题。
这两个习惯不需要额外脚本,完全基于 VisionPro 自带能力就能实现,但对日常调试效率的提升非常明显。视觉调试这件事,说到底就是在不确定性里找确定性,CogResultsAnalysisTool 的价值,就是帮你把那层不确定性,压到可以量化的程度。