news 2026/10/28 13:21:17

Sherlock机器视觉零基础入门:位置标定与读码工位实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sherlock机器视觉零基础入门:位置标定与读码工位实战

简介:Sherlock 机器视觉应用软件使用介绍 PPT 面向刚接触机器视觉的工程师、自动化检测从业者及软件选型人员,围绕 Windows 平台下的点击式配置、通讯与多线程应用,帮助读者建立对 Sherlock 的整体认知并理解典型检测流程。压缩包内为 1 个 PPT 文件,大小 3.93MB,以图文页面集中呈现软件定位、界面组成和操作逻辑,便于培训讲解或自学检索。内容覆盖 Landmark 位置标定、Calibration 刻度校准、Search 区域搜索、Color Processing 颜色处理等功能,并串联主菜单栏、图像窗口、监视窗口、变量窗口和报表窗口的用途,可对照理解参数输入输出与运行信息。已有 1564 人学习,适合入门者熟悉 Sherlock 的算法配置、界面操作和应用场景,也为后续通讯设置、多线程调试与自动化检测方案提供基础脉络。

1. 先弄明白一件事:Sherlock 到底是什么

刚被安排去做视觉工位的人,多半有过这个困惑:明明只是想让相机判断一下零件有没有装反,怎么一搜全是「算子」「阈值」「亚像素」这些词,还得先学一门编程语言?Sherlock 就是给这种场景准备的机器视觉应用软件,它跑在 Windows 上,把找边、定位、测量、读码这些常用动作做成了一个个能拖进程序里的模块,你用鼠标点击配置,不用先写代码。对零基础的人来说,它更像一件图形化的工具箱,而不是一门要啃完才能动手的课。它适合谁?产线设备调试、自动化集成、质量检验岗位上被派去做视觉检测、但没系统学过图像处理的人。它要解决的问题很具体:让相机拍到的图片,自动给出「合格还是不合格」「偏了多少」「这个码读出来是什么」这样的结论。

2. 为什么零基础也值得学:把「写代码」换成「搭积木」

很多人卡在第一步,不是因为笨,而是因为顺序反了——先去啃图像处理教材,翻到卷积和频域就放弃了,然后认定自己学不了视觉。真正上手做过一个工位的人都知道,头两周要解决的问题压根不是算法推导,而是「相机拍到的图能不能用」「检测框有没有框对地方」「结果怎么传给 PLC」。Sherlock 这类点击式软件恰好把难点集中在这些具体动作上,让你先把一条检测流程跑通,再去补原理,这个顺序对新手友好得多。下面三节把「为什么值得学」和「它到底强在哪」拆开讲清楚。

2.1 机器视觉在产线上到底在替人干什么

把产线上所有视觉需求归归类,其实逃不出四件事。第一件是「有没有」:料盘上这个位置有没有零件、瓶盖上有没有垫片。第二件是「正不正」:装反了没有、方向对不对、位置偏了多少。第三件是「多大」:孔径、间距、长度在不在公差里。第四件是「是什么」:读一维码、二维码,认 OCR 字符,分辨颜色。

人眼做这四件事都不难,难的是连续做八小时不出错,还要一秒做三次。机器视觉就是把这四件事交给相机加软件。Sherlock 的功能清单基本就是按这四件事铺开的:面性和线性的感兴趣区域(ROI)负责「框住看哪里」,预处理器负责把图弄干净,定位和模式寻找负责「正不正」,测量工具和标定负责「多大」,Blob 分析、边缘计数、彩色对映分类和读码器负责「是什么」。

新手最容易犯的错,是一上来就想做一个「什么都能检」的复杂程序。血泪经验是:先挑一个最稳定的特征做起来,比如一个边界清晰的直角边,跑通了再往上加。一个工位从零到能用,往往不是靠算法多先进,而是靠把一个简单特征做到足够稳。

2.2 四个看家功能:位置标定、刻度校准、区域搜索、颜色处理

这四个功能值得单独拎出来讲,因为它们是后面所有例子的地基。

位置标定(Landmark)解决的是「工件会动」这件事。你可以想象一个快递分拣台:包裹每次放上来的位置都不一样,如果扫描枪固定死在那儿,包裹一歪就读不到。正确的做法是先找一个参照物,比如包裹的左上角,让扫描枪跟着这个角走。Sherlock 里的做法就是先用一个线形 ROI 配 First Edge 算法找到这个参照边,再把它挂到一个叫 alignment scheme 的校准设置上,之后所有挂了这个设置的 ROI 都会跟着参照点自动移动。

刻度校准(Calibration)解决的是「像素不是毫米」这件事。相机拍到的一格一格是像素,客户要的是 0.05 毫米的公差。中间要换算,还要纠正镜头带来的线性甚至非线性畸变——广角镜头拍方格纸,边缘的格子会被拉弯,不纠正的话同一段长度在画面中心和边缘会量出两个值。

区域搜索(Search)解决的是「图案去哪了」。它和一个一个像素去比对的思路不一样,是拿一个模板图在画面里找最像的位置,适合找 logo、找丝印、找定位标记。

颜色处理(Color Processing)解决的是「颜色对不对」。线材颜色分选、指示灯亮没亮、标签底色有没有印偏,这类活灰度图做不了,必须上彩色对映和分类。

2.3 点击式配置为什么对新手更友好

写代码做视觉并不是不行,只是对新手来说,前期要交的学费太多:装环境、调库、处理异常、自己搭一个能看到中间结果的界面。等到终于能跑起来,已经过去两周,热情也耗得差不多了。

Sherlock 走的是另一条路。程序窗口会把每个算法模块的输入和输出直接列出来,变量窗口在运行的时候实时刷新数值,监视窗口单独显示警告、错误和执行时间。这意味着你每加一个模块、每改一个参数,马上就能看到结果变了没有。对新手来说,这种「立刻有反馈」的节奏比任何教程都重要,你能自己判断是参数调错了还是思路错了。

通讯方面它也没把路堵死:I/O 接口能直接和 PLC 打交道,OPC 兼容接口让检测数据可以被别的应用读取,还留了前端用户接口给外部程序调用。入门阶段你只需要知道一件事——检测结果和「合格 / 不合格」信号,最后是要发出去的,所以从一开始就要养成「每个结果都起个变量名」的习惯,别等到接 PLC 那天才发现不知道该传哪个值。

还有一个容易被忽略的点:图像采集、算法处理、对外通讯这三件事在时间上是重叠的。一帧图还在算,相机可能已经开始曝下一帧,PLC 那边也在等你回信号。这就是为什么新手不要在一个循环里堆太多耗时的模块——先把流程跑通,再考虑哪一段该精简。

3. 第一次打开软件:界面上到底有哪几块地方

软件装好、双击打开的那一刻,多数人的第一反应是「按钮太多了」。其实不用全认识,先把五块区域和五种变量认全,剩下的按需要再查。这一章不讲算法,只讲「哪块地方干什么用」,因为后面所有操作都要在这些窗口之间来回切。

建议的做法是:打开一张示例图,把五个窗口挨个点开看一眼,知道它们长什么样。熟悉界面花不了半小时,但能省掉后面很多「我刚才那个参数去哪了」的抓狂。

3.1 五个窗口各管什么

图像窗口是主战场,图显示在这里,你也在上面画 ROI。它自带的工具条干几件事:添加 ROI 检测区域、打开显示选项设置对话窗、放大还原缩小、启动和停止相机采集(注意这个只采集不处理,适合用来对焦和调光)、装载和保存图像文件。

程序窗口是「逻辑发生的地方」。你在图像窗口里加的每一个算法和预处理,都会在这里变成一行一行的模块,每个模块的输入输出参数都摊开显示。它还负责模块的排列顺序——顺序就是执行顺序,把 ROI LineA 拖到 RectA 上面,它就先生效。操作很朴素,选中、按住左键、拖到目标位置、松手。

变量窗口分两块:上面是快捷工具栏,用来往程序里加各种类型的变量;下面是运行时的数值显示区,程序一跑,所有输入输出参数的值会实时刷新。养成盯这个窗口的习惯,比盯着图像猜要快得多。

监视窗口从主菜单 View 里打开(View → Monitor),显示程序运行信息:警告、错误、执行时间。它能清空、能开关、能把显示内容存成文档。程序突然不动作了,第一眼看这里。

报表窗口是用来出数据的。用 IO:Reporter Print 指令把检测值打到报表里,写指令的时候变量名两边要加方括号,比如把变量 N 包成[N],软件才知道那是要取值的变量。这里有个新手常掉的坑:它只打印变量值,不打印你手写的固定读数,你把一个数字直接写进去是显示不出来的。清空报表用 IO:Reporter Clear。

3.2 五种变量类型:先记住这张表

Sherlock 里所有在程序之间流动的数据,都归到五种类型里。刚开始不用深究,先能对上号就行。

类型代号数组写法典型用途
NumberNN[]测量值、坐标数值、计数
BooleanBB[]合格/不合格、有无、开关量
StringSS[]读到的条码内容、OCR 字符
PointPP[]一个点的坐标,比如边缘点
LineLL[]一条线的参数

为什么要在意这个表?因为后面接 PLC 的时候,Boolean 才能当开关信号发出去,String 才能往数据库里存,Number 才能和公差比。类型选错了,程序不会报错,但结果传出去对方接不住,这种问题排查起来特别费时间。

举例来说:你用 First Edge 找到条码左边的边界,输出的就是一个 Point 类型的值,它会出现在 Point readings 窗口里。后面要做位置标定,就是把这个点拖到校准设置下面去。如果你一开始就把它设成了 Number,这个拖拽动作根本做不了。

3.3 程序窗口的拖拉和四条通用指令

程序除了从上往下一行行走,还需要一些控制结构。Program 图形工具栏里有四类通用指令:调用子程序、设置逻辑判断条件、在某一条件下重复执行、从某条语句跳变到程序任意位置。另外还能添加和设置子程序,把一段重复用的逻辑打包起来。

这四类指令对应的其实就是编程里的函数调用、if、while、goto。用过 Excel 公式的人理解起来不费劲:判断条件是 IF,重复执行是循环,子程序就是把这几个单元格的计算抽出来单独放一张表。

新手常见的做法是:所有逻辑都堆在主程序里,一行接一行往下排,看着很清楚。短程序没问题,一旦超过三四十个模块,改一个参数要上下翻半天。建议从第一个正式程序开始就练一个习惯:把「找基准 + 对齐」这一段做成子程序,主程序里只调用。以后加第二个检测项,直接复用。

4. 跑通第一个例子:让检测框自己跟着工件走

这一章是全文唯一需要你动手的部分,做完大概二十分钟。场景是这样的:一张封面上印着条形码的产品图,每次放上来的位置会有水平方向的偏移,你要读条码,而且读码的框必须跟着产品一起动。这几乎是最小号的真实工位,学的就是位置标定这一件事。

整套动作分四步:找一个基准边、把基准点挂到校准设置上、把这个设置应用到读码的 ROI、把读到的内容输出到报表。每一步我都会说清楚「点哪里」「看什么」「不对的时候先查哪里」。第一次做建议用静态图,别急着接相机。

4.1 第一步:用 First Edge 找一个稳定的基准点

先在图像窗口里画一个线形 ROI,横跨条码标签左边的边界。画的时候注意:ROI 要垂直于那条边,长度覆盖边界的上下范围,让它确实能「切」过明暗交界。

然后给这个线形 ROI 配上 First Edge 算法,把边缘强度参数设为 100。这个参数是「多明显的明暗跳变才算一条边」,值越低越敏感,也越容易被噪点骗。

做完这一步,程序窗口里会出现这个算法的模块,同时 Point readings 窗口里会出现一个点——那就是探测到的边界点。放大图像看看这个点是不是压在真正的边界上。如果它跑到图案的花纹上去了,说明边缘强度设低了;如果它根本不出点,说明设高了或者 ROI 方向不对。

这一步是整个流程的地基。地基歪了,后面自动对齐会把检测框带到一个更离谱的地方,而且现象会很隐蔽——程序不报错,只是读不到码。

4.2 第二步:建一个 alignment scheme,把基准点挂上去

打开图像窗口的 Options 对话窗,切到 Alignment 页面。点 Create alignment 按钮新建一个校准设置,系统默认会叫它 alignmentA、alignmentB 这样,我建议直接改成有意义的名字,比如 alignLeftEdge,三个月后回来改程序你会感谢自己。

改名之后,把第一步里 Point readings 窗口中的那个点,用鼠标拖到 alignLeftEdge 下面。这一拖的意思就是:以后这个点动了,以它为参照的一切都跟着动。到此为止,一个标定点就完成了。

如果要更稳,可以再加第二个基准点,比如用一条垂直于它的边,两点一起定住旋转。第一次练手先用一个点做水平偏移就够了,别一次上太多。

4.3 第三步:把校准设置应用到读码 ROI 上

现在画那个真正干活的 ROI:一个矩形,框住条形码,里面配 Barcode 1D 算法。先不挂校准,看看效果——把图像往右挪一点,你会看到矩形 ROI 还停在原地,框里已经变成别的内容,条码自然读不出来。很多人到这一步以为是算法不行,其实是框没跟上。

打开这个矩形 ROI 的 Edit 窗口,点属性栏,找到 Alignment 下拉菜单。菜单里会列出程序里所有可用的校准设置,选刚才建好的 alignLeftEdge。

再回去挪图像。这次你会看到矩形 ROI 自动往右移了,虚线会标出它原来的位置,实线是它现在的位置。它跟着基准边一起走,始终框住条码。

这一步的解释只有一句:ROI 的坐标不再固定在画面上,而是相对于那个基准点。所以画面怎么动,它的相对位置不变。想验证的话,把 Alignment 临时改回默认值,再挪一次图,对比就出来了。

4.4 第四步:把结果送到报表窗口,确认整条链路通了

最后让读出来的内容能被看见。在程序里加一条 IO:Reporter Print 指令,内容是变量名加方括号。假设你的读码结果存在变量 S 里,就写成[S]。注意不能直接写死一串字符,它只打印变量值。

运行程序,打开报表窗口。每跑一次,读到的条码内容就会追加一行。要清屏就加一条 IO:Reporter Clear。

到这一步,一条完整的链路就通了:找基准 → 定位 → 读码 → 出数据。后面接 PLC,无非是把「读到的字符串」换成一个 Boolean 的合格信号发出去;接上位机,无非是通过 OPC 把这几个变量暴露出去。骨架是一样的。

提示:第一次跑通之后,建议按「挪图三次、每次挪不同距离」的方式验证一遍,确认检测框每次都跟住了。这比你想象中重要,产线上的偏移方向是随机的。

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

下面五条是我见过最集中的问题,按「现象 → 原因 → 解决」写,看到眼熟的直接对号入座。它们有一个共同点:程序都不报错,但结果就是不对,所以特别耗时间。

5.1 配置阶段的三个坑

第一条,检测框总是偏一点,越跑越偏。现象是程序能跑,读码时好时坏。原因是基准点选在了不稳定的边上——比如一条有倒角、有毛刺、会随光照变化的边,每次探测到的点都在抖。解决方法是换一个对比度高、几何上更硬的特征,比如印刷的黑白交界,同时把 ROI 收窄到只覆盖那一段边界,别让它扫过整片区域。

第二条,挪了图之后框完全没反应。现象是图像明显偏移,ROI 纹丝不动。原因通常是三种之一:ROI 的属性里 Alignment 没选;选了但选的是另一个方案;或者基准点根本没挂到方案下面(拖拽那一步没成功)。排查顺序就是这三步,从后往前查,因为最常见的是第三步没做成功。

第三条,变量类型设错,后面接不上。现象是做对齐的时候拖不动那个点,或者组报表的时候内容显示不出来。原因是这个值被设成了 Number,而它本来应该是一个 Point。解决方法是回到变量定义改类型,改完重新走一遍引用它的地方。这类问题的麻烦之处在于它不报错,只是那个值传出去对方收不到。

5.2 运行与通讯阶段的两个坑

第四条,程序越跑越慢。现象是刚开始很流畅,加了几个模块之后明显卡。原因是采集、处理、通讯本来就是并行的,你在一个循环里堆了太多耗时的处理,采集那边只能干等。解决方法是先打开监视窗口看执行时间,找出最耗时的那一段,把能提前算的挪到循环外,能抽成子程序的抽出去,别一帧一帧重复做同样的事。

第五条,测试全对,一接 PLC 就不对。现象是自己在软件里跑得好好的,一连上设备就漏信号或者收到错的。原因多半是结果变量没起规范名字、Boolean 的判断条件写在了可执行模块之前、或者条码读到空值也照样发了合格信号。解决方法是从一开始就规定命名,把「合格判断」单独做成一个模块放在最后,并且在发信号前加一道空值判断。

6. 下一步学什么:从「会点」到「会搭」的三步走

第一个例子跑通之后,最忌贪多。我的建议是把接下来两个月分成三段,每段只干一件事,做完再进下一段。

阶段练什么达到什么程度
第 1 到 2 周反复做位置标定,换不同工件、不同偏移方向能闭着眼说出校准设置建在哪、挂给谁
第 3 到 5 周加测量:用标定把像素换算成毫米,量一个已知尺寸的东西量出来的值和卡尺对得上,误差能解释
第 6 到 8 周加通讯:把一个 Boolean 和一个 Number 发给 PLC,或从报表导出对方收到的值和软件里显示的一致

第一段看着枯燥,其实是回报最高的。产线上百分之七十的「读不到」「测不准」,最后都追到基准不稳上,而不是算法选错。第二段的关键是拿一个你手边能用卡尺量的实物去验证,别拿软件自己给的数字自证——那是循环论证。第三段最容易出成绩也最容易出事故,因为一旦对外发信号,错了就是真的错了,所以务必留一个手动确认的环节。

再往后可以碰脚本编辑和算法定制,但一定是在前面三段都稳了之后。至于 Blob 分析、边缘计数、OCR 这些,等你手上出现了对应的活,现学现用效率最高,没必要提前背。

我第一次独立做一个带自动对齐的工位时,图省事只用一个基准点,静态图上怎么试都对。结果现场工件一旋转,检测框跟着平移但不跟着转,一连三天读码成功率只有一半,最后回到 Options 里补了第二个方向的基准点才好。从那以后我每次建完校准设置,都强制自己按「平移三次 + 旋转三次」走一遍验证,宁可多花十分钟,也不想再半夜被叫回去。

希望帮到你。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 13:20:27

PHP高并发场景下的数据一致性解决方案

1. PHP数据一致性问题的本质与挑战在PHP后端开发中,数据一致性始终是系统设计的核心痛点。我经历过一个电商促销系统,高峰期每秒3000订单涌入时,库存超卖和订单状态不一致的问题尤为突出。这促使我深入研究了PHP环境下各种数据一致性方案的适…

作者头像 李华
网站建设 2026/10/28 13:19:26

Agent技能抽象:构建可复用技能库,告别提示词混乱

1. 为什么Agent项目越写越乱:问题出在缺少一层"技能抽象"过去一年我做了好几个基于大模型的Agent项目,从最早只会调API的聊天机器人,到后来能自己规划任务、调用工具的多步骤Agent,再到尝试让Agent自主完成一系列业务操…

作者头像 李华
网站建设 2026/10/28 13:19:22

Global Mapper操作手册:光栅剪裁、范围环交集与地形层运算实战指南

简介:《Global Mapper操作手册》是一份面向GIS初学者与地图数据处理从业者的PDF教程,由风侠老师主讲,系统讲解Global Mapper在地图绘制、数据转换与地形分析中的核心用法。资源包共1个PDF文件,大小约13.03MB,内容以图文…

作者头像 李华
网站建设 2026/10/28 13:19:15

英语高级词impeccable用法全解析:搭配、辨析与写作实战

批改英文稿件这些年,我见过太多人把“impeccable”当成一个走路带风的词往文章里放,十个里能有用对位置的,却很少有用出分寸感的。这个词在英语里属于典型“自带光环”的高频书面词,用它评价品味、举止、信用、工程质量时&#xf…

作者头像 李华
网站建设 2026/10/28 13:19:12

鸿蒙PC上AI Agent落地实战:Node.js与Harmonybrew技术栈详解

1. 项目概述:这不是一份“软件清单”,而是一张鸿蒙 PC 上 AI Agent 落地的实操地图鸿蒙、PC、AI Agent——这三个词凑在一起,很多人第一反应是“这能行?”我去年底开始在一台搭载开源鸿蒙 PC 版(OpenHarmony x86_64 构…

作者头像 李华
网站建设 2026/10/28 13:18:58

Nginx部署Vue项目全流程指南与性能优化

1. 为什么选择Nginx部署Vue项目Nginx作为一款轻量级高性能的Web服务器,已经成为前端项目部署的事实标准。我在多个生产环境项目中实测发现,相比Apache等传统服务器,Nginx在静态资源处理方面具有明显优势:内存占用仅为Apache的1/5左…

作者头像 李华