AI 驱动文档
您想了解什么?
测量(尺寸检测)
测量模型将 OV80i 从缺陷检测器转变为尺寸检测站。它不再问*"这个零件是好是坏?",而是问"这个零件的直径、间隙或角度是多少毫米?"* — 并给出一个可以与公差进行通过/失败比较的数值。
请勿使用标准(入射中心)C 接口镜头运行测量程序。 标准镜头会引入透视畸变,并且放大倍率会随工作距离而变化 — 距离相机 1 mm 更近的零件会明显测得更大,画面边缘附近的特征与中心位置的特征测量结果不同。您得到的数值误差将远大于典型公差,并且没有任何标定步骤可以纠正这一点。
远心镜头在整个视场范围内以及在工作距离的小幅变化下都能保持放大倍率恒定。它是让尺寸检测真正准确的唯一硬件。
如果您的安装中没有远心镜头,请到此为止 — 切换到 Classification 或 Segmentation 进行通过/失败式的检测,或联系 support@overview.ai 在继续之前选配合适的光学元件。
在底层,深度学习模型在图像中找到基本特征(边缘、圆、线段、弧线),然后计算这些基本特征之间或关于这些基本特征的测量值(孔的半径、两条边之间的距离、两条线之间的角度)。由于相机以 px/mm 进行了标定,每个结果都以真实世界的单位输出。

学习目标
完成本页内容后,您将能够:
- 判断何时应选择 Measurement 模型(相对于 Classification 或 Segmentation)
- 标定相机,使一个像素映射到已知的毫米值
- 在零件上绘制基本图元(圆、线、点、弧),并将其转换为测量值(半径、距离、角度)
- 捕获并标注训练图像,使 Measurement 模型能够可靠地找到基本图元
- 训练、测试和部署 Measurement 模型
- 将结果接入通过/失败逻辑,并在相机屏幕上的操作员面板(HMI,即 Human-Machine Interface 的缩写)上读取结果
何时使用 Measurement
| 用例 | 合适的模型 |
|---|---|
| 孔径是否在 9.0 ± 0.1 mm 范围内? | Measurement |
| 两个零件之间的间隙是否小于 0.5 mm? | Measurement |
| 这个支架弯曲的角度是多少? | Measurement |
| 标签是否存在或缺失? | Classification |
| 表面是否有划痕? | Segmentation |
| 零件上的文字内容是什么? | OCR |
只要下游系统需要的是以物理单位表示的数值而不是类别标签,Measurement 都是合适的工具。如果您的规格表中写有公差,那就需要 Measurement。
Segmentation 可以给出特征以像素为单位的面积,但它不会以亚像素精度对齐边缘,也不提供几何基本图元。如果您只需要"这块污渍是否大于 X cm²",Segmentation 可能就够用了。如果您需要"这个孔的半径是 4.31 mm",请使用 Measurement。
测量的工作原理
测量管道按顺序分为四个阶段:
- 捕获并对齐。 相机触发、捕获一帧图像,并运行对齐器将零件锁定到模板方向。每次测量都在对齐后的帧中计算,因此即使零件旋转了 10°,测量结果仍然相同。
- 检测基元。 训练好的测量模型在每个 ROI(感兴趣区域 — 您在图像上绘制的矩形,告诉相机"看这里")内查找,并输出几何基元:边缘段、弧/圆 或 直线。每个程序都有一个 主 ROI,外加可选的 子 ROI,用于放大查看特定特征。
- 计算测量值。 您定义的每个测量项(例如"圆 1 的半径"、"直线 A 到直线 B 的距离")都会根据检测到的基元进行评估。由于像素到毫米的校准,结果以毫米(或您选择的单位)报告。
- 通过/失败与输出。 这些数值被馈送到 IO 逻辑模块,其中 Node-RED 函数根据您的容差判定 PASS 或 FAIL,结果将推送到 HMI、PLC(车间控制器)、MQTT 以及任何其他已连接的系统。
如果成像不稳定,对齐就会漂移。如果对齐漂移,模型每次看到的基元位置就会不同。如果基元检测抖动,测量结果就会噪声大。在问题出现的最早阶段就修复它。 重新调整通过/失败阈值无法修复糟糕的对齐,重新训练模型无法修复糟糕的成像。
第一步:创建测量程序
- 在浏览器中打开 OV80i 网页界面 (
http://<camera-ip>)。左侧栏显示 All Recipes、Recipe Editor、HMI 等。 - 单击左侧栏中的 All Recipes。
- 单击右上角的 + New。一个标题为 Add A New Recipe 的模态框将打开。
- 输入 Name(例如
Hole_Diameter_Check)和可选的描述,然后单击 OK。 - 新程序会出现在列表中。单击其行上的 Activate,然后在确认对话框中选择 Activate and go to editor。
- 程序编辑器将打开。在顶部栏中,程序名称旁边,找到 程序类型组合框(默认为 Classification)。单击它并选择 Measurement。编辑器中的 AI 模块行现在会突出显示已准备好配置的 Measurement 模块。

每个程序只包含一个测量模型,但该模型可以在多个子 ROI 中承载许多基元和许多测量项。不要为每个尺寸创建单独的程序 — 将一个零件上的所有尺寸归到一个测量模型中,让它们共享相同的成像和对齐。
第二步:图像设置
在编辑器中单击 Configure Imaging 打开图像设置。这是每个程序都使用的同一图像设置面板 — 参见 图像设置基础 — 但测量有一个额外的要求:每个周期,零件都必须清晰对焦,无运动模糊。亚像素级的边缘精度依赖于此。

对测量最关键的设置:
- Exposure(曝光)。 将零件曝光设置得良好但不要过曝。饱和的高光会破坏边缘细节。
- Gain(增益)。 如果可以,将增益保持在 1。较高的增益会增加噪声,而噪声每次会使边缘偏移半个像素。
- Gamma(伽马)。 默认值 50 对大多数零件都合适。如果暗边缘难以辨识,可适当提高。
- Image Rotation(图像旋转)。 保持"No Rotation",除非您的固定装置迫使相机侧装。
- Trigger Settings(触发设置)。 Manual HMI Trigger 适合用于设置阶段。在生产时切换到数字传感器或 PLC 触发器。
长曝光 + 移动传送带 = 模糊的边缘。在 17 px/mm 的校准下,2 像素的模糊在您开始测量之前就已经引入 ±0.06 mm 的误差。要么用频闪灯冻结零件,要么将曝光时间降低到一帧内运动小于 1 像素的程度。
完成后单击 Save Imaging Settings。
第三步:将像素校准为毫米
这一步使测量有别于其他所有模块。如果不进行校准,相机只知道像素——而像素的大小在每次安装时都不同。校准告诉相机"传感器上的这么多像素等于现实世界中的这么多毫米"。
- 在图像设置中,点击右侧面板底部的 Reference Image Calibration。
- 捕获或上传一张包含已知尺寸的参考图像——通常是校准标靶、夹具上经过精密加工的特征,或者用卡尺测量过尺寸的已知合格零件。
- 打开 Measurement Calibration 部分。确认单位(默认
mm)。 - 点击 Measure on Image。在图像上点击两个跨越已知距离的点(例如,两个销钉之间的中心距,或量规销的直径)。
- 相机会报告测量的像素距离(例如 "Measured: 159 px")。输入以毫米为单位的实际值(例如
9.0)并点击 Finish。 - px/mm 值会自动填充——以下截图中的此程序,校准结果为 17.621 px/mm,这意味着零件上的一毫米占用约 17.6 个传感器像素。


px/mm 数值与镜头、工作距离和传感器绑定。如果您更换镜头、重新对焦、移动相机或更换夹具,请重新校准。校准偏差 1% 就意味着测量偏差 1%——对于 10 mm 的尺寸,这就是 0.1 mm 的纯系统误差,通常超过您的公差。
基于 2 mm 特征进行校准,会使任何指点误差比基于 10 mm 特征校准放大 5 倍。请始终使用画面中能完整容纳的最长已知尺寸进行校准。
第四步:模板图像与对齐
测量需要对齐。模型是针对零件上固定位置的基元进行训练的;如果零件发生平移或旋转,对齐器必须进行补偿,使模型仍能在相同的图像坐标中看到这些基元。
- 在程序编辑器中,点击 "Image Alignment & Inspection Setup" 下的 Template Image and Alignment。
- 在零件定位良好的情况下捕获一张干净的参考图像,然后在图像中零件可能出现的区域周围绘制 Search Area(青色框),并在零件本身周围紧密绘制 Template Region(黄色框)。
- 选择一种 Aligner Type:边缘丰富的零件使用 Classical,带纹理的零件使用 Deep Learning——请参阅 AI Aligner (Deep Learning) 了解决策矩阵。
- 调整 Rotation Range、Sensitivity 以及(针对 Classical 的)忽略区域,直至对齐在多次捕获中保持稳定。

AI 对齐器的 "Scale Invariant" 选项允许匹配器容忍距离相机稍近或稍远的零件。不要在测量程序上启用此选项。 尺度不变会悄悄地重新缩放画面以匹配模板,这意味着距离相机远 1% 的零件测量值会与处于正确距离的零件相同——而您的 px/mm 校准就突然失效了。请将 Scale Invariant 保持关闭,并改用机械夹具来控制工作距离。
对于查看整张图像的分割或分类程序,"Skip Aligner" 切换开关是可以的,但没有对齐器的测量程序在零件偏移一毫米时就会产生无意义的结果。请始终为测量配置对齐。
第五步:检测设置 — 主 ROI 与子 ROI
检测设置界面定义了 Measurement 模型应在对齐图像中的哪个位置进行查找。其中有一个主 ROI(覆盖整个感兴趣区域),以及可选的一个或多个子 ROI(聚焦于具体特征)。

- 添加 Measurement 模型时,主 ROI 框已经存在 — 拖动其角点,直至覆盖您要测量的区域。大多数程序使用单个主 ROI 来覆盖整个零件。
- 若要检测多个离散特征(例如支架两侧的两个孔),请为每个特征点击添加子 ROI,并将其紧贴在特征周围。
- 每个 ROI 都会获得该模型基元预测的独立副本。一个主 ROI 加五个子 ROI,意味着模型每次捕获时会运行六次。
紧贴单个孔的子 ROI 可让模型清晰地看到一个特征,使标注无歧义,并保持推理速度。一个覆盖十个孔的巨大主 ROI 意味着标注者必须在每张图像中区分十个基元,且模型需要忽略更多视觉噪声。
画布上方的工具栏提供 H / W / X / Y / ∠ 输入框以精确放置 ROI、对齐和分布按钮以均匀布置 ROI,以及边界框 + ROI 标签切换按钮以在工作时整理叠加层。右键点击任何 ROI 可弹出上下文菜单(复制、粘贴、锁定、删除)。
第六步:定义基元
通过点击编辑主 ROI(或在任意子 ROI 上点击编辑)打开基元编辑器。在此处绘制模型将学习查找的几何形状。每个 ROI 起始时会带有四个已锁定的系统基元 — 即 ROI 自身的上 / 下 / 左 / 右边缘 — 您可将其用作距离测量的参考几何,无需再绘制新内容。

可用的基元类型(左侧工具栏):
| 工具图标 | 基元类型 | 捕获内容 | 适用场景 |
|---|---|---|---|
| 直线 | 线段 | 一条直边 | 零件边缘、槽、参考 |
| 弧 / 半径 | 圆 | 半径 + 圆心 | 孔、销、圆角、曲线特征 |
将鼠标悬停在任意工具图标上可查看其名称;编辑器底部的状态栏会显示当前激活的工具 — 例如 "Tool: Arc — Click to place the first point"。
绘制基元的方法:
- 点击左侧工具栏中的工具图标(例如直线或半径/弧工具)。状态栏会显示当前激活的工具名称。
- 在图像上工具所需的点处点击。对于圆/弧,请在特征边缘周围点击三个点。对于直线,请点击两个端点。
- 基元会出现在右侧数据面板的基元部分中。
- 点击其名称旁的铅笔图标,将其重命名为有意义的名称(如
Hole_A、Top_Edge_of_Slot)。良好的命名可让后续的测量更易读。
画布上方的切换栏(构造线、基元、测量、标签、像素网格)控制在图像上叠加显示的内容 — 绘制时关闭以减少干扰,绘制完成后重新开启以进行验证。
绘制时将鼠标悬停在画布上,角落会出现一个 4 倍放大镜。亚像素级的边缘放置至关重要:一个偏移一个像素的基元,在 1000 个周期中累积放大后,决定了测量结果是可用还是充满噪声。
弧工具通过特征边缘上的三个点拟合一个圆。请将这三个点沿圆周均匀分布,而非集中在顶部。集中分布的三点会导致拟合不稳定,模型也会继承这种不稳定性。
第 7 步:定义测量
基元是原始几何图形;测量则是您真正关心的数值。每个测量引用一个或两个基元,并根据它们计算出一个数值。
可用的测量类型:
| 测量 | 输入 | 输出 |
|---|---|---|
| 半径 | 一个圆/弧 | 圆的半径(毫米) |
| 距离 | 两个基元(点到点、点到线、线到线) | 最短距离(毫米) |
| 长度 | 一条线段 | 线段长度(毫米) |
| 角度 | 两条线 | 两者之间的角度(度) |
| X / Y 位置 | 一个点 | 该点在对齐坐标系中的坐标 |
定义测量的方法:
- 在基元编辑器右侧的 Data Panel 中,展开 Measurements 部分。
- 点击 Measurements 部分顶部的 + / Add measurement 按钮。弹出一个小表单。
- 从下拉菜单中选择测量类型(半径 / 距离 / 角度 / 长度 / 等等)。
- 选择要引用的基元。半径测量需要一个圆;距离测量需要两个基元。
- 给测量起一个描述性名称(
Hole_A_Diameter、Slot_Gap)。此名称会显示在 HMI 上,也是您的 Node-RED Function 读取该值时使用的键,因此请保持稳定。 - 点击表单外部或按 Enter 键保存。新的测量出现在 Measurements 表中,并显示根据模板图像计算的实时数值。
您可以自由组合:单个 ROI 可以包含五个基元和由其派生的十个测量。上面的截图显示了一个 Circle 1 基元及其 Radius Circle 1 测量,报告值为 4.306 mm。
每个 ROI 自带的锁定 Top / Bottom / Left / Right Edge 基元是有效的测量输入。如果您需要"从槽底到 ROI 底部的距离",无需绘制新线 — 直接引用系统 Bottom Edge 即可。
第 8 步:标注训练图像
在模板上绘制基元只为模型提供一个示例。生产中至少需要 10–20 个示例,模型才能学会在真实世界的变化(光照漂移、表面划痕、颜色批次)下找到这些基元。
- 在程序编辑器中,点击顶部导航栏的 Measurement Block,或 AI模块下的 Measurement。
- 点击 Capture 抓取新帧,或点击 Import Capture 从库中导入。
- 对每张捕获图像,绘制与模板上相同的基元 — 在该零件每张新图像的相同位置上。
- 每张捕获图像标注完成后,点击 Save Annotations。
- 使用 Previous / Next 导航遍历每张捕获图像。

对同一位置上的同一零件捕获二十张图像,对模型的训练帮助甚微。覆盖一系列零件旋转、轻微位置偏移、光照变化和表面状况的十张捕获图像,能教给模型所需的全部内容。要有意识地变化。
如果 "Circle 1" 在第 1 张捕获图像中是左上角的孔,那么它在第 2 张捕获图像中也必须是左上角的孔。混淆命名基元所指的物理特征会教给模型矛盾信息,而这些矛盾会在生产中表现为预测噪声增加 10 倍。
第 9 步:训练模型
- 从 Measurement 模块视图或程序编辑器中,打开 训练 选项卡。
- 找到 measurement 行。确认 训练模式 — 对于 Measurement,Accurate 是默认且推荐的模式。还存在更快的模式用于快速迭代,但会牺牲精度。
- 单击该行上的 训练(或 全部训练 以训练程序中的每个模块)。
- Training AI Model 模态框会显示实时进度:Mean IoU(蓝色,上升中)、Loss(红色,下降中)以及迭代计数器(例如 200/200)。


需要关注的内容:
- 随着迭代次数增加,IoU 上升而 Loss 下降。如果两者在早期都呈现平坦状态,则需要更多图像或更好的标签。
- 右侧的缩略图网格显示训练裁剪图,并绘制了预测的图元(True Positive 为绿色、False Positive 为红色、False Negative 为蓝色)。快速浏览一下 — 如果某个裁剪图出现在红色/蓝色图例中,请检查其标签。
- 训练完成后会报告 Model Quality (IoU)。对于 Measurement,超过 70% 即可使用;超过 85% 则为优秀。
不要追求一次就训练出完美的模型。先用 10 张捕获图像进行训练,对新部件运行实时预览,观察预测在哪里发生偏差,然后针对失败模式再添加 5 张捕获图像并重新训练。三次短迭代胜过一次长迭代。

第 10 步:测试与验证
- 返回 Measurement 模块视图,开启实时预览模式。
- 使用 Test 按钮(或 HMI 中的 捕获)触发捕获,并观察预测的图元叠加到实时帧上。
- 将预测的尺寸与同一物理部件上的卡尺测量值进行比较。两者应在容差预算范围内一致。
- 移动部件(在对齐限制范围内),确认测量值在多次捕获中保持稳定。
相机告诉你 4.306 mm。拿起部件,用卡尺测量,看看是否也读到 4.3 mm。如果相机与卡尺的差异超过你的容差,问题几乎总是出在校准上(第 3 步)— 用夹具上最长的尺寸重新校准并再次尝试。
第 11 步:连接 pass/fail 逻辑
模型产生数值;IO 逻辑模块将这些数值转换为 PASS 或 FAIL。
- 在程序编辑器中,单击 Configure IO(或 IO 逻辑 选项卡)。
- 拖入一个 All Block Outputs 节点、一个 Function 节点和一个 Final Pass/Fail 节点。将它们连接起来。
- 双击 Function 节点并编写容差检查。下面是该逻辑的结构 — 测量结果位于
msg.payload中 Measurement 模块对应部分下,以你在 Primitive Editor 中设置的名称作为键。具体的 payload 结构可能在不同固件版本之间有所变化,因此在依赖这些字段名之前,请先接入一个 Debug 节点并检查实时的msg以确认字段名。
// PASS if hole radius is within 4.30 ± 0.10 mm
// Adjust the path below to match the payload from your camera's
// Debug node — the Measurement block emits an array of measurement objects
// each with a name and a numeric value in mm.
const measurements = msg.payload.measurement?.measurements ?? [];
const radius = measurements.find(m => m.name === 'Radius Circle 1');
if (!radius) {
msg.payload = false; // no result = fail
return msg;
}
const value = radius.value; // value in mm
const target = 4.30;
const tolerance = 0.10;
msg.payload = Math.abs(value - target) <= tolerance;
return msg;
- 单击 部署 以使流程上线。
Function 节点通过你在 Primitive Editor 中分配的名称来查找测量值。重命名某个测量值会导致流程中断,直到你更新该节点。一旦投入生产,请保持名称稳定。
对于需要检查多个尺寸的部件,使用 Array.every(...) 遍历一个由 {name, target, tolerance} 对象组成的列表。一个 Function 节点即可验证部件上的每个尺寸,任何单个失败都会使整个检测短路为 FAIL。
在 HMI 上读取结果
部署后,切换到 HMI 标签页。触发一次捕获后,实时视图会用预测的图元标注图像,通过/失败标记会切换为 PASS 或 FAIL,下方的测量表会显示每个尺寸,包括:
- Avg — 所有子 ROI 的聚合值(当同一测量在多个 ROI 中运行时很有用)
- Inspection Region — 主 ROI 或产生该值的子 ROI
- Search Area — 该值所属的对齐器上的搜索区域
- Value — 以 mm(或您的单位)表示的测量值
- Primitives — 计算该测量所使用的图元

根据需要切换叠加层的开关:
- Labels — 在图像上显示图元名称
- Blob Stats — 显示检测分数
- Heatmap — 叠加模型的置信度热图(用于调试"为什么选择那个点?")
工作示例
孔径检测
- 图元: 在子 ROI 中紧贴孔的一个 Circle
- 测量: Radius(结果以半径报告;如果需要直径,请在 Function 节点中乘以 2)
- Pass/fail:
Math.abs(radius - target) <= tolerance
两个部件之间的间隙
- 图元: 沿对面边缘的两个平行 Line/Segment 图元
- 测量: Distance, Line-to-Line
- Pass/fail:
gap >= min_gap && gap <= max_gap
孔到孔的间距
- 图元: 两个 Circle 图元,每个孔中一个
- 测量: Distance, Point-to-Point(中心之间)
- Pass/fail:
Math.abs(spacing - target) <= tolerance
支架的弯曲角度
- 图元: 两个 Line 图元,沿支架的每条臂各一个
- 测量: Angle, Line-to-Line
- Pass/fail:
Math.abs(angle - target_degrees) <= angle_tolerance
技巧与窍门
一旦校准完成,请物理锁定相机、镜头和零件夹具。任何移动都会悄无声息地使 px/mm 值失效。在对焦环上贴扭矩标签、在镜头座上涂螺纹胶,对于生产安装来说并不过分。
图元编辑器的 4 倍放大镜显示您正在点击的像素。标签中的边缘精度是生产中边缘精度的上限。不要点击边缘"附近"——放大后点击在边缘上。
在推广之前,捕获 30 帧以上涵盖通过和失败情况的图像,并通过程序回测进行运行。它会在几秒钟内对测试集运行整个程序,并报告每帧的测量值,这样您可以确认在 Function 节点中设置的容差实际能区分好坏零件,而不会产生误报。
重申页面顶部的警告:标准 C 口镜头会引入透视畸变,越靠近图像边缘越严重,且会随工作距离变化。**远心镜头是使尺寸检测准确的唯一关键硬件。**如果您的安装没有远心镜头,请勿使用测量模型。
测量模型视图不会自动保存。每捕获一两次后点击 Save Annotations——关闭标签页会丢失任何未保存的标签。
常见陷阱与故障排除
| 症状 | 可能原因 | 解决方法 |
|---|---|---|
| 相机读数为 4.3 mm,卡尺读数为 4.5 mm | 校准偏差 | 使用更长的参考尺寸重新校准;确认 px/mm 值没有改变 |
| 同一零件每个周期测量结果不同 | 对齐不稳定,或存在运动模糊 | 收紧模板/搜索区域,降低曝光,添加频闪光源,锁定夹具 |
| 预测跳到错误的特征上 | 训练捕获中基元标签不一致 | 重新标注捕获,确保"Circle 1"始终对应同一物理特征,重新训练 |
| 模型在不应识别的缺陷零件上找到基元 | 训练集中没有该缺陷的示例;模型尚未学会拒绝 | 添加 5 个以上缺陷捕获,将其标注为无基元(或将基元标注在正确位置),重新训练 |
| px/mm 值在无察觉的情况下改变 | 镜头被调焦、移动或更换 | 重新校准。锁定镜头。生产期间不要调焦 |
| 软件更新后测量结果严重偏差 | 图像旋转发生变化,或对齐模板丢失 | 打开图像设置确认图像旋转;如有需要重新捕获模板 |
| 程序运行缓慢(延迟较长) | 子 ROI 过多,或模型以 Fastest 模式运行但分辨率不足 | 合并 ROI,或以 Accurate 模式训练 |
如果您重命名基元、移动子 ROI、添加测量或更改搜索区域,请重新训练模型。训练与您定义的空间布局绑定;在不重新训练的情况下更改布局会导致模型在错误的位置查找。当发生这种情况时,训练页面会将模型标记为过期。