使用 Segmenter
本教程将引导您利用 OV80i 的 AI 驱动分割能力,创建完整的分割检测。您将学习如何通过逐像素让摄像头识别并测量这些特征,从而检测和分析诸如铅笔标记、划痕或其他缺陷。
您将学到:
- 如何从头到尾设置分割配方
- 如何训练 AI 模型以识别特定特征
- 如何基于分割结果配置通过/不通过逻辑
- 如何为生产现场优化分割性能
实际应用: 本教程以铅笔标记检测为例,但相同原理同样适用于检测划痕、裂纹、污染或任何其他可通过视觉区分的特征。
先决条件
- OV80i 相机系统已设置并连接
- 具备要检测的特征的样品件(例如带有铅笔标记的纸张)
- 对 AI 训练概念的基础理解
- 访问 Recipe Editor 和 Node-RED 功能
教程概览
我们将构建的内容: 一个能够在纸张上检测铅笔标记并基于检测到的标记数量来判断通过/不通过的分割模型。
所需时间: 约 45-60 分钟(含训练时间)
所学技能: AI 模型训练、分割标注、通过/不通过逻辑配置
步骤 1:创建一个新的分割配方
1.1 开始一个新配方
- 在 All Recipes 页面,点击右上角的 "+ New"
- 将出现 Add A New Recipe 模态框
- 为你的配方输入一个描述性名称(如 “Pencil_Mark_Detection”)
- 从下拉菜单中选择 "Segmentation" 作为 Recipe Type
- 点击 "OK" 创建新配方
为什么选择 Segmentation? 与识别整个对象的分类不同,Segmentation 在图像中找到并测量特定特征,使其非常适合缺陷检测、污染分析或测量覆盖区域。

1.2 启用并打开 Recipe Editor
- 新配方将显示在 All Recipes 页面,标记为 "Inactive"
- 选择配方右侧的 "Activate"
- 点击 "Activate and go to editor" 以确认并启动配方编辑器
检查点: 您应在面包屑导航中看到带有分割配方名称的 Recipe Editor 界面。
步骤 2:配置相机成像
2.1 访问成像设置
- 在 Recipe Editor 中,点击左下角的 "Configure Imaging"
- 这将打开成像配置页面,在此您将优化相机设置

2.2 优化对焦设置
- 将包含铅笔标记的样本纸张放入相机的视野
- 使用 聚焦滑块 以实现铅笔标记的清晰对焦
- 也可手动输入对焦值以提高精度
- 如有可用,请使用 Focus View(聚焦视图)查看边缘高亮和聚焦分数
聚焦提示:
- 将聚焦放在缺陷将出现的表面
- 确保铅笔标记清晰且轮廓分明
- 更高的聚焦分数表示更好的聚焦质量
2.3 配置曝光设置
- 调整 Exposure 滑块以获得适当的亮度
- 铅笔标记应在纸张上具有清晰对比,而不应过度曝光纸张
- 先使用自动设置并根据需要进行微调
- 监控实时预览以实时看到变化
曝光指南:
- 铅笔标记应与纸张具有良好的对比度
- 避免过度曝光导致细微标记被冲淡
- 确保整个检测区域的照明一致
2.4 设置 LED 照明
- 选择适用于您的应用的 LED Light Pattern
- 对于铅笔标记,通常均匀照明效果最佳
- 将 LED Light Intensity 调整到尽量减少阴影和眩光
- 如有反射问题,测试不同的模式
2.5 调整 Gamma 和对比度
- 通过微调 Gamma 以增强标记与背景之间的对比
- 更高的 Gamma 可以使细微的铅笔标记更清晰
- 较低的 Gamma 可以降低干净区域的噪声
- 平衡 Gamma,以同时优化缺陷可见性和背景清晰度
2.6 保存成像设置
- 一旦所有设置都已优化,点击 "Save Imaging Settings"
- 您的相机配置现已保存到该配方
- 实时预览应显示清晰、对比度良好的图像
Checkpoint: 您的相机应生成清晰的图像,铅笔标记应与纸张背景易于区分。
第 3 步:配置模板和对齐
3.1 导航至模板图像与对齐
- 在面包屑导航中点击 Recipe Name 以返回 Recipe Editor
- 从菜单中选择 "Template Image and Alignment"
3.2 本教程中跳过 Aligner
- 由于我们在整张纸上检测特征,请点击 "Skip Aligner"
- 这将禁用基于位置的对齐并使用整张图像
- 点击 "Save" 以应用更改
何时使用 Aligner: 需要在部件可能移动或旋转的特定位置检测特征时启用 Aligners。当进行像铅笔标记这样的全张检查时,跳过 Aligner 通常是合适的。

第 4 步:设置检测区域
4.1 导航至 Inspection Setup
- 返回 Recipe Editor 并选择 "Inspection Setup"
- 这里您将定义要分析的图像区域
4.2 配置 Region of Interest (ROI)
- 您将看到相机视野的预览
- 拖动 ROI 框的角点 以调整其大小和位置
- 对于铅笔标记检测,通常覆盖整张纸区域
- 确保 ROI 覆盖铅笔标记可能出现的所有区域
ROI 最佳实践:
- 包含可能出现缺陷的所有区域
- 排除边缘或背景等不应分析的区域
- 使 ROI 足够大以捕捉部件定位的变化
- 避免包含文本、徽标或其他预期标记
4.3 保存 ROI 配置
- 一旦 ROI 位置正确,请点击 "Save"
- 该检测区域现已为您的分割模型定义
第 5 步:标注并训练您的模型
5.1 导航至 Label and Train
- Return to Recipe Editor 并选择 "Label and Train"
- 这是您将教 AI 如何识别铅笔痕迹外观的地方

5.2 配置 Inspection Class
- Under Inspection Types,点击 "Edit"
- 将类重命名为 "Pencil Mark"(或您具体的缺陷类型)
- 为已检测的痕迹可视化选择一个醒目的 color
- 点击 "Save" 以应用更改
5.3 捕获训练图像
- 至少拍摄 10 张带有不同铅笔痕迹的纸张
- 变换训练示例:
- 不同的铅笔痕迹大小和形状
- 浅色和深色痕迹
- 纸张上的各种位置
- 不同的痕迹密度
训练图像提示:
- 同时包含微妙和明显的痕迹
- 捕捉您将遇到的各种光照条件
- 在每张图像中包含无痕迹的干净区域
- 确保图像代表生产条件
5.4 标注训练图像
- 对于每张训练图像,使用 Brush tool 来描绘铅笔痕迹
- 仅绘制铅笔痕迹 - 避免标记纸张或其他特征
- 标注要准确但详尽
- 完成每张图像后,点击 "Save Annotations"
标注最佳实践:
- 在将其标注为 "pencil marks" 时保持一致
- 包含完整的痕迹,而不仅仅是其中的一部分
- 不要标注诸如文本或商标等预期标记
- 使用稳定、细致的笔触以获得准确边界
5.5 审核您的标注
- 再次检查所有标注的图像 以确保准确性
- 查找遗漏的痕迹或标注错误的区域
- 对需要修正的图像重新标注
- 高质量的标注可提升模型性能
第 6 步:训练分割模型
6.1 启动训练过程
- 一旦您标注了至少 10 张图像,请点击 "Return to Live"
- 点击 "Train Segmentation Model"
- 输入训练的 Number of Iterations
迭代指南:
- 初始训练从 100-200 次迭代开始
- 更多迭代通常会提高准确性,但耗时更长
- 监控训练进度并根据需要进行调整
- 在准确性需求与训练时间之间取得平衡

6.2 监控训练进度
- 点击 "Start Training" 开始该过程
- 将显示训练进度对话框,内容包括:
- 当前迭代次数
- 训练准确率(百分比)
- 剩余预计时间
6.3 训练控制选项
在训练期间,您可以:
- Abort Training - 如需修改请中止
- Finish Training Early - 当准确度足够时停止
- Monitor Progress - 观察准确性在迭代中的提升
训练提示:
- 当达到目标准确度时,训练将自动结束
- 更高的准确度百分比表示更好的模型性能
- 若准确度趋于平稳,您可能需要更多训练数据
6.4 评估训练结果
- 训练完成后,复核最终准确率
- 点击 实时预览 以查看实时分割结果
- 使用新样本进行测试以验证模型性能
成功指标:
- 铅笔标记以所选颜色高亮显示
- 干净区域保持未标记
- 检测在不同标记类型之间保持一致
- 模型对新样本(未见样本)反应良好
Step 7: 配置通过/失败逻辑
7.1 导航至 IO Block
- 返回到配方编辑器并点击 "配置 I/O",或从面包屑菜单中选择 "IO Block"
7.2 设置 Node-RED 流
- Delete the existing Classification Block Logic 节点
- 从左侧调色板拖入:
- All Block Outputs 节点(如果尚未存在)
- Function 节点
- Final Pass/Fail 节点
- 连接节点:All Block Outputs → Function → Final Pass/Fail

7.3 配置通过/失败逻辑
双击 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 部署与测试逻辑
- 点击 完成 保存函数
- 点击 部署 以激活逻辑
- 导航至 HMI 以测试您的通过/失败逻辑
测试您的逻辑:
- 使用干净的纸张进行测试(应通过)
- 使用轻微标记的纸张进行测试(应通过/未通过取决于您的标准)
- 使用大量标记的纸张进行测试(应失败)
- 验证结果是否符合您的预期
Step 8: 优化与验证
8.1 使用生产样本进行测试
- 通过您的检测流程运行多个测试样本
- 验证检测准确性是否达到您的要求
- 验证通过/失败逻辑是否正确
- 记录任何问题或边缘情况
8.2 微调模型性能
如果检测不一致:
- 添加更多包含多样化示例的训练图像
- 提高标注质量与一致性
- 调整成像设置以获得更好对比度
- 使用额外迭代进行再训练
如果通过/失败逻辑需要调整:
- 在 Node-RED 函数中修改阈值
- 测试不同的逻辑方法
- 考虑用于复杂决策的多标准
- 使用生产要求进行验证
8.3 生产验证
- 在实际条件下对真实生产部件进行测试
- 与质量团队共同验证以确保标准符合要求
- 记录性能指标,如检测准确性和误报率
- 设置监控以随时间跟踪性能
第 9 步:理解分割结果
9.1 分割数据结构
您的分割结果包括:
- Blobs:单个检测到的特征(铅笔痕迹)
- Pixel Count:每个检测特征所占的像素数
- Location Data:特征出现的位置
- Confidence Scores:模型对每次检测的置信度
9.2 使用分割数据
您可以基于以下指标创建复杂的通过/不通过逻辑:
- 检测到的缺陷数量
- 单个缺陷的大小(像素计数)
- 总缺陷面积(所有像素计数之和)
- 缺陷位置(缺陷出现的位置)
- 缺陷形状特征(如需用于高级应用)
成功!您的分割模型已完成
您的 OV80i 分割检测现在可以:
✅ 在图像中自动检测铅笔痕迹(或您特定的特征)
✅ 测量检测到的特征的大小和数量
✅ 基于您的特定标准做出通过/不通过的决策
✅ 提供关于每个检测特征的详细信息
✅ 适应标记尺寸、形状和位置的变化
关键要点
Segmentation vs. Classification:
- Segmentation 在图像中定位并测量特定特征
- Classification 识别整个对象或总体条件
- 使用 Segmentation 进行缺陷检测、污染分析或覆盖测量
培训最佳实践:
- 高质量注释比数量更重要
- 在训练集中包含多样化的示例
- 使用生产样本进行彻底测试
- 监控并在需要时重新训练
通过/不通过逻辑:
- 从简单的标准开始,按需增加复杂性
- 使用边缘情况和临界样本测试逻辑
- 记录评判标准以保持一致性
- 考虑多因素以做出稳健的决策
下一步
现在您已经完成了第一个分割模型:
- 应用于其他用例 - 试着检测不同类型的缺陷或特征
- 与生产系统集成 - 连接到 PLCs(可编程逻辑控制器)或质量管理系统
- 建立数据采集 - 跟踪性能指标和检测统计信息
- 培训操作员 - 确保团队理解如何监控和维护系统
- 计划维护 - 安排定期模型更新和性能评估