简介Sherlock 是一款基于 Windows 的机器视觉软件以点击式图形化配置代替传统编程适合自动化检测、图像处理与质量控制等场景。该PPT系统介绍了软件核心功能Landmark 位置标定可补偿物体偏移或旋转Calibration 刻度校准纠正镜头畸变Search 区域搜索与 Color Processing 颜色处理覆盖常见视觉检测需求同时对主菜单栏、工具栏、图像窗口、监视窗口、变量窗口、报表窗口逐一说明并演示了 ROI 检测区域、五种变量类型、程序单元拖拉调整及通用指令用法能够帮助初学者快速上手操作。资源还涉及灵活的 I/O 接口与 OPC 兼容特性便于与 PLC 等设备通讯适应多线程检测场景。资源为 1 个 PPT 演示文稿共 3.93MB内容结构清晰、图文配合适合机器视觉工程师、自动化设备调试人员及相关专业学生作为入门参考。目前已有 1559 人学习下载是一份兼具界面讲解与功能原理的实用资料。1. 看懂了介绍材料不等于能上产线Sherlock 真正的门槛在连接和调参大多数人第一次接触 Sherlock 机器视觉应用软件都是从一份使用介绍开始的界面熟练了、示例图片也跑通了觉得视觉检测并没有想象中难。但真把软件接到产线工位上最先卡你的往往不是算法而是三件小事相机能不能稳定出图、标定系数对不对、参数在光照变化后还成不成立。我是做自动化视觉落地的这类配置型视觉平台用得比较多平时打交道最多的就是这类“看界面觉得简单、上现场全是意外”的软件。这文章不照着界面逐项讲而是按我现场调试的习惯把 Sherlock 从“能打开”到“能判 OK/NG”拆成连接出图、工程搭建、参数调试、问题排查、离线验证五个环节讲完。每一步都给出可抄的参数和踩坑记录适合正准备上视觉工位、或刚接手现场视觉维护的工程师。软件的价值在于把算法变成配置不用写一行识别代码但镜头、光源、标定、阈值之间的关系你必须理解。2. 先把“能看到图”这件事做实相机连接、环境组件与出图检查2.1 装的不只是“软件”是整套采集运行环境授权决定你能开几个采集通道Sherlock 这类视觉应用平台本身不负责采集图像真正干活的是采集卡或智能相机。很多工程师拿到安装包装完启动软件发现采集设备列表是空的第一反应是重装结果折腾半天没用。症结多半是采集卡驱动或相机 SDK 没装或者授权文件没有和采集设备绑定。视觉平台的授权通常写进加密锁或网卡物理地址里换台电脑就失效先确认授权状态再怀疑软件本体这个顺序能省下大量排查时间。组件按用途拆开看可以列成这样一张清单组件什么时候需要容易踩的坑软件本体新建工程、配置工具链安装正常但运行一段时间后功能受限先查授权期限采集卡驱动 / 相机 SDK打开采集通道之前没装时设备列表为空或一打开采集就崩溃授权文件软件首次启动后绑定网卡或加密锁更换硬件后需重新关联相机固件相机采集行为异常时升级前一定备份当前版本方便回滚环境目录也有讲究。工程文件、图像存储路径尽量避免中文和空格这是做视觉项目的常规操作我一般统一用 D:\vision\project 这类结构。视觉软件的运行库、资源管理器对英文路径的兼容性更稳中文路径偶尔会导致工程里引用的图像资源找不到排查起来非常隐蔽。2.2 网口相机连不上时先查 IP、子网掩码和触发源别急着换线现场用网口工业相机是主流和 Sherlock 这类配置平台搭配时我接设备有一个固定顺序先确认相机通电再看网卡 IP 是否和相机在同一网段最后才看软件里的触发设置。命令行的排查步骤很直白# 先确认相机能被 ping 通常见相机默认 IP 和电脑不在同一网段 # 这一步能直接判断是不是网络问题。 ping 192.168.1.101 # 临时把本机网卡改成与相机同一网段网线直连时不要用自动获取。 netsh interface ip set address name以太网 static 192.168.1.100 255.255.255.0上面 IP 只是示例具体值要看相机拨码或机身上的标签子网掩码不匹配时会出现“能 ping 通但软件发现不了设备”的怪现象。软件里选传输协议时网口相机一般选 GigE Vision 协议不要依赖动态获取地址固定 IP 后产线重启才不会变。改了 IP 还连不上按这个表对号入座现象优先检查项ping 不通网线、POE 供电、网口指示灯是否正常ping 通但软件发现不了设备系统防火墙是否拦截广播包用相机 SDK 自带的工具重新枚举设备能发现但不出图触发模式还停在“外触发”先切成连续采集模式触发方式有三种连续采集、软触发、硬触发。初调阶段一律用连续采集把图像调出来看别一上来就接外部触发信号。产线用的硬触发接线没核对好会导致相机一直处于等待触发状态画面全黑很容易误判成硬件故障。2.3 出图的验收动作连续采几十张并留一份原始图相机连上之后我习惯先用软件自带的取图工具连续采集几十帧重点观察三类现象。全黑查镜头盖、曝光时间太小或触发信号没到位全白曝光时间或增益太高先把增益降到接近零再调曝光画面闪烁光源用的是交流供电或者是曝光时间与光源频闪周期没匹配上。这些问题在单张拍照时很难暴露连续采集才能看出来。这里有个容易被忽略的习惯保存图像时用 BMP 或 PNG不要用 JPEG。JPEG 是有损压缩算法层依赖的高频边缘会受影响标定和后面的离线跑批都要用原始图像数据。我一般会建一个独立的图像归档目录每次开始现场调试前清空一次调试过程中保存的所有原图按时间顺序累积这是后面所有排错和验证工作的底牌。注意出图检查不只是看“有没有画面”要看“画面稳不稳定”。多采几十帧确认没有偶发黑帧和撕裂帧再继续否则后续调出来的参数都是建在流沙上。3. 搭一个最小可跑的视觉工程取像、定位、测量、判定一条链3.1 工具链先排“取像→定位→测量→判定”顺序错了全错很多从介绍材料起步的人习惯先把工具列表里感兴趣的工具都拖到工程里再慢慢调。真正做工程不能这样要先想清楚产品怎么放、相机怎么装再排工具链。一个最小的可跑视觉工程在 Sherlock 这类平台里包含四种角色取像工具负责把相机图像读进来定位工具在图像里找到目标并输出坐标和角度测量工具基于定位结果做边缘查找和尺寸计算判定与输出环节设定限值输出 OK/NG并把结果写到 IO、串口或数据库。顺序必须固定定位永远在测量之前。我见过有人把测量工具放在定位工具前面的工程一旦产品位置偏移超过了测量工具的 ROI 范围尺寸直接量不到误判一大堆。定位先行测量窗口建立在定位坐标系之上是视觉平台里的硬性常识。ROI 能缩多小就缩多小。视觉算法的大量耗时花在找边缘和模板匹配上ROI 越大背景参与计算越多误检概率和耗时同时上升。一张 1280×1024 的全图和一个 300×300 的 ROI 相比后者调试起来才真正可控。这个原则在 Sherlock 里同样适用别把搜索区域画到覆盖整个视野。3.2 定位工具的参数照着这套配置改一遍就有感觉以圆形工件定位为例常见做法是用“找圆”类工具产品上有一个已知直径的圆孔或圆形轮廓把工具的搜索区域框在圆附近工具返回圆心坐标和半径。这类工具的界面参数在 Sherlock 里通常是表单式的配置逻辑可以用下面这份来对应理解tool: circle_finder # 圆形轮廓定位工具 roi: [180, 220, 400, 400] # 搜索区域左上角x, 左上角y, 宽, 高 polarity: black_to_white # 边缘极性从暗到亮的边缘才算 edge_threshold: 30 # 边缘梯度阈值单位是灰度值 min_score: 0.6 # 匹配分数达到 0.6 才接受结果 radius_range: [50, 70] # 预期半径范围单位像素解读几个关键参数ROI 的四个数值在界面上就是鼠标拖出来的搜索框越小越好edge_threshold 控制边缘响应的灵敏度设太大找不到边缘设太小会把阴影和划痕也当成边缘min_score 取值范围 0 到 1实际产线我一般从 0.6 起步调到 0.8 左右会比较稳radius_range 是用来滤除干扰圆的重要参数范围越窄越可靠。再强调 polarity 这个参数。黑色材料上的白色圆点和白色塑料上的黑色圆孔边缘方向是相反的极性选反了工具会在完全错误的位置上找边缘。这个参数在界面上通常就是两个单选按钮但很多人忽略它导致工具分数低、定位抖动还以为是算法不行。模板匹配类的工具同理不要追求把整张图都装进模板。我一般只圈目标轮廓本身把背景完全排除在外然后采集不同光照下的模板做多模板匹配。凡是定位不稳定先看极性再看 ROI 范围最后才轮到 min_score。3.3 测量工具拿到的“像素直径”必须做毫米标定定位完成之后进入测量环节。测量工具输出的直径、宽度、距离默认单位都是像素。像素不是毫米这一点在验收时最容易起争执。如果不对像素做标定视觉测出来“直径 820”你的卡尺量出来是 10.00mm两边永远对不上账。标定原理很简单用一个已知实际尺寸的物体反推每个像素对应的物理尺寸。假设标定件实际直径 10.00mm视觉测出 820 像素则像素当量 10.00 / 820 0.0122 mm/px。后续测量到的像素数乘以这个系数就得到毫米结果。用脚本验证一下# 标定用已知直径反推像素当量 known_mm 10.0 # 标定件实际直径单位毫米 measured_px 820.0 # 视觉工具测出的直径单位像素 scale known_mm / measured_px # 像素当量单位毫米/像素 # 实际测量时视觉输出的像素值直接换算成毫米 diameter_px 821.3 diameter_mm diameter_px * scale print(f标定系数: {scale:.4f} mm/px) print(f最终直径: {diameter_mm:.4f} mm)标定时有几个位置要注意标定件尽量放在实际产品相同的高度上因为物距变化会改变放大倍率标定后不要再动镜头焦距和光圈动过就要重新标定。如果视野边缘存在明显畸变单点标定满足不了精度需要用标定板做多点校正这是后话。判定输出的参数我习惯在交付前整理一张表参数示例值说明直径上限10.25 mm测量结果高于此值判 NG直径下限9.75 mm测量结果低于此值判 NG结果输出方式数字 IO / 串口送给 PLC 或机械手的信号通道信号延时50 ms等待机构到位后再输出判定判定是视觉工程最后一段。先把连续采集下的 OK/NG 跑通再考虑速度优化顺序反过来会给自己埋坑。4. 视觉调试避坑与排查五个让我翻过车的常见问题视觉调试一半是调参数一半是排查环境。下面五条都是我在现场真实踩过的坑按“现象、原因、解决”写清楚下次遇到可以直接对号入座。4.1 相机连不上设备列表为空先查 IP 和防火墙不是软件坏了现象软件安装正常相机也通电亮灯但软件里的设备列表始终为空重启软件和电脑都没有变化。无端重装软件之后问题依旧浪费大量时间。原因新装系统的防火墙会拦截相机发现协议发送的广播包而网口工业相机的枚举机制依赖广播一拦就找不到设备。另外电脑上同时开着无线网卡时系统网络优先级会把有线连接挤到后面同样导致枚举不稳定。解决固定相机 IP把无关的无线网卡禁用在防火墙中把盘视觉软件的执行程序加入白名单或用 SDK 自带的网络配置工具先确认能枚举到相机。如果 SDK 也搜不到设备那就和软件无关继续查网线、供电机和网口如果 SDK 能搜到而软件搜不到重点查权限和白名单。4.2 上午稳定、下午误检爆增把自动曝光关掉改固定值现象同一个工程上午过检一切正常下午误检率突然升高产品外观没有任何明显变化换回上午的参数也一样。最典型的例子是下午车间窗户有阳光照进来黄昏时又变回去。原因相机开启了自动曝光或自动增益环境亮度变化时相机会自动调整参数图像整体变亮或变暗边缘对比度随之漂移依赖边缘阈值和灰度模板的工具全部跟着漂移误检自然爆发。解决在相机设置里把曝光改成固定值增益也固定然后调整光源亮度来适应。注意光源必须用恒流驱动不要直接把 LED 光源接在普通开关电源上交流纹波会造成周期性闪烁视觉上表现为灰度值轻微跳动自动曝光不背这个锅固定曝光下依然会周期误检。提示判断是不是曝光漂移引起的最快的方法是看误检集中出现的时段以及当天日志里图像的平均灰度值是否有明显变化。平均灰度跳变超过 10 个灰度级基本可以断定和曝光有关。4.3 测出来的直径总是比卡尺多 0.1mm不是算法差是镜头斜了现象标定流程完全正确视觉测量结果稳定但和卡尺对比时系统偏差固定在 0.1mm 左右且 X 方向和 Y 方向的偏差不一致。原因相机光轴没有垂直于工件平面。镜头哪怕倾斜几度都会让目标在成像面上产生投影误差圆看起来不是正圆直径测量自然偏大或偏小。这个偏差在高精度测量场景里非常明显算法怎么调都消除不了。解决先做机械校正调整相机支架让镜头正对被测物。可以用带同心圆的标定靶放在测量位置观察视野四角是否同时清晰对称如果误差只在边缘区域明显说明镜头存在畸变需要做多点标定。0.1mm 的系统偏差通常只要把安装角度校正半度以内就能解决别急着改软件参数。4.4 模板匹配把阴影当成特征缩 ROI 并做预处理模板只留轮廓现象产品定位偶尔丢失或者把相似的工件误识别为目标把光源高度换一个位置后原来能通过的模板突然大面积失配。原因模板是从一张带有特定光斑和阴影的图上截取的算法在匹配时把阴影的梯度也当作特征纳入了模板。光照分布一变阴影位置一变模板分数立刻下降。这是典型的模板过拟合不是匹配算法的问题。解决把模板 ROI 缩小到只覆盖轮廓本身不包含大块阴影区域在工具链前部增加预处理步骤比如中值滤波或对比度增强采集不同光照角度下的多张工装图寄存模板库做多模板匹配。物理打光问题永远优先解决打光再好的匹配算法也救不了随光照漂移的特征。4.5 换电脑打开工程崩溃或路径断中文路径、依赖库和授权一起背锅现象工程文件拷到另一台电脑打开直接报缺库错误或者提示找不到图像资源更隐蔽的是工程能打开但无法采集。原因工程目录带了中文名或引用的图像资源是绝对路径换电脑后路径断了新电脑的相机 SDK 版本和软件不匹配运行库缺失授权文件绑定了旧电脑的网卡或加密锁无法在新机器上激活采集通道。解决工程从第一天起就建立在全英文根目录下工程内只引用相对路径交付时把运行时依赖库和对应版本的相机 SDK 安装包一并交付授权重新绑定后确认检测通道可见再做其他测试。我交付项目时的固定做法是把工程目录、运行库安装包、授权说明放进同一个文件夹谁换电脑都不会缺东西。5. 进阶用离线跑批把视觉调试从玄学变成可回退的活5.1 建“现场图像归档”目录让每次调试都有后悔药调参最怕的是“改好了但不知道改的是什么”。验证参数是否有效最高效的办法是离线重放现场图像。这要求第 2 章里养成存原始图的习惯发挥作用。我每个班次结束时会把当天图像集中归档避免次日调参时旧数据被覆盖。# 按日期生成归档目录保存当天所有原始图 $dest D:\VisionArchive\$(Get-Date -Format yyyyMMdd_HHmmss) New-Item -ItemType Directory -Force -Path $dest | Out-Null Copy-Item D:\VisionProject\images\*.bmp $dest 已归档图像数: (Get-ChildItem $dest).Count路径按你的实际工程目录替换。归档的意义在于任何一次参数改动都可以拿同一批历史图像重新跑一遍对比改动前后的判定结果。没有归档调试就是凭记忆翻车了都没有证据找回原来的参数组合。5.2 统计误杀率与漏检率一次只动一个参数离线跑批时我准备一组标准图像集比如 100 张 OK 件和 30 张 NG 件把修改后的参数整批跑一遍导出的统计表只看两个数漏检率NG 判成 OK和误杀率OK 判成 NG。如果漏检率下降但误杀率上升说明阈值调严了需要根据产线更怕哪种情况做取舍。视觉调试没有“全对”只有“在可接受范围内”。换参数时一次只动一个。光源、曝光、阈值、ROI 四个变量一次只改一项改两项以上跑出来的结果你永远不知道是哪一项起了作用。这个习惯能让你在出问题时有明确回退路径。我参与某次视觉工位调试时白天把参数调到完全稳定夜班之后第二天误杀爆增。查到最后是夜班调整了补光灯亮度但当时没有做图像归档拿不出对比证据只能重新调一轮参数。自那以后我定了个规矩视觉参数调到稳定立刻把原图、工程配置、跑批记录三样按时间戳存一次档。后面谁动了光源或夹具先回放对比再决定要不要动软件里的任何一个数字。这个过程多花十分钟却能省掉后面一整天的盲目重调。希望这个习惯对你也有用。本文还有配套的精品资源点击获取