创建您的第一个分割程序
  • 09 May 2025
  • PDF

创建您的第一个分割程序

  • PDF

文章摘要

按照 创建您的第一个程序 中的步骤配置成像设置模板图像和对齐以及检测设置后,按照以下步骤训练分割模型。

标注与训练

在此部分,您将捕获该物体的多张图像,使用画笔工具标注缺陷,并训练模型。您至少需要捕获并标注 10 张图像。

  1. 检测设置页面,使用面包屑菜单选择 Label and Train。或者,从程序编辑器中选择 Label and Train

    Segmeneter Recipe Editor Breadcrumb Menu

    注意

    预览窗格(左侧)显示实时预览,直到捕获图像或通过导航菜单选择图像。

  2. 检测类型下,点击Edit以重命名默认类别(fail_[检测类型名称])或添加其他类别。完成所有需要相机识别的类别后,继续下一步。

  3. 确保物体位于相机视野内,然后选择 Capture

  4. 使用 Brush 工具突出显示您希望相机识别的物体上的缺陷。

    提示

    使用 Eraser 工具删除任何不需要的高亮部分。

  5. 如果您添加了其他类别,从下拉菜单中选择适用的刷子类别

  6. 点击 Save Annotations

    Segmentation Annotation - keychain(1)

  7. 将同一物体的另一个示例放入相机视野内,并重复步骤 3-6,直到您添加了至少10个标注示例(如果添加了其他类别,则每个类别至少添加五个示例)。

    提示

    如果每张图像有所不同(避免重复相同的图像),模型的准确性会更高。

    仔细检查每张捕获的图像是否正确标注,因为这些标签将用于训练模型。

  8. 点击 Train Segmentation Model

  9. 使用字段右侧的箭头调整 迭代次数,设置标记图像显示给模型的次数,以帮助模型学习。

    注意

    增加迭代次数会提高模型的准确性,但也会延长训练时间。


    creating-a-segmenter-image-d3t5mlho

  10. 点击 Start Training。一个弹窗将显示训练进度。

  11. 模型训练完成后,使用 Live Preview ModeHMI 标签验证程序的功能。将不同示例的物体放置在摄像头视野内,验证模型是否正确分类每个示例。

注意

有关标注和训练页面更多信息,请参见 标注和训练(分割模块)

要为程序定义通过/失败逻辑,请进入 IO模块

IO模块

在本节中,您将使用 Node-RED 逻辑为程序定义通过/失败逻辑。

  1. 标签与训练 页面,使用面包屑导航选择 IO Block,或在 程序编辑器 中选择 Configure IO

    Segmeneter Recipe Editor Breadcrumb Menu

  2. 右键单击 Classification Block Logic 节点,选择 Delete Selection

    Segmentation IO Block - keychain(1)

  3. 右键单击,选择 Insert > Node > Function

  4. 重新连接节点。

    Segmentation IO Block - keychain

  5. 双击 function 1 节点。

  6. 复制并粘贴下方代码示例中的所需代码到 On Message 选项卡。

    代码示例:如果未检测到像素,则通过

    复制并粘贴以下逻辑代码:

    const allBlobs = msg.payload.segmentation.blobs; // 从有效负载的分割数据中提取斑点信息
    
    const results = allBlobs.length < 1; // 检查是否没有斑点,并存储结果(true 或 false)
    
    msg.payload = results; // 将有效负载设置为检查结果
    
    return msg; // 返回修改后的消息对象

    代码示例:如果检测到的所有斑点均小于设定阈值,则通过

    复制并粘贴以下逻辑代码:

    const threshold = 500; // 定义像素数量的阈值
    
    const allBlobs = msg.payload.segmentation.blobs; // 从有效负载的分割数据中提取斑点信息
    
    const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold); // 检查所有斑点的像素数量是否小于阈值
    
    msg.payload = allUnderThreshold; // 将有效负载设置为检查结果
    
    return msg; // 返回修改后的消息对象

    代码示例:如果检测到的像素总数小于设定阈值,则通过

    复制并粘贴以下逻辑代码:

    const threshold = 5000; // 定义像素总数的阈值
    
    const allBlobs = msg.payload.segmentation.blobs; // 从有效负载的分割数据中提取斑点信息
    
    const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0); // 计算所有斑点的像素总数
    
    msg.payload = totalArea < threshold; // 如果像素总数小于阈值,将有效负载设置为 true,否则为 false
    
    return msg; // 返回修改后的消息对象

  7. 点击 Done

  8. 点击 Deploy

注意

有关 IO 模块 页面更多信息,请参见 IO块和Node-RED逻辑


本文对您有帮助吗?