跳到主要内容

使用 Segmenter

本教程将引导您使用 OV20i 的 AI 驱动分割功能创建一个完整的分割检测流程。您将学习如何通过让相机逐像素识别并测量这些特征来检测和分析铅笔痕迹、划痕或其他缺陷。

视频指南

请查看本主题的实际演示: 如何在几分钟内创建 segmentation 配方

备注

OV10i 不具备 segmentation 功能。

您将学习:

  • 如何从头到尾设置 segmentation 配方
  • 如何训练 AI 模型以识别特定特征
  • 如何基于分割结果配置通过/不通过逻辑
  • 如何优化分割在生产中的性能

实际应用: 本教程以铅笔痕迹检测为示例,但相同原理同样适用于检测划痕、裂纹、污染,或任何可视化区分的特征。

先决条件

  • OV20i 摄像头系统已搭建并连接
  • 具备要检测的样品部件(如带铅笔痕迹的纸张)
  • 对 AI 训练概念有基础理解
  • 具备 Recipe Editor 和 Node-RED 功能访问权限

教程概览

我们将构建的内容: 一个能够检测纸张上铅笔痕迹并根据检测到的标记数量来判定通过/不通过的分割模型。

耗时: 45-60 分钟(含训练时间)

掌握的技能: AI 模型训练、分割标注、通过/不通过逻辑配置

第 1 步:创建一个新的 Segmentation 配方

1.1 启动一个新配方

  1. 所有配方 页面,在右上角点击 "+ New"
  2. 将出现 Add A New Recipe 对话框
  3. 为您的配方输入一个描述性的 Name(例如 "Pencil_Mark_Detection")
  4. 从下拉菜单中选择 "Segmentation" 作为 Recipe Type
  5. 点击 "OK" 创建新配方

为何选择 Segmentation? 与识别整个对象的分类不同,分割在图像中定位并测量特征,使其非常适用于缺陷检测、污染分析或测量覆盖区域。

image.png

1.2 启用并打开 Recipe Editor

  1. 您的新配方将在 所有配方 页面 显示为 "Inactive"
  2. 在配方右侧选择 "Activate" 来启用 Activate button.png
  3. 点击 "Activate and go to editor" 以确认并启动 Recipe Editor

检查点: 面包屑导航中应显示带有分割配方名称的 Recipe Editor 界面。

第 2 步:配置相机成像

2.1 进入成像设置

  1. 在 Recipe Editor 中,点击左下角的 "Configure Imaging"
  2. 这将打开成像配置页面,您将在其中优化相机设置

image.png

2.2 Optimize Focus Settings

  1. 在相机的视野内放置一张带铅笔标记的样本纸
  2. 使用 对焦滑块 以使铅笔标记清晰对焦
  3. 也可以手动输入对焦值以获得更高的精度
  4. 如可用,使用 对焦视图 以查看边缘高亮和对焦分数

对焦提示:

  • 将对焦放在将出现缺陷的表面
  • 确保铅笔标记清晰、轮廓分明
  • 更高的对焦分数表示更高的对焦质量

2.3 Configure Exposure Settings

  1. 调整 曝光 滑块以获得合适的亮度
  2. 铅笔标记应清晰可见,纸张不过曝
  3. 以自动设置开始,按需要进行微调
  4. 监控实时预览以实时查看变化

曝光准则:

  • 铅笔标记应与纸张形成良好对比
  • 避免过曝导致细微标记被冲淡
  • 确保整个检测区域的照明一致

2.4 Set Up LED Lighting

  1. 选择适合您应用的 LED 灯光模式
  2. 对铅笔标记而言,通常均匀照明效果最佳
  3. 调整 LED 灯光强度 以尽量减少阴影和眩光
  4. 如有反射问题,尝试不同的灯光模式

2.5 Adjust Gamma and Contrast

  1. 细调 Gamma(伽马) 以增强标记与背景之间的对比度
  2. 更高的伽马值可使细微的铅笔标记更清晰可见
  3. 较低的伽马值在干净区域可降低噪声
  4. 平衡伽马以同时优化缺陷可见性与背景清晰度

2.6 Save Imaging Settings

  1. 当所有设置优化完成后,点击 “保存成像设置”
  2. 相机配置现已为该配方保存
  3. 实时预览应显示清晰且对比度良好的图像

检查点: 您的相机应能生成清晰的图像,使铅笔标记能与纸张背景清晰区分

Step 3: Configure Template and Alignment

3.1 Navigate to Template Image and Alignment

  1. 在面包屑菜单中点击 “配方名称” 以返回到配方编辑器
  2. 从菜单中选择 “模板图像与对齐”

3.2 Skip Aligner for This Tutorial

  1. 由于我们要在整张纸上检测特征,请点击 “跳过对准器”
  2. 这样会禁用基于位置的对齐并使用整张图像
  3. 点击 “保存” 以应用更改

何时使用对准器(Aligner): 当需要在可能移动或旋转的部件的特定位置检测特征时,请启用对准器。对于像铅笔标记这类整张纸的检测,通常跳过对准器是合适的。

image.png

Step 4: Set Up Inspection Region

4.1 Navigate to Inspection Setup

  1. 返回到配方编辑器并选择 “检查设置”
  2. 这是您将定义要分析的图像区域的位置

4.2 Configure Region of Interest (ROI)

  1. 您将看到相机视野的预览
  2. 拖动 ROI 框的角点 以调整其大小和位置
  3. 对铅笔标记的检测通常覆盖整张纸区域
  4. 确保 ROI 覆盖铅笔标记可能出现的所有区域

ROI 最佳实践:

  • 包含可能出现缺陷的所有区域
  • 排除如边缘或背景等不应分析的区域
  • 使 ROI 足够大以捕捉部件定位的差异
  • 避免包含文本、徽标或其他预期标记

4.3 保存 ROI 配置

  1. 一旦 ROI 位置正确,请单击 "Save"
  2. 检测区域现已为您的分割模型定义完毕。

第 5 步:Label and Train

5.1 导航至 Label and Train

  1. 返回到 Recipe Editor 并选择 "Label and Train"
  2. 这是您将教 AI 如何识别铅笔痕迹的地方

image.png

5.2 配置 Inspection Class

  1. Inspection Types 下,点击 "Edit"
  2. 将类别重命名为 "Pencil Mark"(或您的特定缺陷类型)
  3. 为检测到的痕迹可视化选择一个醒目的 color
  4. 点击 "Save" 以应用更改

5.3 捕获训练图像

  1. 对具有不同铅笔标记的纸张拍摄至少 10 张图像
  2. 调整训练示例:
    • 不同尺寸和形状的铅笔痕迹
    • 浅色和深色痕迹
    • 纸张上的不同位置
    • 不同密度的痕迹

训练图像提示:

  • 包含微妙和明显的标记
  • 捕捉您将遇到的各种照明条件
  • 在每张图像中包含无标记的干净区域
  • 确保图像能代表生产条件

5.4 标注训练图像

  1. 对每张训练图像,使用 Brush tool 在铅笔痕迹上进行描绘
  2. 仅绘制铅笔痕迹 - 避免标记纸张或其他特征
  3. 标注要准确且完整
  4. 每张图像完成后,点击 "Save Annotations"

标注最佳实践:

  • 在将哪些内容标注为 "pencil marks" 时保持一致
  • 包含完整的痕迹,而不仅是其中的一部分
  • 不要标注如文本或标志之类的预期标记
  • 使用稳定、细致的笔触以获得准确边界

5.5 审查您的标注

  1. 请对所有标注图像进行再次核对以确保准确性
  2. 查找遗漏的标记或标注错误的区域
  3. 对需要修正的图像重新标注
  4. 高质量的标注可提升模型性能

第 6 步:训练分割模型

6.1 启动训练过程

  1. 一旦您标注了至少 10 张图像,单击 "Return to Live"
  2. 单击 "Train Segmentation Model"
  3. 输入用于训练的 Number of Iterations

迭代指南:

  • 从 100-200 次迭代开始进行初始训练
  • 更多迭代通常能提高准确性,但耗时更长
  • 监控训练进度并根据需要进行调整
  • 在准确性要求与训练时间之间取得平衡

image.png

6.2 监控训练进度

  1. 点击 "Start Training" 以开始该过程
  2. 将显示一个训练进度模态框,显示:
    • 当前迭代次数
    • 训练准确度百分比
    • 剩余估计时间

6.3 训练控制选项

在训练期间,您可以:

  • Abort Training - 如需变更,请中止训练
  • Finish Training Early - 当准确度足够时停止训练
  • Monitor Progress - 观察准确性在迭代中的提升

训练提示:

  • 达到目标准确度时,训练将自动结束
  • 更高的准确度百分比表示更好的模型性能
  • 如果准确度趋于停滞,您可能需要更多训练数据

6.4 评估训练结果

  1. 训练完成后,回顾最终准确率
  2. 点击 "Live Preview" 以查看实时分割结果
  3. 使用新样本进行测试以验证模型性能

成功指标:

  • 铅笔标记以您选择的颜色高亮显示
  • 未被标记的区域保持干净
  • 检测在不同类型的标记之间保持一致
  • 模型对新/未见样本的响应良好

第 7 步:配置 Pass/Fail 逻辑

7.1 导航到 IO Block

  1. 返回到 Recipe Editor,并点击 "Configure I/O",或从面包屑导航中选择 "IO Block"

7.2 设置 Node-RED Flow

  1. Delete the existing Classification Block Logic 节点
  2. 从左侧调色板拖入:
    • All Block Outputs 节点(如果尚未存在)
    • Function 节点
    • Final Pass/Fail 节点
  3. 连接节点:All Block Outputs → Function → Final Pass/Fail

image.png

7.3 配置 Pass/Fail 逻辑

双击 Function 节点并从以下逻辑示例中选择一个:

选项 1:若未检测到缺陷则通过

// Pass if no pencil marks are found
const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length <1;
msg.payload = results;
return msg;

选项 2:若所有标记都较小则通过

// Pass if all marks are smaller than threshold
const threshold = 500; // pixels
const allBlobs = msg.payload.segmentation.blobs;
const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold);
msg.payload = allUnderThreshold;
return msg;

选项 3:若总覆盖率较低则通过

// Pass if total marked area is below threshold
const threshold = 5000; // total pixels
const allBlobs = msg.payload.segmentation.blobs;
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0);
msg.payload = totalArea < threshold;
return msg;

7.4 部署并测试逻辑

  1. 点击 "Done" 保存函数
  2. 点击 "Deploy" 以激活逻辑
  3. 导航至 HMI 以测试您的 pass/fail 逻辑

测试您的逻辑:

  • 对未标记的样本进行测试(应通过)
  • 对轻度标记的样本进行测试(应基于您的标准执行 pass/fail)
  • 对严重标记的样本进行测试(应失败)
  • 验证结果是否符合您的预期

第 8 步:优化与验证

8.1 使用生产样本进行测试

  1. 将多份测试样本输入到您的检测流程中
  2. 验证检测准确度是否符合您的要求
  3. 检查 pass/fail 逻辑是否正确工作
  4. 记录任何问题或边缘情况

8.2 微调模型性能

如果检测不一致:

  • 增加更多包含多样示例的训练图像
  • 提高标注质量和一致性
  • 调整成像设置以实现更好的对比度
  • 使用更多迭代进行重新训练

如果 pass/fail 逻辑需要调整:

  • 修改 Node-RED 函数中的阈值
  • 测试不同的逻辑方法
  • 考虑用于复杂决策的多重标准
  • 在生产要求下进行验证

8.3 生产验证

  1. 在实际条件下,对真实生产部件进行测试
  2. 与质量团队验证以确保标准与要求匹配
  3. 记录性能指标,如检测准确率和误报率
  4. 设置监控以持续跟踪性能

步骤 9:理解分割结果

9.1 分割数据结构

您的分割结果包括:

  • Blobs:单个检测特征(铅笔标记)
  • Pixel Count:每个检测特征的大小
  • Location Data:特征的定位信息
  • Confidence Scores:模型对每个检测的置信度

9.2 使用分割数据

您可以基于以下方面创建复杂的合格/不合格逻辑:

  • Number of defects 检测到的缺陷数量
  • Size of individual defects(像素计数)单个缺陷的大小
  • Total defect area(像素计数之和)总缺陷面积
  • Defect location(缺陷出现的位置)缺陷位置
  • Defect shape characteristics(如需要用于高级应用)缺陷形状特征

成功!您的分割模型已完成

您的 OV20i 分割检测现在可以:

Automatically detect pencil marks(或您特定的特征)在图像中

Measure the size and quantity 检测到的特征的尺寸和数量

Make pass/fail decisions 基于您特定的标准

Provide detailed information 关于每个检测特征的详细信息

Adapt to variations 在标记大小、形状和位置方面

关键要点

Segmentation vs. Classification:

  • Segmentation 在图像中发现并衡量特定特征
  • Classification 识别整个对象或总体条件
  • 将分割用于缺陷检测、污染分析或覆盖度测量

培训最佳实践:

  • 高质量标注比数量更重要
  • 在训练集中包含多样化示例
  • 使用生产样本进行彻底测试
  • 监控并在需要时重新训练

合格/不合格逻辑:

  • 从简单准则开始,必要时增加复杂性
  • 使用边缘情况和边界样本测试逻辑
  • 记录您的准则以保持一致性
  • 考虑多个因素以实现稳健的决策

下一步

现在您已完成第一步分割模型:

  1. Apply to other use cases - 尝试检测不同类型的缺陷或特征
  2. Integrate with production systems - 与生产系统集成
  3. Set up data collection - 设置数据收集
  4. Train operators - 培训操作员
  5. Plan maintenance - 计划维护

🔗 相关参考