跳到主要内容

AI 驱动文档

您想了解什么?

单个配方中的多视图

OV10i Note

OV10i 仅支持 classification 模型。本页提及的 Segmentation 功能在 OV20iOV80i 摄像头上可用。

本指南展示如何在一个配方中设置可对不同部件、角度或视图进行检测,而无需切换到其他配方。有多种原因,但有两个主要使用场景:

  • 拍摄之间的时间不足以更改配方时,
  • 对同一零件的多个部位或角度执行相同检测时(例如,在汽车车身五个不同位置的螺柱存在/不存在)。在这种情况下,该方法可避免在不同配方中对同一个 presence/absence 模型进行多次训练。
备注

以下示例是一个包含两视图和一种检测类型的简单版本,但你可以对同样的技术应用于无限数量的检测类型和视图。在本次检测中,我们将检查钻头盒两侧位的存在/缺失情况。一侧底部有五个位,另一侧在顶部和底部各有八个位。我们将具有 16 位的一侧称为 Side A,具有五 位的一侧称为 Side B。

Side ASide B
Side A (16 bits)Side B (5 bits)

Create and Train a New Recipe

由于两侧布局不同,我们将两侧合并到一个配方中,这样就无需对同一个 presence/absence 模型进行两次训练。

  1. 新建一个配方。本例中这是一个 classification 配方,但同样的原理也可用于 segmentation。

  2. 设置第一视图的 Template Image 和 Alignment:

备注

同一配方上检查多于一个视图时,Aligner 将不可用。Template Image 和 Aligner 仅用于为 Inspection Setup 设置基准图像。

Template image and alignment- Side A

  1. 为 Side A 绘制 ROIs。将它们命名为有助于识别所属侧的名称。在本例中,我们将 ROIs 命名为 A1-A16。

ROIs - Side A

  1. 返回 Template Image and Alignment,将图像替换为 Side B 的图像,可以通过新捕获或从库中获取。

Template image and alignment- Side B

  1. 使用每个 ROI 旁边的锁定图标,避免移动 Side A 的任何 ROI,然后为 Side B 绘制并命名 ROI。

ROIs - Side B

备注

对于更复杂的配方,可以对你希望检测的任意数量的不同视图重复此过程。

  1. 使用来自 Side A 和 Side B 的图像对 classification 模型进行标注和训练。在捕获并标注 Side A 时,请勿标注 Side B 的 ROI,反之亦然。
Side A pass labelsSide A fail labels
Side A 标注(通过)Side A 标注(失败)
Side B pass labelsSide B fail labels
Side B 标注(通过)Side B 标注(失败)

配置 Node-RED 逻辑

  1. 跳转到 IO Block (Recipe Editor 中的 Configure IO) 以打开您的 Node-RED 流。

  2. 创建一个源,用于告知 OV10i 当前正在检查哪一侧。

备注

这可以是机器人位置数据、来自 PLC 的信息,或您想要使用的任意数据。下例中,我们将使用两个 Inject 节点来模拟:一个发送字符串 "A",一个发送字符串 "B"。

  1. 由于输入的侧数据可能是瞬时的,但我们需要检查哪一侧处于活动状态,因此将使用 Flow 变量来存储状态数据,该变量将持续有效,直到接收到下一组侧信息。将数据源连接到包含以下代码的 Function 块:
flow.set('side',msg.payload);
return msg;

编辑函数节点

  1. 您可以通过打开上下文数据侧边栏、发送一条消息,然后在 Flow 变量窗格上点击小型 刷新 按钮来测试侧数据是否已正确存储。Flow 数据窗格仅在手动刷新时才会更新,用于这个按钮。

上下文菜单

  1. 一旦侧数据正确存储在 Flow 变量中,增加一个连接到 All Block Outputs 的 switch 节点。这将是根据 Flow 变量中活动的一侧来路由带有检查数据的消息的节点。将其配置为读取 Flow 变量,在 A 活动时将消息路由到端口 1,在 B 活动时路由到端口 2。

编辑 switch 节点

备注

对于更复杂的配方,可以为你想要检查的不同视图重复此过程。

  1. switch 的每个输出端口连接到一个 Classification Block Logic 块,并根据你想要检查的该侧规则对每个块进行配置。Switch 节点一次只会将消息路由到其中一个节点。下图显示了 switch 的 B 侧端口的配置。请注意,它没有引用任何 A ROI 区域,因此在通过该节点路由检查时,该侧的结果将被逻辑忽略。

编辑 Classification Block Logic 节点

  1. 最后,将 逻辑块连接到 Inspection Pass/Fail 块。这使结果能够在 HMI 上显示,并传递给任意附加的 PLC 或其他流组件。

Node-RED Flow

测试配方

现在 Node-RED 流已配置好,是时候对该配方进行端到端测试。

  1. 首先,我们将使用 Node-RED 的 Inject 节点发送 A 侧指令。然后使用 HMI 来检查一个良品。请注意,尽管 B 侧区域中的某些区域失败,整个检查仍然通过。

HMI 端 A,合格

  1. 现在,当在 A 侧移除一个钻头并再次进行检查时,我们得到所需的失败结果。

HMI 端 A,失败

  1. 继续到 B 侧,我们通过 Node-RED 的 Inject 发送 B 信号,并在上下文数据窗格中的 Flow 变量区域刷新,以确保其已存储。

Node-RED Flow B

  1. 现在切换到良品的 B 侧时,尽管 A 侧区域全部失效,检查仍然通过。

HMI 端 B,合格

恭喜!您现在知道如何在同一个配方和模型下对部件的多视图进行检测。这将实现高速的复杂检测,并与机器人实现紧密集成。同时,它也将为您节省大量时间,避免为在不同视图上重复训练用于相同检测的多个模型。