使用分割器
本教程将指导您使用 OV80i 的 AI 驱动分割功能,创建完整的分割检测。您将学习如何通过逐像素教导相机识别和测量特定特征,如铅笔痕迹、划痕或其他缺陷,从而实现检测和分析。
您将学到:
- 如何从头开始设置分割配方
- 如何训练 AI 模型识别特定特征
- 如何基于分割结果配置合格/不合格逻辑
- 如何优化分割性能以适应生产使用
实际应用示例: 本教程以铅笔痕迹检测为例,但相同原理适用于检测划痕、裂纹、污染或任何可视觉区分的特征。
先决条件
- 已设置并连接的 OV80i 相机系统
- 带有您想检测特征的样品零件(例如带有铅笔痕迹的纸张)
- AI 训练概念的基础理解
- 可访问 Recipe Editor 和 Node-RED 功能
教程概述
我们将构建的内容: 一个能够检测纸张上铅笔痕迹,并根据检测到的标记量判断合格/不合格的分割模型。
所需时间: 45-60 分钟(含训练时间)
学习技能: AI 模型训练、分割标注、合格/不合格逻辑配置
步骤 1:创建新的分割配方
1.1 新建配方
- 在 All Recipes 页面,点击右上角的 "+ New Recipe"
- 弹出“添加新配方”窗口
- 输入描述性的 Name(例如 "Pencil_Mark_Detection")
- 从配方类型下拉菜单中选择 "Segmentation"
- 点击 "OK" 创建新配方
为什么选择分割? 与识别整个对象的分类不同,分割能在图像中找到并测量特定特征,非常适合缺陷检测、污染分析或覆盖面积测量。
1.2 激活配方
- 新配方将在 All Recipes 页面显示为 "Inactive"
- 在配方右侧选择 "Actions > Activate"
- 点击 "Activate" 确认
- 配方状态变为 "Active"
1.3 进入 Recipe Editor
- 点击活动配方旁的 "Edit"
- 点击 "Open Editor" 确认
- 进入带有分割配方的 Recipe Editor 界面
检查点: 您应能在面包屑菜单中看到带有分割配方名称的 Recipe Editor 界面。
步骤 2:配置相机成像
2.1 访问成像设置
- 在 Recipe Editor 中,点击左下角的 "Configure Imaging"
- 打开成像配置页面,优化相机设置
2.2 优化对焦设置
- 将带有铅笔痕迹的样品纸张放入相机视野
- 使用 Focus slider 调整至铅笔痕迹清晰对焦
- 可手动输入对焦值以提高精度
- 如有 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"
- 配方的相机配置即被保存
- 实时预览应显示清晰且对比度良好的图像
检查点: 相机应输出清晰图像,铅笔痕迹与纸张背景易于区分。
步骤 3:配置模板和对齐
3.1 进入模板图像和对齐设置
- 点击面包屑菜单中的 Recipe Name 返回 Recipe Editor
- 从菜单选择 "Template Image and Alignment"
3.2 本教程中的跳过对齐器
- 由于我们要检测整张板上的特征,点击 "Skip Aligner"
- 这将禁用基于位置的对齐,使用整张图像
- 点击 "Save" 以应用更改
何时使用对齐器: 当需要检测可能移动或旋转零件上特定位置的特征时,启用对齐器。对于像铅笔痕迹这样的整张板检测,通常跳过对齐器更为合适。
第 4 步:设置检测区域
4.1 进入检测设置
- 返回 Recipe Editor,选择 "Inspection Setup"
- 在这里定义要分析的图像区域
4.2 配置感兴趣区域 (ROI)
- 你将看到相机视野的预览
- 拖动 ROI 框的角点 调整其大小和位置
- 对于铅笔痕迹检测,通常覆盖整张板区域
- 确保 ROI 包含所有可能出现铅笔痕迹的区域
ROI 最佳实践:
- 包含所有可能出现缺陷的区域
- 排除不应分析的边缘或背景区域
- ROI 应足够大以覆盖零件位置的变化
- 避免包含文字、标志或其他预期标记
4.3 保存 ROI 配置
- ROI 位置调整好后,点击 "Save"
- 检测区域现已为分割模型定义完成
第 5 步:标注并训练模型
5.1 进入标注和训练
- 返回 Recipe Editor,选择 "Label and Train"
- 在这里教 AI 识别铅笔痕迹的样子
5.2 配置检测类别
- 在 Inspection Types 下点击 "Edit"
- 将类别重命名为 "Pencil Mark"(或你的具体缺陷类型)
- 选择一个醒目的 颜色 用于显示检测到的痕迹
- 点击 "Save" 应用更改
5.3 捕获训练图像
- 至少拍摄 10 张 带有不同铅笔痕迹的板材图像
- 训练样本要多样化:
- 不同大小和形状的铅笔痕迹
- 浅色和深色痕迹
- 板上不同位置
- 不同密度的痕迹
训练图像建议:
- 包含明显和细微的痕迹
- 捕捉各种光照条件
- 每张图像中包含无痕迹的干净区域
- 确保图像代表实际生产环境
5.4 标注训练图像
- 对每张训练图像,使用 Brush tool 勾画铅笔痕迹
- 仅标注铅笔痕迹,避免标注纸张或其他特征
- 标注要精确且全面
- 每张图像完成后点击 "Save Annotations"
标注最佳实践:
- 标注标准保持一致,统一定义“铅笔痕迹”
- 标注完整痕迹,而非部分
- 不标注文字、标志等预期标记
- 使用稳定、细致的笔触确保边界准确
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 评估训练结果
- 训练完成后,查看最终准确率
- 点击 "Live Preview" 观察实时分割效果
- 使用新样本测试模型性能
成功标志:
- 铅笔痕迹以选定颜色高亮显示
- 干净区域保持无标记
- 不同类型痕迹检测一致
- 模型对新样本响应良好
第 7 步:配置合格/不合格逻辑
7.1 进入 IO Block
- 返回 Recipe Editor,选择 "IO Block"
- 确保所有 AI Block 显示为 "trained (green)" 后继续
- 点击 "Configure I/O" 进入 Node-RED 编辑器
7.2 设置 Node-RED 流程
- 删除现有的 Classification Block Logic 节点
- 从左侧面板拖入:
- All Block Outputs 节点(如果尚未存在)
- Function 节点
- Final Pass/Fail 节点
- 连接节点:All Block Outputs → Function → Final Pass/Fail
7.3 配置通过/失败逻辑
双击 Function 节点,选择以下逻辑示例之一:
选项 1:无缺陷则通过
// 如果未检测到铅笔标记则通过
const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length < 1;
msg.payload = results;
return msg;
选项 2:所有标记均小于阈值则通过
// 如果所有标记均小于阈值则通过
const threshold = 500; // 像素
const allBlobs = msg.payload.segmentation.blobs;
const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold);
msg.payload = allUnderThreshold;
return msg;
选项 3:总覆盖面积低于阈值则通过
// 如果总标记面积低于阈值则通过
const threshold = 5000; // 总像素数
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 生产验证
- 在实际条件下使用真实生产零件测试
- 与质量团队确认标准符合要求
- 记录性能指标,如检测准确率和误报率
- 建立监控机制,跟踪性能变化
第 9 步:理解分割结果
9.1 分割数据结构
您的分割结果包括:
- Blobs:单个检测到的特征(铅笔标记)
- Pixel Count:每个特征的大小
- Location Data:特征的位置
- Confidence Scores:模型对每个检测的置信度
9.2 使用分割数据
您可以基于以下内容创建复杂的通过/失败逻辑:
- 缺陷数量
- 单个缺陷大小(像素数)
- 缺陷总面积(所有像素数之和)
- 缺陷位置
- 缺陷形状特征(适用于高级应用)
成功!您的分割模型已完成
您的 OV80i 分割检测系统现在可以:
✅ 自动检测铅笔标记(或您特定的特征)
✅ 测量检测特征的大小和数量
✅ 根据您的具体标准做出通过/失败判定
✅ 提供每个检测特征的详细信息
✅ 适应标记大小、形状和位置的变化
关键要点
分割 vs 分类:
- 分割 用于在图像中定位并测量特定特征
- 分类 用于识别整体对象或整体状态
- 分割适合缺陷检测、污染分析或覆盖率测量
训练最佳实践:
- 标注质量优于数量
- 训练集应包含多样化样本
- 使用生产样品进行充分测试
- 持续监控并根据需要重新训练
通过/失败逻辑:
- 从简单条件开始,逐步增加复杂度
- 使用边缘案例和临界样品测试逻辑
- 记录判定标准以保持一致性
- 考虑多因素以实现稳健判定
后续步骤
完成首个分割模型后:
- 应用于其他用例 — 尝试检测不同类型的缺陷或特征
- 集成到生产系统 — 连接 PLC 或质量管理系统
- 建立数据采集 — 跟踪性能指标和检测统计
- 培训操作员 — 确保团队了解如何监控和维护系统
- 制定维护计划 — 定期更新模型并评估性能
相关文档
- How-To: Train a Segmenter
- Concepts: Classifier vs Segmenter
- Tutorial: Using a Classifier (Single-ROI Example)
- How-To: Configure Node-RED Logic
- Reference: Node-RED Logic Blocks Guide