☰
Sherlock机器视觉软件零基础入门:ROI读码与位置标定避坑
2026/10/28 13:20:57 网站建设 项目流程

简介:这份PPT面向机器视觉初学者和自动化检测工程人员,系统梳理Sherlock机器视觉软件的功能定位与使用框架,可帮助读者理解视觉检测程序的配置逻辑、界面组成及通讯、多线程等工程应用背景。内容从主菜单栏、工具栏、图像窗口、监视窗口、变量窗口和报表窗口切入,说明Number、Boolean、String、Point、Line等变量及数组形式在检测数据保存中的作用,并延伸到Landmark位置标定、Calibration刻度校准、Search区域搜索和Color Processing颜色处理等核心环节,同时涉及面性/线性ROI、Blob分析、边缘计数、读码器、OCR及脚本编辑、算法定制等工具箱内容。压缩包共1个PPT文件,约3.93MB,以图文页面集中呈现界面布局、程序单元组织与标定应用示例,便于对照学习和课堂讲解。已有1564人学习,适合需要快速建立Sherlock操作框架、查漏补缺并理解视觉检测流程的读者参考。

1. 先弄明白一件事:机器视觉软件到底在替人干什么

有位朋友第一次听到 Sherlock 机器视觉应用软件这个名字,第一反应是:这玩意儿是不是查案用的?等看到界面上一堆 ROI、Blob、边缘强度之类的词,就更发怵了,觉得这肯定是工程师才能碰的东西。其实它干的活很朴素——摄像头拍下流水线上的零件,软件替你盯着那张画面,判断东西有没有、位置正不正、缺不缺件、条码读不读得出来。Sherlock 就是这类帮你盯画面的 Windows 软件,点击式配置,多视野分析,常见的自动化检测场景基本都能覆盖。

这篇入门向的梳理不聊算法推导,只回答三件事:它是什么、为什么值得零基础的人先学它、第一周该动哪几个按钮。读完你至少能自己打开软件,对着一张图片跑出一条能出结果的流程。

2. 为什么新手值得先学它:门槛低不等于学不到东西

2.1 点击式配置,把写代码换成摆积木

机器视觉开发有两条路。一条像雕刻:拿 C# 或者 C++ 调图像处理库,一行行写采集、滤波、找边、判定,出了毛病自己下断点。另一条像摆积木:软件把常用的图像处理都做成现成的模块,你把模块拖进程序窗口,填几个参数,连起来就成一条流程。Sherlock 走的是第二条路,官方描述里那几个词——点击式、图形化环境、无需传统编程——说的就是这件事。

摆积木的好处很直接:新手第一天就能看到结果。你画一个框,选一个读码算法,点运行,条码内容就出来了,中间不需要理解亚像素、不需要啃什么卷积核。这种即时反馈对零基础的人特别重要,因为学视觉最怕的就是折腾半天屏幕上什么变化都没有,最后不知道自己错在哪。

但门槛低不等于不用动脑。积木摆错顺序照样塌:算法 B 要用算法 A 算出来的点,你把 B 拖到 A 前面,B 拿到的就是个空值;ROI 画大了一圈,把背景的干扰也框进来,读数立刻开始飘。所以真正要学的是两件事——每个模块负责什么,以及它们之间谁先谁后。这两件事想清楚了,剩下的都是鼠标操作。

还有一点值得提前说:Sherlock 是多视野的,一套软件里能同时管多个相机、多个工位的画面。实际产线上常见的场景是,一台机器上装着好几个镜头,分别看不同角度,软件里就是几个图像窗口各管一摊。入门阶段先玩一个窗口,等你把单幅图的流程跑顺了,再多开窗口,思路是一样的。

2.2 先认五个变量字母:N、B、S、P、L

打开程序窗口,你会看到一堆带方括号的东西,像 N[1]、P[3] 这样。这五个字母是 Sherlock 里的变量类型,不认全它们,后面看程序基本等于看天书。第一次接触时我也觉得这是玄学,后来才明白,它其实只是把“结果长什么样”分了个类。

字母类型存什么典型用途
NNumber 数字一个数值测出来的宽度、面积、灰度均值、读码质量分
BBoolean 布尔真或假判定这一件是 OK 还是 NG
SString 字符串一串字符条码内容、OCR 识别出的文本
PPoint 点一个坐标点找边找到的边缘点、圆心、标定用的参照点
LLine 线一条线拟合出来的边线、基准线

每种类型还有对应的数组写法:N[]、B[]、S[]、P[]、L[]。数组的意思是“同一种东西有好几个”。举个具体例子,你在一条边上放了个线形 ROI 去找边缘,画面里可能同时找到五个符合强度的边缘点,那这五个点就存在 P[] 里面,P[1] 到 P[5] 挨个排着。

为什么要单独讲这个?因为后面所有的调试,本质都是在问一句话:我要的那个值,有没有被算出来、算对没有。变量窗口里 N 一直显示 0,说明算法根本没出结果,问题在配置;N 有值但每次跳来跳去,说明 ROI 或者参数不稳,问题在标定和阈值。分得清这两种情况,排错效率差出好几倍。

新手最容易犯的错是把类型用混。比如想记录条码读出来的字符串,却新建了一个 N 类型的变量去接,软件不会报错,但你永远看不到那串字符。养成习惯:动手接变量之前先想一句“这个结果是人能读的一串字,还是一个数,还是一个真假”。

2.3 六个窗口的分工:谁看结果,谁看过程

Sherlock 的界面乍看很满,其实每个窗口职责很单一。把它们的功能对号入座,界面立刻就不吓人了。

窗口或区域干什么什么时候看
主菜单栏与主工具栏开关各类窗口、控制版面分布、保存程序、运行调试开工第一步和收尾
图像窗口显示相机画面或图片,画 ROI,装图存图,启停采集全程都开着
程序窗口显示每个算法单元的输入输出,拖拽调整执行顺序搭流程和排查逻辑时
变量窗口实时显示程序里各类变量的当前值想知道“算出来没有”时
监视窗口 Monitor显示警告、错误、执行时间等运行信息程序跑不动或者变慢时
报表窗口 Reporter承接打印出来的检测数据要留存记录或对接外部时

这里有个容易被忽略的细节:图像窗口上有开始和停止采集的按钮,采图和算图是两条独立的线,采集不会停下来等你算完。这就是多线程这个概念在视觉软件里的雏形——画面刷新和程序执行各走各的。入门阶段不用深究调度,但心里要有数:画面上看到的帧,未必就是你正在算的那一帧,所以现场调试时先把采集停掉、用静态图验证逻辑,能省掉大量自我怀疑。

监视窗口 Monitor 是新手最该常开的一个。它不像变量窗口那样给你结果,它给你的是警告、错误和执行时间。程序卡住、某个算法报错、整条流程跑得比以前慢,线索都在这里。我见过太多人盯着画面找问题,其实 Monitor 里早就写清楚了哪一行没通过。

3. 第一个能跑通的例子:对着一张图把条码读出来

3.1 装图:先让软件有东西可看

别一上来就接相机。现场相机连着运动机构,工件一动,你根本分不清是算法配错了还是位置跑了。入门阶段用一张静态图片,可复现、可反复试,这是我最想给新手的建议。

操作顺序是这样的:

  1. 打开图像窗口,找到装载图像文件的按钮,选一张带条码的图(图书封面、包装盒都行)。
  2. 用放大、缩小、还原这几个按钮,把图调到条码占画面三分之一左右的大小。
  3. 打开显示选项设置,确认画面没有被过度缩放拉伸。

第二步为什么要调大小?因为 ROI 是用鼠标拖着画的,图太小你框不准,图太大又看不全上下文。三分之一是个经验值,条码边缘看得清、周围环境也留得住,后面判断“框大了还是框小了”会方便很多。

静态图跑通之后再切相机,切换的动作很小:把图像窗口的采集开起来,画面就从文件变成实时流。这时候如果结果开始抖,你至少能确定问题出在位置或者光照上,而不是自己刚才那套配置白做了。这个顺序能帮你省掉不少后悔药。

3.2 画 ROI 加算法:矩形框配 Barcode 1D

ROI 是“感兴趣区域”的缩写,说白了就是告诉软件:只看这块,别管别的地方。这是整个软件里最高频的动作,画得好不好直接决定结果稳不稳。

  1. 在图像窗口选择添加 ROI,挑矩形形状。
  2. 用鼠标在条码外面拉一个框,四边各留一点余量,别贴着条码边缘。
  3. 在程序窗口里给这个 ROI 配上 Barcode 1D 算法。
  4. 打开该算法的属性对话窗,确认码制类型和扫描方向跟图上的条码一致。
  5. 点运行,去变量窗口看结果。

参数上给几个起步建议:

项起步怎么设说明
ROI 形状矩形一维码是长条,矩形最贴合
留边条码四周各留 5 到 10 像素贴边容易切掉起止符,直接读不出
算法Barcode 1D二维码要换成对应类型
扫描方向与条码走向一致方向反了等于横着扫竖条,必然失败

画框这一步有个血泪经验:宁可小一点、贴着条码,也别大一圈把背景全框进去。框大了,背景里的竖线条、文字、边框都可能被当成条码的一部分,读出来的内容就是乱的。反过来,如果框太小切掉了条码两端,那就直接读不出来。判断标准很简单——把框显示出来,肉眼确认条码完整落在里面,四边还有点空余,就对了。

3.3 看程序窗口和变量窗口:结果到底存在哪

运行之后,别急着看画面上的绿框,先看两个地方。

程序窗口显示的是每个算法单元的输入和输出。你在图像窗口里加了什么算法、设了什么预处理,对应的处理过程和结果参数都会在这里列出来。它的价值在于让你看见“顺序”:第一个单元算出什么,交给了第二个单元,第二个又吐出了什么。流程跑不通的时候,从上往下挨个看,通常能找到第一个输出为空的那一格,问题就在它或者它的上一格。

变量窗口显示的是变量的当前值,而且会随着程序运行实时刷新。读码成功的话,你会看到一个 S 类型的变量里躺着那串条码字符;如果是判定结果,那就是一个 B 类型的真假值;如果是质量分,就是 N 类型的数字。这里有个实操要点:变量不是自动就有的,需要在变量窗口的快捷工具栏里手动添加对应类型的变量,再把它接到算法的输出上。很多人第一次跑通了算法,却发现变量窗口空空如也,就是因为少了这一步。

顺手说一句通讯。真实项目里这个读出来的条码不会只躺在软件里,它要往外走:通过 I/O 接口给 PLC,或者走 OPC 兼容接口跟别的应用交换数据,也有用 VB 写前端界面来对接的。入门阶段先别碰这些,等单机流程稳了再往外接,顺序反了会非常痛苦——数据通路调通了,结果却是错的,你都不知道该改哪头。

3.4 单步跑一遍,再连续跑

工具栏上有几个按钮值得专门记:单步运行、连续运行、停止与中断调试。新手最容易忽略的是单步。

连续运行适合看最终效果,单步适合找问题。点一次单步,程序走一个单元,你就能看清这一格到底算出了什么,然后再点下一格。流程只有三四格的时候区别不大,一旦你的程序长到十几二十格,连续运行报错你根本不知道错在哪,单步走两遍基本就能定位。

调试的时候还有个动作要养成:程序单元是可以拖拽调整顺序的。往程序窗口里加单元时,逻辑上可能需要重排,你只要选中某个单元,按住鼠标左键拖到目标位置上方再松开,它就插进去了。这个操作看着简单,但顺序错了造成的现象特别迷惑——不是报错,而是结果全错或者全为空。所以每次拖完,顺手单步走一遍确认。

4. 让结果稳得住:位置标定是新手第一个必须啃下的功能

4.1 工件一挪,读数就飘,这不是玄学

标准的机器视觉应用都希望从一组图像里分析出相同的特征。但现实是,运动控制本身有误差,采集设备本身有误差,待检工件放上来的姿态也不可能每次都一样。结果就是每幅图里的物体位置都有点偏移,甚至带点旋转。你那个 ROI 是画在固定坐标上的,物体一动,框里的内容就变了,像素统计自然不准。

前面那个读条码的例子最能说明问题。图像往右移动一点,矩形 ROI 里框住的内容就变了,原本完整的条码偏出去一截,识别立刻失败。这时候大部分新手的反应是回去调算法参数,调半天没用——因为问题不在算法,在于框没跟着物体走。

解决思路只有一个:给 ROI 做坐标位置的自我标定。说人话就是,先在工件上找一个稳定、每次都能找到的参照物,用它的位置变化去推算整个画面偏了多少,然后让 ROI 跟着这个偏移量一起动。这个参照物的选取和标定,就是 Sherlock 里的 Landmark 位置标定和 Alignment 校正设置。

选参照物有几个原则,都是踩坑踩出来的。第一,这个特征每张图都必须存在,不能时有时无。第二,它要跟被检测的目标在同一个刚体上,工件转它就转,工件移它就移。第三,它的边缘要清晰、对比要够,别选那种模糊过渡带。图书封面上的条码左边框就是个不错的参照——边界干净,位置固定,每次都在。

4.2 建一个 alignment scheme:把参照点钉在工件上

这一步是整个标定里最需要按部就班的地方,顺序错了后面全白搭。拿前面那张图书封面图举例,参照物选条码左边那条竖直边界。

  1. 在图像窗口添加一个线形 ROI,横跨条码左侧的边界线。
  2. 给这个线形 ROI 配置 First Edge 算法,也就是找第一条边缘。
  3. 把边缘强度参数设成一个明确的值,比如 100,保证只在真正明显的边界处触发。
  4. 打开图像窗口的 Options 对话窗,切到 Alignment 页面。
  5. 点击 Create alignment 按钮,创建一个 alignment scheme。
  6. 系统默认会把它命名成 alignmentA、alignmentB 这种,改成有意义的名字,比如 alignLeftEdge。
  7. 从 Point readings 窗口里,把 First Edge 探测到的那个点拖到 alignLeftEdge 下面。

第七步做完,一个标定点就算立住了。这里解释几个关键动作。

为什么用线形 ROI 而不是矩形?因为你要的是“一条边界”,线形 ROI 横跨边界时,算法只需要在这一条线上找灰度突变,抗干扰能力强、定位精度也高。矩形框适合做面状统计,不适合精确定位。

边缘强度设 100 是什么意思?它是一道门槛,只有灰度变化超过这个值的才算边缘。设太低,背景的细微纹理、印刷噪点都会被当成边缘,参照点乱跳;设太高,遇到光照偏暗的图就一个边缘都找不到。100 是个可以起步的值,实际要按你的图调,调到“该找到的边界稳定找到,不该找的噪点一个不触发”为止。

命名这一步别偷懒。一条流程里往往有好几个标定点,都用默认的 alignmentA、alignmentB,过两天你自己都分不清哪个对应哪个 ROI。名字带上位置信息,比如 alignLeftEdge、alignTopHole,回头排查时省事。

4.3 把标定套到 ROI 上:让它自己跟着工件跑

标定建立好只是完成了一半,还得告诉每个需要跟着动的 ROI 去用哪一套标定。

  1. 选中要标定的那个矩形 ROI(就是配了 Barcode 1D 的那个)。
  2. 打开它的 Edit 窗口,切到属性栏。
  3. 找到 Alignment 下拉菜单,里面会列出程序里所有的标定设置。
  4. 选择刚才建好的 alignLeftEdge。

完成之后的效果是:工件水平移动时,线形 ROI 通过 First Edge 算法持续探测条码商标的左边界点,算出从原始位置到新位置偏移了多少,配了 Barcode 1D 的矩形 ROI 就按这个偏移量自动调整位置。有些界面上会用虚线标出矩形 ROI 的原始位置,你能直观看到它跟着跑了多远。

有个概念要分清楚:Landmark 位置标定和 Calibration 刻度校准不是一回事。位置标定解决的是“东西跑到别处去了”,让 ROI 跟过去;刻度校准解决的是“一个像素到底代表多少毫米”,让测量出来的数值有物理意义。新手常把两者混为一谈,结果测量值一直是像素数,不知道要去做标定换算。入门阶段先把位置标定搞熟,刻度校准等你要输出真实尺寸的时候再深入。

再补一句和通讯的关系。标定做好、结果稳定之后,这个 OK 或者 NG 的判定才值得往外送。通过 I/O 接口给 PLC 一个信号,或者走 OPC 兼容接口把数据交给上位应用,前提都是这个判定本身可信。跳过标定直接接外部通讯,等于把不稳定的数据一路放大到整条线,返工成本高得吓人。

5. 避坑:新手最容易翻车的五个地方

5.1 配置阶段的三处坑

坑一:ROI 画大了,把背景一起框进来。

现象是结果时对时错,同一张图重跑几次读数都不一样,或者读出来的字符莫名其妙多几位。原因是 ROI 覆盖范围超出了目标本身,背景里的文字、边框、阴影被算法一并处理,参与了统计和识别。解决方法是把 ROI 收紧到刚好包住目标、四周留一点余量,然后把框显示出来肉眼核一遍;如果拿不准,宁可先画小一点跑通,再一点点放宽。

坑二:照抄别人的边缘强度参数。

现象是参照点要么找不到,要么一张图上蹦出好几个候选点,标定完全不生效。原因是边缘强度是个跟具体图像强相关的门槛,光照、对比度、镜头都不一样,别人图上的 100 在你这张图上可能偏高也可能偏低。解决办法是先看灰度剖面想清楚这条边的对比大概多强,再从中间值试起,往两边调,直到稳定命中唯一一条边界。

坑三:改了参数没重新运行,以为软件坏了。

现象是明明把参数改成了新值,画面上什么反应都没有,变量窗口的值纹丝不动。原因是配置改变需要重新执行程序才会生效,尤其连续运行被停掉之后,光改参数不点运行,界面就是静止的。解决办法是养成“改完必跑一遍”的动作,改参数、单步、看变量窗口,三步连着做,不要跳。

5.2 运行与交付阶段的两处坑

坑四:打印变量忘了加方括号。

现象是报表窗口里出现的是变量名本身,不是数值,或者干脆什么都没有。原因是 Sherlock 里往报表输出检测数据靠的是 IO:Reporter Print 指令,而定制打印内容时,变量名两边必须加上方括号,软件才知道这里要替换成变量值;不加括号它只当普通文字。还有一个限制,你不能打印一个已知的固定读数,只能打印变量值。解决办法是把要输出的内容写成类似“读码结果:[S1] 判定:[B1]”这种形式,清空报表用 IO:Reporter Clear 指令,别手动删。

坑五:程序单元顺序拖错了,结果全空。

现象是不报错,但整条流程跑下来所有变量都是 0 或者空,画面上什么也没检出来。原因是算法之间有依赖,后面那格要用前面那格算出来的点,你把顺序颠倒了,它拿到的是初始空值。解决办法是打开程序窗口从上往下看,找到第一个输出为空的单元,问题通常就在它或它上一格;用单步运行一格一格走,明确每个单元的输入从哪来、输出给谁。

6. 下一步学什么:从会点按钮到能交付一条流程

零基础的人学 Sherlock,最容易走的弯路是想一口气把所有功能都摸一遍。Landmark、Calibration、Search、Color Processing 四大块,加上 Blob 分析、边缘计数、OCR、二维码、脚本编辑、I/O 接口,摊开看确实多。但它们的难度不是并列的,按顺序啃省力得多。

我给一条三个阶段的路径,每个阶段都配一个能自检的验收标准,你照着做就知道自己有没有过关。

阶段时间练什么验收标准
第一阶段第 1 到 2 周窗口分工、五个变量类型、单步调试、静态图跑通读码给一张新图,不看教程能独立配出读码流程,并能解释每个变量的含义
第二阶段第 3 到 4 周Landmark 位置标定、Alignment 应用到 ROI同一目标在画面里平移后,读数仍然正确,ROI 能自动跟随
第三阶段第 2 到 3 个月Search 区域搜索、Color Processing、Blob 分析、边缘计数、刻度校准、I/O 与外部通讯能对一件工件输出带物理单位的测量值,并通过接口把判定结果送出去

第一阶段别急着接相机。我见过太多人第一天就把相机架起来,结果画面一直在动,参数永远调不稳,最后怀疑软件有问题。用静态图把逻辑跑熟,这个顺序不能反。

第二阶段的核心是理解“参照物”这个概念。找一条清晰的边界,配 First Edge,建 alignment scheme,拖点,应用到 ROI,这五步走顺了,你就掌握了机器视觉里最通用的一个思路:先定位,再测量。后面不管换成什么软件、什么算法,这个思路都成立。

第三阶段开始接触对外的东西。Search 区域搜索用来做模式匹配,适合找形状固定但位置不定的目标;Color Processing 做颜色对映和分类;Blob 分析数个数、算面积;边缘计数做尺寸测量;刻度校准把像素换算成毫米。这一阶段可以开始碰 I/O 接口和 OPC 兼容接口了,把判定结果送给 PLC 或者上位应用。有一个细节要注意,变量类型要提前规划好:往外送真假值就用 Boolean,送测量数据就用 Number,送条码内容就用 String,类型选错了,通讯那头收到的就是空值。

还有一个具体技巧值得单独说:给你的程序单元起名和排版的习惯。每加一个算法,顺手在变量窗口里给它对应的变量起个带位置和功能的名字,比如 LeftEdge_Pt、Barcode1_Str。程序窗口里的单元顺序按执行逻辑从上到下排好,别东一块西一块。这个习惯在程序只有五格的时候看不出价值,等到二十格的时候,它就是你能不能在两分钟内定位问题的分水岭。

最后说个我自己的教训。早年做一条检测流程,读码总是不稳,我一遍遍调算法参数,调了两天才想起来去看监视窗口,里面早就提示执行时间异常,某个单元在反复重试。从那以后我每次开新流程,第一件事就是把监视窗口打开放在旁边,改完参数先单步走一遍再连续跑。这个习惯救过我很多次,也让我明白一个道理:机器视觉里大部分所谓玄学,其实是没看对地方。

希望帮到你,从装一张图开始就行。

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

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

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

立即咨询