AI 驱动文档
您想了解什么?
单个配方中的多视图
本指南展示如何在一个配方中设置可对不同部件、角度或视图进行检测,而无需切换到其他配方。有多种原因,但有两个主要使用场景:
- 拍摄之间的时间不足以更改配方时,
- 对同一零件的多个部位或角度执行相同检测时(例如,在汽车车身五个不同位置的螺柱存在/不存在)。在这种情况下,该方法可避免在不同配方中对同一个 presence/absence 模型进行多次训练。
以下示例是一个包含两视图和一种检测类型的简单版本,但你可以对同样的技术应用于无限数量的检测类型和视图。在本次检测中,我们将检查钻头盒两侧位的存在/缺失情况。一侧底部有五个位,另一侧在顶部和底部各有八个位。我们将具有 16 位的一侧称为 Side A,具有五 位的一侧称为 Side B。
![]() | ![]() |
|---|---|
| Side A (16 bits) | Side B (5 bits) |
Create and Train a New Recipe
由于两侧布局不同,我们将两侧合并到一个配方中,这样就无需对同一个 presence/absence 模型进行两次训练。
-
新建一个配方。本例中这是一个 classification 配方,但同样的原理也可用于 segmentation。
-
设置第一视图的 Template Image 和 Alignment:
同一配方上检查多于一个视图时,Aligner 将不可用。Template Image 和 Aligner 仅用于为 Inspection Setup 设置基准图像。

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

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

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

对于更复杂的配方,可以对你希望检测的任意数量的不同视图重复此过程。
- 使用来自 Side A 和 Side B 的图像对 classification 模型进行标注和训练。在捕获并标注 Side A 时,请勿标注 Side B 的 ROI,反之亦然。
![]() | ![]() |
|---|---|
| Side A 标注(通过) | Side A 标注(失败) |
![]() | ![]() |
| Side B 标注(通过) | Side B 标注(失败) |
配置 Node-RED 逻辑
-
跳转到 IO Block (Recipe Editor 中的 Configure IO) 以打开您的 Node-RED 流。
-
创建一个源,用于告知 OV10i 当前正在检查哪一侧。
这可以是机器人位置数据、来自 PLC 的信息,或您想要使用的任意数据。下例中,我们将使用两个 Inject 节点来模拟:一个发送字符串 "A",一个发送字符串 "B"。
- 由于输入的侧数据可能是瞬时的,但我们需要检查哪一侧处于活动状态,因此将使用 Flow 变量来存储状态数据,该变量将持续有效,直到接收到下一组侧信息。将数据源连接到包含以下代码的 Function 块:
flow.set('side',msg.payload);
return msg;

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

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

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

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

测试配方
现在 Node-RED 流已配置好,是时候对该配方进行端到端测试。
- 首先,我们将使用 Node-RED 的 Inject 节点发送 A 侧指令。然后使用 HMI 来检查一个良品。请注意,尽管 B 侧区域中的某些区域失败,整个检查仍然通过。

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

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

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

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





