训练 Segmenter
本指南介绍如何设置和配置 OV80i segmentation 功能,以自动检测、测量并分析工件上的特定特征或缺陷。需要识别不规则形状、进行面积测量或检测无法通过简单分类处理的特定模式时,请使用 segmentation。
在实践中查看本主题的效果: 如何在几分钟内创建 segmentation 配方
何时使用 Segmentation: 需要像素级精度的场景,如表面缺陷、液体泄漏、形状不规则、面积测量、模式检测,或任何需要高精度特征分析的情况。
开始前
您需要什么
- OV80i 相机系统已设置并连接
- 带有要分割特征的测试件(例如带铅笔痕迹的薄片)
- 适用于您具体应用的良好照明条件
- 15-20 张用于训练的示例图像
第 1 步:创建 Segmentation 配方
1.1 开始新配方
- 导航到 All Recipes 页面
- 点击
+ New Recipe(右上角)
- 输入配方名称: 使用描述性名称,例如 "Pencil_Mark_Detection" 或 "Surface_Defect_Segmentation"
- 选择配方类型: 从下拉菜单中选择 "Segmentation"
- 点击
OK以创建
1.2 激活配方
- 在列表中找到你的配方(显示为 "Inactive")
- 点击
Activate - 点击
Activate and go to editor以确认并启动配方编辑器
✅ 结果: 配方现在为 "Active",且显示配方编辑器。
第 2 步:配置相机设置
2.1 打开成像配置
- 点击
Configure Imaging(左下角)

2.2 为 Segmentation 优化对焦
对焦对于准确的边缘检测至关重要:
- 在相机视图中放置测试件
- 调整对焦,直到边缘清晰锐利
- 用不同的工件进行测试,确保在范围内对焦一致
- 将焦点放在缺陷/特征将出现的表面
- 确保感兴趣区域的整个区域处于清晰对焦
- 略微过锐优于软焦,以实现 segmentation 的更好效果
2.3 设置最优曝光
正确曝光可确保特征检测的一致性:
- 调整曝光以实现均衡照明
- 避免过曝区域(纯白区域)
- 确保特征在良好对比度下可见
Segmentation 曝光指南:
- 特征应与背景具有清晰对比
- 避免阴影被误认为缺陷
- 使用各种工件条件(干净、污脏、磨损)进行测试
2.4 配置 LED 照明模式
根据要分割的对象选择照明:
| 特征类型 | 推荐照明 | 原因 |
|---|---|---|
| 表面缺陷 | 明场照明 | 均匀光照可显示表面不规则性 |
| 划痕/裂纹 | 侧光 | 产生阴影,突出线性缺陷 |
| 凸起特征 | 暗场照明 | 使凸起区域从背景中突出 |
| 液体溢出 | 侧光 | 显示表面纹理差异 |
2.5 调整 Gamma 以提升特征对比
- 增大 Gamma 以增强特征与背景之间的对比度
- 在查看目标特征时测试不同数值
- 找到设置 使特征最易区分
2.6 保存配置
- 在实时预览中查看设置
- 点击
Save Imaging Settings

✅ 检查点: 特征应在对比度良好的情况下清晰可见。
Step 3: Set Up Template and Alignment
3.1 导航至模板部分
在面包屑菜单中点击 "Template Image and Alignment"
3.2 配置对齐(可选)
![]()
本示例将跳过对齐:
- 选择
Skip Aligner如果部件位置始终一致 - 点击
Save

何时使用对齐器: 当零件以多样的位置或方向到达,可能影响分割准确性时应启用。
Step 4: Define Inspection Region
4.1 Navigate to Inspection Setup
点击 "Inspection Setup" 在面包屑菜单中
4.2 Set Region of Interest (ROI)
ROI 定义分割将发生的位置:
- 在相机视图中放置一个测试件
- 拖动 ROI 的角点 以框定检查区域
- 适当设置 ROI 大小:
- 包括可能出现特征的所有区域
- 排除不必要的背景区域
- 在预期特征位置周围留出小缓冲区

4.3 用于分割的 ROI 最佳实践
| 做 | 不要 |
|---|---|
| 覆盖整个检查表面 | 包含无关的背景对象 |
| 在边缘留出缓冲空间 | 让 ROI 太小以致特征变化无法覆盖 |
| 考虑部件定位变化 | 与夹具或工具重叠 |
| 使用最大的预期特征进行测试 | 包含具有永久标记的区域 |
4.4 保存 ROI 设置
- 验证 ROI 覆盖所有目标区域
- 点击
Save
Step 5: Label Training Data
5.1 导航至 Label And Train
点击 "Label And Train" 在面包屑菜单中
5.2 配置 Inspection Class
- 在 Inspection Types 下点击
Edit - 将类别重命名以匹配您的特征(例如 "Pencil Mark"、"Surface Defect"、"Spill Area")
- 为可视识别选择类别颜色
- 保存更改
5.3 捕捉并标注训练图像
您至少需要 10 张标注图像,建议 15-20 张:
图像采集过程
- 将第一件测试件放置在检查区域
- 使用相机界面拍照
- 使用画笔工具覆盖目标特征
- 准确涂抹:
- 覆盖整个特征区域
- 保持在特征边界内
- 不要涂抹背景区域
- 使用一致的标注方法
- 点击
Save Annotations - 对下一个部件重复上述步骤

标注最佳实践
| 良好标注 | 差标注 |
|---|---|
| 精确的特征边界 | 边缘涂抹不清 |
| 一致的特征定义 | 不一致的判定标准 |
| 完整的特征覆盖范围 | 缺失的特征区域 |
| 干净背景(未涂色) | 背景意外涂色 |
5.4 训练数据多样性
确保你的训练集包括:
- 不同的特征尺寸
- 不同的特征强度
- ROI 内的多个位置
- 不同的照明条件(如适用)
- 边界情况和边界示例
5.5 训练数据质量检查
- 审阅所有标注图像
- 验证一致的标注方法
- 删除任何标注错误的示例
- 如有需要,添加更多示例
Step 6: 训练分割模型
6.1 启动训练流程
- 点击
Return to Live,标注完成后 - 点击
Train Segmentation Model

6.2 配置训练参数
- 设置迭代次数:
- 快速训练: 50-100 次迭代(5-10 分钟)
- 生产质量: 200-500 次迭代(15-30 分钟)
- 高精度: 500 次及以上迭代(30 分钟以上)
- 点击
Start Training
6.3 监控训练进度
训练进度显示:
- 当前迭代次数
- 训练准确度百分比
- 预计完成时间

训练控制:
- 中止训练:如出现问题时停止
- 在达到目标准确度时提前结束训练:当准确度达到目标时停止

- 在生产环境中,85% 的准确度通常较好
- 训练会在达到目标准确度时自动停止
- 更多的训练数据通常比增加迭代次数更有效
Step 7: 测试分割性能
7.1 访问实时预览
- 点击
Live Preview,训练完成后 - 使用各种零件进行测试:
- 已知良品(应几乎不显示分割或无分割)
- 已知不良品(应突出缺陷)
- 边缘情况和边界示例

7.2 评估结果
检查分割质量:
| 指标 | 良好表现 | 需要改进 |
|---|---|---|
| 准确性 | 能稳定发现真实特征 | 易错过明显特征 |
| 查准率 | 极少误报 | 大量背景区域被高亮 |
| 边缘质量 | 边界干净、准确 | 边缘粗糙或不准确 |
| 一致性 | 重复测试结果相近 | 结果高度不稳定 |
7.3 解决差结果
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 缺失特征 | 训练数据不足 | 增加更多标注样本 |
| 误报 | 光照/对比度差 | 提高成像设置 |
| 边缘粗糙 | 图像质量差 | 提高对焦/光照 |
| 结果不一致 | 训练多样性不足 | 增加更多多样化样本 |
步骤 8:配置通过/不通过 逻辑
8.1 访问 IO Block
- 确保 AI 模型显示为绿色(训练完成状态)
- 通过面包屑导航进入 IO Block
8.2 删除默认逻辑
- 删除 Classification Block Logic 节点
- 准备构建自定义 segmentation 逻辑
8.3 构建 segmentation 流程
创建 Node-RED flow,包含以下组件:
- 从左侧面板拖拽节点:
- Function node(用于逻辑)
- Debug node(用于测试)
- Final Pass/Fail node
- 用连线将节点连接起来

8.4 根据您的需求配置 segmentation 逻辑
选项 A:若未检测到缺陷则通过
用例: 在质量检测中,检测到的任何特征即为不合格
Function Node 代码:
const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length <1; // Pass if no features found
msg.payload = results;
return msg;
选项 B:仅当缺陷较小才通过
用例: 接受低于尺寸阈值的轻微缺陷
Function Node 代码:
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 Node 代码:
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 Node
- 双击 Function 节点
- 从上面的示例中复制相应代码
- 粘贴到 On Message 选项卡
- 根据您的应用调整阈值
- 点击
Done
8.6 部署并测试逻辑
- 点击
Deploy以激活逻辑 - 前往 HMI 进行测试
- 使用已知良品与不良品进行测试
- 验证通过/不通过结果是否符合预期
步骤 9:生产验证
9.1 全面测试
对 segmentation 系统进行以下测试:
| 测试用例 | 预期结果 | 失败时的处理措施 |
|---|---|---|
| 干净部件 | 通过(无分割) | 调整阈值或重新训练 |
| 轻微缺陷 | 通过/不通过按您的标准 | 微调逻辑参数 |
| 重大缺陷 | 失败(清晰分割) | 检查模型准确性 |
| 边缘情况 | 行为稳定 | 添加训练数据 |
9.2 性能验证
监控以下指标:
- 每次检测的处理时间
- 多次测试的一致性
- 生产照明下的准确性
- 长时间运行的可靠性
9.3 最终调整
如果性能不令人满意:
- 为边缘情况增加更多训练数据
- 在逻辑中调整阈值
- 改善成像条件
- 在增加迭代次数的基础上重新训练模型
成功!您的 segmentation 系统已就绪
您现在拥有一个可工作的 segmentation 系统,能够:
- 自动检测 特定特征或缺陷
- 以像素级精度测量区域
- 根据您的需求应用自定义通过/不通过逻辑
- 通过 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