AI 驱动文档
您想了解什么?
使用分割器
本教程将指导您使用 OV80i 的 AI 驱动分割功能创建完整的分割检测。您将学习如何通过教会相机逐像素识别和测量特定特征来检测和分析铅笔痕迹、划痕或其他缺陷等具体特征。
观看本主题的实际操作:如何在几分钟内创建分割程序
您将学到:
- 如何从头到尾设置分割程序
- 如何训练 AI 模型以识别特定特征
- 如何根据分割结果配置通过/失败逻辑
- 如何针对生产使用优化分割性能
实际应用: 本教程以铅笔痕迹检测为例,但相同原理适用于检测划痕、裂纹、污染或任何其他可视觉区分的特征。
先决条件
- OV80i 相机系统已设置并连接
- 具有待检测特征的样品(例如:带有铅笔痕迹的纸张)
- 对 AI 训练概念的基本了解
- 可访问程序编辑器与 Node-RED 功能
教程概览
我们将构建的内容: 一个能够检测纸张上铅笔痕迹的分割模型,并根据检测到的标记数量判定通过/失败。
所需时间: 45-60 分钟(包括训练时间)
学到的技能: AI 模型训练、分割标注、通过/失败逻辑配置
第一步:创建新的分割程序
1.1 开始新程序
- 在 All Recipes 页面,点击右上角的 "+ New"
- 出现 Add A New Recipe 弹窗
- 输入描述性的程序 Name(例如:"Pencil_Mark_Detection")
- 从 Recipe Type 下拉菜单中选择 "Segmentation"
- 点击 "OK" 创建新程序
为什么选择分割? 与识别整个对象的分类不同,分割在图像中查找并测量特定特征,非常适合缺陷检测、污染分析或测量覆盖面积。

1.2 激活并打开程序编辑器
- 新程序将出现在 All Recipes 页面上,标记为 "Inactive"
- 选择程序右侧的 "Activate"
- 点击 "Activate and go to editor" 确认并启动程序编辑器
检查点: 您应该在程序编辑器界面中看到面包屑菜单里显示的分割程序名称。
第二步:配置相机成像
2.1 访问图像设置
- 在程序编辑器中,点击左下方的 "Configure Imaging"
- 这将打开图像配置页面,您将在此优化相机设置

2.2 优化对焦设置
- 将带有铅笔痕迹的样品纸张放置在相机视野内
- 转动镜头上的对焦环,直到铅笔痕迹清晰
- 勾选 Enable Focus View 以确认已达到最清晰的位置
- 使用 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.1 导航至模板图像和对齐
- 点击面包屑菜单中的 Recipe Name 返回程序编辑器
- 从菜单中选择 "Template Image and Alignment"
3.2 在本教程中跳过对齐器
- 由于我们要在整张纸上检测特征,请点击 "Skip Aligner"
- 这将禁用基于位置的对齐并使用完整图像
- 点击 "Save" 应用更改
何时使用对齐器: 当您需要在可能移动或旋转的零件上的特定位置检测特征时,请启用对齐器。对于像铅笔痕迹这样的整张纸检测,通常适合跳过对齐器。

第四步:设置检测区域
4.1 导航至检测设置
- 返回程序编辑器并选择 "Inspection Setup"
- 在此定义要分析图像的哪个区域
4.2 配置感兴趣区域 (ROI)
- 您将看到相机视野的预览
- 拖动 ROI 框的角以调整其大小和位置
- 对于铅笔痕迹检测,通常覆盖整张纸的区域
- 确保 ROI 涵盖所有可能出现铅笔痕迹的区域
ROI 最佳实践:
- 包括所有可能发生缺陷的区域
- 排除不应分析的区域,例如边缘或背景
- ROI 应足够大,以捕捉零件位置的变化
- 避免包括文本、徽标或其他预期的标记
4.3 保存 ROI 配置
- 当您的 ROI 正确定位后,点击 "Save"
- 现已为您的分割模型定义了检测区域
第五步:标注并训练模型
5.1 导航至标注与训练
- 返回程序编辑器并选择 "Label and Train"
- 在此处教 AI 识别铅笔痕迹的外观

5.2 配置检测类别
- 在 Inspection Types 下,点击 "Edit"
- 将类别重命名为 "Pencil Mark"(或您的特定缺陷类型)
- 选择一种醒目的颜色用于可视化检测到的痕迹
- 点击 "Save" 以应用更改
5.3 捕获训练图像
- 至少拍摄 10 张带有不同铅笔痕迹的纸张图像
- 变化训练样本:
- 不同的铅笔痕迹尺寸和形状
- 浅色和深色痕迹
- 纸张上的不同位置
- 不同的痕迹密度
训练图像提示:
- 同时包含细微和明显的痕迹
- 捕获您将遇到的各种光照条件
- 每张图像中包含无痕迹的干净区域
- 确保图像能够代表生产条件
5.4 标注训练图像
- 对每张训练图像,使用画笔工具描绘铅笔痕迹
- 仅涂画铅笔痕迹 —— 避免标记纸张或其他特征
- 标注需精确且全面
- 完成每张图像后点击 "Save Annotations"
标注最佳实践:
- 在标注"铅笔痕迹"时保持一致性
- 包含完整的痕迹,而非仅其部分
- 不要标注预期的标记,如文字或徽标
- 使用稳定、细致的笔触以获得准确的边界
5.5 检查您的标注
- 仔细检查所有标注的图像以确保准确性
- 查找遗漏的痕迹或错误标注的区域
- 重新标注需要修正的图像
- 高质量的标注可带来更好的模型性能
第六步:训练分割模型
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.1 导航到 IO模块
- 返回程序编辑器,点击 "Configure I/O" 或从面包屑菜单中选择 "IO模块"
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:未检测到缺陷则通过
// 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 部署并测试逻辑
- 点击 "Done" 保存函数
- 点击 "部署" 激活逻辑
- 导航到 HMI 测试您的通过/失败逻辑
测试您的逻辑:
- 使用干净的板材进行测试(应通过)
- 使用轻微标记的板材进行测试(应根据您的标准通过/失败)
- 使用严重标记的板材进行测试(应失败)
- 验证结果是否符合您的预期
第八步:优化与验证
8.1 使用生产样本测试
- 运行多个测试样本通过您的检测流程
- 验证检测精度是否符合您的要求
- 检查通过/失败逻辑是否正确工作
- 记录任何问题或边缘情况
8.2 微调模型性能
如果检测不一致:
- 添加更多具有多样化示例的训练图像
- 提高标注质量与一致性
- 调整图像设置以获得更好的对比度
- 使用更多迭代次数重新训练
如果通过/失败逻辑需要调整:
- 修改 Node-RED 函数中的阈值
- 测试不同的逻辑方法
- 对复杂决策考虑多项标准
- 根据生产要求进行验证
8.3 生产验证
- 使用真实的生产零件在实际环境下进行测试
- 与质量团队一起验证,确保标准符合要求
- 记录性能指标,如检测精度和误报率
- 设置监控以跟踪长期性能
第 9 步:理解分割结果
9.1 分割数据结构
您的分割结果包括:
- Blobs:检测到的独立特征(铅笔标记)
- 像素计数:每个检测到的特征的尺寸
- 位置数据:检测到特征的位置
- 置信度分数:模型对每次检测的确信程度
9.2 使用分割数据
您可以基于以下内容创建复杂的通过/失败逻辑:
- 检测到的缺陷数量
- 单个缺陷的尺寸(像素计数)
- 总缺陷面积(所有像素计数之和)
- 缺陷位置(缺陷出现的位置)
- 缺陷形状特征(如高级应用需要)
成功!您的分割模型已完成
您的 OV80i 分割检测现在可以:
✅ 自动检测铅笔标记(或您的特定特征)
✅ 测量检测到的特征的尺寸和数量
✅ 基于您的特定标准做出通过/失败决策
✅ 提供每个检测到的特征的详细信息
✅ 适应标记尺寸、形状和位置的变化
关键要点
分割与分类的对比:
- 分割在图像内查找并测量特定特征
- 分类识别整个对象或整体状态
- 使用分割进行缺陷检测、污染分析或覆盖率测量
训练最佳实践:
- 高质量标注比数量更重要
- 在训练集中包含多样化的样本
- 使用生产样本进行充分测试
- 根据需要监控并重新训练
通过/失败逻辑:
- 从简单的标准开始,根据需要增加复杂度
- 使用边缘情况和临界样本测试逻辑
- 记录您的标准以保持一致性
- 考虑多个因素以做出稳健的决策
后续步骤
现在您已经完成了首个分割模型:
- 应用于其他用例 - 尝试检测不同类型的缺陷或特征
- 与生产系统集成 - 连接到 PLC 或质量管理系统
- 建立数据采集 - 跟踪性能指标和检测统计信息
- 培训操作员 - 确保团队了解如何监控和维护系统
- 规划维护 - 安排定期的模型更新和性能审查