使用 Segmenter
本教程将通过 OV20i 的 AI 驱动分割能力,带您创建一个完整的分割检测。您将学习如何通过让摄像头逐像素地识别并测量铅笔痕迹、划痕或其他缺陷等特征来检测和分析这些特征。
OV10i 不具备分割功能。
你将学到:
- 如何从头到尾设置一个 Segmentation 配方
- 如何训练 AI 模型以识别特定特征
- 如何基于分割结果配置通过/不通过逻辑
- 如何为生产使用优化分割性能
实际应用: 本教程以铅笔痕迹检测为例,但相同的原理同样适用于检测划痕、裂缝、污染或任何可视上区分的特征。
先决条件
- OV20i 摄像机系统已设置并连接
- 含有要检测特征的样本部件(例如,带铅笔痕迹的纸张)
- 对 AI 训练概念的基本理解
- 访问 Recipe Editor 和 Node-RED 功能
教程概览
我们将构建: 一种可检测纸张上的铅笔痕迹并基于检测到的痕迹数量判定通过/不通过的 segmentation 模型。
所需时间: 45-60 分钟(含训练时间)
学习技能: AI 模型训练、Segmentation 标注、通过/不通过逻辑配置
步骤 1:创建一个新的 Segmentation 配方
1.1 启动一个新配方
- 在 All Recipes 页面,点击右上角的 "+ New Recipe"
- 将显示 Add A New Recipe 模态框
- 为您的配方输入一个描述性 名称(例如,"Pencil_Mark_Detection")
- 从下拉菜单中选择 "Segmentation" 作为配方类型
- 点击 "OK" 以创建新配方
为什么选择 Segmentation? 与识别整个对象的分类不同,Segmentation 能在图像中定位并测量特征,使其非常适合缺陷检测、污染分析或测量覆盖区域。
1.2 激活您的配方
- 新配方将出现在 All Recipes 页面,状态标记为 "Inactive"
- 选择配方右侧的 "Actions > Activate"
- 点击 "Activate" 以确认
- 配方状态将变为 "Active"
1.3 进入配方编辑器
- 点击活跃配方旁的 "Edit"
- 点击 "Open Editor" 以确认
- 现在您将进入带有分割配方名称的配方编辑器
检查点: 应在面包屑导航中看到带有分割配方名称的配方编辑器界面。
步骤 2:配置相机成像
2.1 访问成像设置
- 在配方编辑器中,点击左下角的 "Configure Imaging"
- 这将打开成像配置页面,您将在其中优化相机设置
2.2 优化对焦设置
- 在相机的视野中放置带有铅笔标记的样本纸
- 使用 对焦滑块 以实现铅笔标记的清晰对焦
- 也可以手动输入对焦值以获得更高的精度
- 使用 对焦视图(若可用)来查看边缘高亮和对焦分数
对焦提示:
- 将对焦聚焦在将要出现缺陷的表面
- 确保铅笔标记呈现清晰、轮廓分明
- 较高的对焦分数表示更好的对焦质量
2.3 配置曝光设置
- 调整 曝光 滑块以获得合适的亮度
- 铅笔标记应清晰可见,而纸张不过曝
- 先使用自动设置,必要时进行微调
- 监控实时预览以实时查看变化
曝光准则:
- 铅笔标记应与纸张形成良好对比
- 避免过度曝光而淹没细微标记
- 确保整个检测区域照明一致
2.4 设置 LED 照明
- 为您的应用选择合适的 LED 照明模式
- 对于铅笔标记,通常均匀照明效果最佳
- 调整 LED 照明强度,以最小化阴影和眩光
- 如有反射问题,请测试不同的模式
2.5 调整 Gamma 与对比度
- 微调 伽玛 以增强标记与背景之间的对比度
- 较高的伽玛可使细微的铅笔标记更明显
- 较低的伽玛可在干净区域减少噪声
- 平衡伽玛以同时优化缺陷可见性和背景清晰度
2.6 保存成像设置
- 完成所有设置的优化后,点击 “保存成像设置”
- 现在该配方的相机配置已保存
- 实时预览应显示清晰、对比鲜明的图像
检查点: 相机应产生清晰的图像,铅笔标记应能与纸张背景清晰区分
第 3 步:配置模板和对齐
3.1 转到 模板图像与对齐
- 在面包屑导航中点击“配方名称”返回到配方编辑器
- 从菜单中选择 “模板图像与对齐”
3.2 在本教程中跳过对齐器
- 由于我们要在整张纸上检测特征,请单击 “跳过对齐器”
- 这将禁用基于位置的对齐并使用整张图像
- 点击 “保存” 以应用更改
何时使用对齐器: 当您需要在可能移动或旋转的工件的特定位置检测特征时,启用对齐器。对于像铅笔标记这类整张纸检测,通常应该跳过对齐器。
第 4 步:设置检测区域
4.1 转到 检查设置
- 返回到配方编辑器并选择 “检测设置”
- 这里将定义要分析的图像区域
4.2 配置感兴趣区域(ROI)
- 您将看到相机视野的预览
- 拖动 ROI 框的角点以调整其大小和位置
- 对于铅笔标记检测,通常覆盖整张纸区域
- 确保 ROI 覆盖铅笔标记可能出现的所有区域
ROI 最佳实践:
- 包括可能出现缺陷的所有区域
- 排除不应分析的边缘或背景等区域
- 将 ROI 调整到足以捕捉部件定位变化的大小
- 避免包含文本、标志或其他预期标记
4.3 保存 ROI 配置
- 一旦 ROI 定位正确,点击 "Save"
- 该检测区域现已为您的 segmentation 模型定义
第 5 步:对模型进行标注与训练
5.1 导航至 Label and Train
- 返回到 Recipe Editor 并选择 "Label and Train"
- 这是你将教 AI 如何识别铅笔标记的地方
5.2 配置检测类别
- 在 Inspection Types 下,点击 "Edit"
- 将类别重命名为 "Pencil Mark"(或你特定的缺陷类型)
- 选择一个醒目的 颜色 来可视化检测到的标记
- 点击 "Save" 以应用更改
5.3 捕获训练图像
- 至少拍摄 10 张包含不同铅笔标记的纸张图像
- 变动训练示例:
- 不同的铅笔标记大小和形状
- 浅色和深色标记
- 纸张上的不同位置
- 不同标记密度
训练图像提示:
- 包含细微和明显的标记
- 捕捉你将遇到的各种照明条件
- 在每张图像中包含无标记的干净区域
- 确保图像代表生产条件
5.4 标注训练图像
- 对于每个训练图像,使用 画笔工具 来描绘铅笔标记
- 仅绘制铅笔标记 - 避免标记纸张或其他特征
- 在标注时要精确但全面
- 每张图像完成后,点击 "Save Annotations" 以保存标注
标注最佳实践:
- 在把标签标注为 "pencil marks" 时保持一致
- 包含完整的标记,而不仅仅是它们的一部分
- 不要标注像文本或徽标这样的预期标记
- 使用稳定、仔细的笔触以获得准确边界
5.5 审核标注
- 仔细检查所有标注的图像 以确保准确性
- 查找漏标或标注错误的区域
- 对需要修正的图像重新标注
- 高质量的标注可提升模型性能
第 6 步:训练分割模型
6.1 启动训练过程
- 一旦你已标注至少 10 张图像,点击 "Return to Live"
- 点击 "Train Segmentation Model"
- 输入用于训练的 迭代次数
迭代指南:
- 从 100-200 次迭代开始进行初步训练
- 更多迭代通常会提高准确度,但需要更长时间
- 监控训练进度并根据需要进行调整
- 在准确度要求与训练时间之间取得平衡
6.2 监控训练进度
- 点击 "Start Training" 以开始该过程
- 将显示一个训练进度模态框,显示:
- 当前迭代次数
- 训练准确率百分比
- 预计剩余时间
6.3 训练控制选项
在训练期间,您可以:
- Abort Training - 如需进行修改,请中止训练
- Finish Training Early - 当准确度足够时提前完成训练
- Monitor Progress - 观察准确度在迭代中的提升
训练提示:
- 目标准确度达到时,训练将自动完成
- 更高的准确度百分比表示更好的模型性能
- 如果准确度趋于停滞,可能需要更多的训练数据
6.4 评估训练结果
- 训练完成后,查看最终准确率
- 点击 "实时预览" 以查看实时分割结果
- 使用新样本进行测试以验证模型性能
成功指标:
- 铅笔标记将以你选择的颜色高亮显示
- 未被标记的区域保持干净
- 对不同类型的标记,检测应保持一致
- 模型对新、未见样本的响应良好
第 7 步:配置 Pass/Fail 逻辑
7.1 导航至 IO Block
- 返回到 Recipe Editor 并选择 "IO Block"
- 确保在继续之前所有 AI Blocks 显示为 "trained (green)"
- 点击 "Configure I/O" 进入 Node-RED 编辑器
7.2 设置 Node-RED 流程
- Delete the existing Classification Block Logic 节点
- From the left palette, drag in:
- All Block Outputs 节点(如果尚未存在)
- Function 节点
- Final Pass/Fail 节点
- Connect the nodes: All Block Outputs → Function → Final Pass/Fail
7.3 配置 Pass/Fail 逻辑
双击 Function 节点并从下列逻辑示例中选择一个:
Option 1: Pass if No Defects Detected
// Pass if no pencil marks are found
const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length <1;
msg.payload = results;
return msg;
Option 2: Pass if All Marks Are Small
// 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;
Option 3: Pass if Total Coverage Is Low
// 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 部署与测试逻辑
- 点击 "Done" 保存该函数
- 点击 "Deploy" 以激活逻辑
- 导航至 HMI 以测试你的通过/不通过逻辑
测试你的逻辑:
- 使用干净的工作单进行测试(应通过)
- 使用轻微标记的工作单进行测试(应按你的标准通过/不通过)
- 使用大量标记的工作单进行测试(应失败)
- 验证结果是否符合你的预期
第 8 步:优化与验证
8.1 使用生产样本进行测试
- 通过你的检验运行多个测试样本
- 验证检测准确性是否符合你的要求
- 检查通过/不通过逻辑是否正确工作
- 记录任何问题或边缘情况
8.2 微调模型性能
如果检测不一致:
- 增加具有多样示例的训练图像
- 提高注释质量和一致性
- 调整成像设置以获得更好的对比度
- 使用更多迭代进行重新训练
如果通过/不通过逻辑需要调整:
- 修改 Node-RED 函数中的阈值
- 测试不同的逻辑方法
- 考虑用于复杂决策的多条件
- 根据生产要求进行验证
8.3 Production Validation
- 在实际条件下使用真实生产部件进行测试
- 与质检团队进行验证,以确保标准符合需求
- 记录性能指标,例如检测准确率和误报率
- 建立监控,以随时间跟踪性能
Step 9: Understanding Segmentation Results
9.1 Segmentation Data Structure
Your segmentation results include:
- Blobs: 单个检测到的特征(铅笔痕迹)
- Pixel Count: 每个检测到的特征的大小
- Location Data: 特征所在的位置
- Confidence Scores: 模型对每个检测的置信分数
9.2 Using Segmentation Data
您可以基于以下内容创建复杂的通过/不通过逻辑:
- Number of defects 检测到的缺陷数量
- Size of individual defects(像素计数)
- Total defect area(所有像素计数之和)
- Defect location(缺陷出现的位置)
- Defect shape characteristics(如用于高级应用需求时的缺陷形状特征)
Success! Your Segmentation Model is Complete
Your OV20i segmentation inspection can now:
✅ 自动检测铅笔痕迹(或您特定的特征)在图像中
✅ 测量检测到的特征的大小和数量
✅ 根据您特定的标准做出通过/不通过的决策
✅ 提供关于每个检测到的特征的详细信息
✅ 适应铅笔痕迹大小、形状和位置的变化
Key Takeaways
Segmentation vs. Classification:
- Segmentation 在图像中定位并测量特征
- Classification 确定整个对象或总体条件
- 使用分割进行缺陷检测、污染分析或覆盖度测量
Training Best Practices:
- 高质量标注比数量更重要
- 在训练集中包含多样化的示例
- 用生产样本进行充分测试
- 按需监控并重新训练
Pass/Fail Logic:
- 从简单的标准开始,必要时增加复杂性
- 用边缘情况和边界样本测试逻辑
- 记录您的标准以确保一致性
- 考虑多因素以实现稳健的决策
Next Steps
现在您已经完成了第一个分割模型:
- 将其应用于其他用例 - 尝试检测不同类型的缺陷或特征
- 与生产系统集成 - 连接到 PLCs 或质量管理系统
- 设置数据收集 - 跟踪性能指标和检测统计数据
- 培训操作员 - 确保团队了解如何监控和维护系统
- 计划维护 - 安排定期模型更新和性能评估