跳到主要内容

AI 驱动文档

您想了解什么?

训练分割器

本指南介绍如何设置和配置 OV80i 分割功能,以自动检测、测量和分析零件中的特定特征或缺陷。当您需要识别不规则形状、测量面积或检测简单分类无法处理的特定模式时,请使用分割功能。

视频指南

观看本主题的实际操作:如何在几分钟内创建分割程序

何时使用分割: 表面缺陷、液体泄漏、不规则形状、面积测量、模式检测,或任何需要像素级精度的特征。

开始之前​

您将需要​

  • 已设置并连接的 OV80i 相机系统
  • 具有您想要分割的特征的测试零件(例如,带有铅笔标记的纸张)
  • 适合您特定应用的良好光照条件
  • 15-20 张用于训练的样本图像

第一步:创建分割程序​

1.1 开始新程序​

  1. 导航至 All Recipes 页面
  2. 点击 + New Recipe(右上角)

新建程序按钮

  1. 输入程序名称: 使用描述性名称,如 "Pencil_Mark_Detection" 或 "Surface_Defect_Segmentation"
  2. 选择程序类型: 从下拉菜单中选择 "Segmentation"
  3. 点击 OK 创建

1.2 激活程序​

  1. 在列表中找到您的程序(显示为 "Inactive")
  2. 点击 Activate
  3. 点击 Activate and go to editor 确认并启动程序编辑器

激活程序按钮

✅ 结果: 程序现在为 "Active" 状态,并显示程序编辑器。

第二步:配置相机设置​

2.1 打开图像配置​

  1. 点击 Configure Imaging(左下角)

配置图像

2.2 优化分割的对焦​

对焦对准确的边缘检测至关重要:

  1. 将测试零件定位在相机视野中
  2. 转动镜头对焦环,直到边缘清晰锐利
  3. 使用不同的零件进行测试,以确保在整个范围内保持一致的对焦
提示
  • 对焦于缺陷/特征将出现的表面
  • 确保整个感兴趣区域清晰对焦
  • 对于分割来说,轻微过锐比模糊对焦更好

2.3 设置最佳曝光​

适当的曝光可确保一致的特征检测:

  1. 调整曝光以获得均衡的照明
  2. 避免过度曝光的区域(纯白色区域)
  3. 确保特征可见且具有良好的对比度

分割曝光指南:

  • 特征应与背景形成清晰的对比
  • 避免可能被误认为缺陷的阴影
  • 使用不同的零件条件进行测试(干净、脏污、磨损)

2.4 配置 LED 照明模式​

根据要分割的对象选择照明:

特征类型推荐照明原因
表面缺陷明场均匀照明可显示表面不规则性
划痕/裂缝侧光产生阴影,突出线性缺陷
凸起特征暗场使凸起区域从背景中突出
液体泄漏侧光显示表面纹理差异

2.5 调整 Gamma 以增强特征​

  1. 增大 Gamma 以增强特征与背景之间的对比度
  2. 在查看目标特征时测试不同的值
  3. 找到使特征最易区分的设置

2.6 保存配置​

  1. 在实时预览中检查设置
  2. 点击 Save Imaging Settings

Save Settings

✅ 检查点: 特征应清晰可见,对比度良好。

第三步:设置模板与对齐​

3.1 导航至模板部分​

在面包屑菜单中点击 "Template Image and Alignment"

3.2 配置对齐(可选)​

Template and alignment

在本示例中,我们将跳过对齐:

  1. 如果零件位置始终一致,选择 Skip Aligner
  2. 点击 Save

Template image

何时使用对齐器: 当零件到达时位置或方向存在变化,且会影响分割精度时启用。

第四步:定义检测区域​

4.1 导航至检测设置​

在面包屑菜单中点击 "Inspection Setup"

4.2 设置感兴趣区域 (ROI)​

ROI 定义了分割发生的位置:

  1. 在相机视野中放置一个测试零件
  2. 拖动 ROI 角点以框定检测区域
  3. 合理调整 ROI 大小:
    • 包含所有可能出现特征的区域
    • 排除不必要的背景区域
    • 在预期特征位置周围留出小的缓冲空间

ROI Setup

4.3 分割 ROI 最佳实践​

应该做不应做
覆盖整个检测表面包含无关的背景物体
在边缘周围留出缓冲空间使 ROI 过小而无法容纳特征变化
考虑零件位置的变化与夹具或工装重叠
使用最大的预期特征进行测试包含带有永久性标记的区域

4.4 保存 ROI 设置​

  1. 验证 ROI 覆盖所有目标区域
  2. 点击 Save

第五步:标注训练数据​

5.1 导航至 Label And Train​

在面包屑菜单中点击 "Label And Train"

5.2 配置检测类别​

  1. 在 Inspection Types 下点击 Edit
  2. 将类别重命名以匹配您的特征(例如 "Pencil Mark"、"Surface Defect"、"Spill Area")
  3. 选择类别颜色以便视觉识别
  4. 保存更改

5.3 捕获并标注训练图像​

您至少需要 10 张已标注的图像,但推荐 15-20 张:

图像捕获流程​

  1. 将第一个测试零件放置在检测区域内
  2. 使用相机界面拍摄图像
  3. 使用画笔工具在目标特征上进行涂抹
  4. 准确涂抹:
    • 覆盖整个特征区域
    • 保持在特征边界内
    • 不要涂抹背景区域
    • 使用一致的标注方法
  5. 点击 Save Annotations
  6. 对下一个零件重复此操作

Label and Train

标签标注最佳实践​

良好标注不良标注
精确的特征边界边缘绘制粗糙
一致的特征定义标准不一致
完整的特征覆盖遗漏特征区域
干净的背景(未绘制)意外绘制到背景

5.4 训练数据多样性​

确保您的训练集包含:

  • 不同的特征尺寸
  • 各种特征强度
  • ROI 内的多个位置
  • 不同的光照条件(如适用)
  • 边缘情况和临界示例

5.5 训练数据质量检查​

  1. 审查所有已标注的图像
  2. 验证标注方式的一致性
  3. 删除任何标注错误的示例
  4. 必要时添加更多示例

第六步:训练分割模型​

6.1 启动训练流程​

  1. 标注完成后点击 Return to Live
  2. 点击 Train Segmentation Model

Start Training

6.2 配置训练参数​

  1. 设置迭代次数:
    • 快速训练: 50-100 次迭代(5-10 分钟)
    • 生产质量: 200-500 次迭代(15-30 分钟)
    • 高精度: 500+ 次迭代(30+ 分钟)
  2. 点击 Start Training

6.3 监控训练进度​

训练进度显示:

  • 当前迭代次数
  • 训练准确率百分比
  • 预计完成时间

Training

训练控制:

  • 中止训练: 出现问题时停止
  • 提前完成训练: 准确率达到要求时停止

Training 2

提示
  • 85% 准确率通常适用于生产
  • 训练在达到目标准确率时自动停止
  • 更多的训练数据往往比更多的迭代次数更有效

第七步:测试分割性能​

7.1 访问实时预览​

  1. 训练完成后点击 Live Preview
  2. 使用各种零件进行测试:
    • 已知合格零件(应显示无/极少分割)
    • 已知缺陷零件(应突出显示缺陷)
    • 边缘情况和临界示例

Live preview

7.2 评估结果​

检查分割质量:

指标良好表现需要改进
准确性稳定地识别真实特征遗漏明显特征
精确度误报较少大量背景区域被高亮
边缘质量干净、准确的边界粗糙或不准确的边缘
一致性重复测试结果相似结果差异很大

7.3 结果不佳故障排除​

问题可能原因解决方案
遗漏特征训练数据不足添加更多标注示例
误报光照/对比度差改善图像设置
边缘粗糙图像质量差改善对焦/光照
结果不一致训练多样性不足添加更多多样化示例

第 8 步:配置通过/失败逻辑​

8.1 访问 IO模块​

  1. 确保 AI 模型显示为绿色(已训练状态)
  2. 通过面包屑菜单导航至 IO模块

8.2 移除默认逻辑​

  1. 删除 Classification Block Logic 节点
  2. 准备构建自定义分割逻辑

8.3 构建分割流程​

使用以下组件创建 Node-RED 流程:

  1. 从左侧面板拖动节点:
    • Function 节点(用于逻辑)
    • Debug 节点(用于测试)
    • 最终的 Pass/Fail 节点
  2. 使用连线连接节点

NodeRed

8.4 根据需求配置逻辑​

选项 A:未检测到缺陷时通过​

用例: 任何检测到的特征均视为失败的质量检测

Function 节点代码:

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

选项 B:仅在缺陷较小时通过​

用例: 接受尺寸低于阈值的轻微缺陷

Function 节点代码:

const threshold = 500; // Adjust pixel count threshold
const allBlobs = msg.payload.segmentation.blobs;
const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold);
msg.payload = allUnderThreshold;
return msg;

选项 C:缺陷总面积较小时通过​

用例: 接受缺陷总面积有限的部件

Function 节点代码:

const threshold = 5000; // Adjust total pixel threshold
const allBlobs = msg.payload.segmentation.blobs;
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0);
msg.payload = totalArea < threshold;
return msg;

8.5 配置 Function 节点​

  1. 双击 Function 节点
  2. 从上述示例复制相应代码
  3. 粘贴到 "On Message" 选项卡
  4. 根据您的应用调整阈值
  5. 点击 Done

8.6 部署并测试逻辑​

  1. 点击 Deploy 以激活逻辑
  2. 导航至 HMI 进行测试
  3. 使用已知的合格件和不合格件进行测试
  4. 验证通过/失败结果是否符合预期

第 9 步:生产验证​

9.1 全面测试​

使用以下项测试分割系统:

测试用例预期结果失败时的操作
干净部件通过(无分割)调整阈值或重新训练
轻微缺陷根据您的标准通过/失败优化逻辑参数
严重缺陷失败(清晰的分割)检查模型准确性
边缘情况行为一致添加训练数据

9.2 性能验证​

监控以下指标:

  • 每次检测的处理时间
  • 多次测试的一致性
  • 生产照明条件下的准确性
  • 长时间运行的可靠性

9.3 最终调整​

如果性能不理想:

  1. 为边缘情况添加更多训练数据
  2. 调整逻辑中的阈值
  3. 改善成像条件
  4. 通过额外迭代重新训练模型

成功!您的分割系统已就绪​

您现在拥有一个可正常工作的分割系统,能够:

  • 自动检测特定特征或缺陷
  • 以像素级精度测量面积
  • 根据您的需求应用自定义通过/失败逻辑
  • 通过 I/O 控制与生产系统集成

高级配置选项​

自定义阈值逻辑​

对于复杂的验收标准,可组合多个条件:

const smallThreshold = 200;
const largeThreshold = 1000;
const maxTotalArea = 3000;

const allBlobs = msg.payload.segmentation.blobs;
const smallBlobs = allBlobs.filter(blob => blob.pixel_count < smallThreshold);
const largeBlobs = allBlobs.filter(blob => blob.pixel_count > largeThreshold);
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_c