同一配方中的多视图
本指南向您展示如何设置一个单一配方,以在不切换到其他配方的情况下对不同部件、角度或视图进行检测。这样做有多种原因,但两个主要使用场景是:
- 当拍摄之间没有足够的时间来切换配方时,
- 当对同一部件的多个部位或角度执行相同检测时(例如在车身的五个不同位置检查螺栓的存在/缺失)。在这种情况下,该方法可避免在不同配方中多次训练相同的存在/缺失模型。
备注
以下示例是一个简单版本,只有两个视图和一种检测类型,但你可以将此相同技术应用于无限数量的检测类型和视图。在此检测中,我们将检查钻头盒两侧位的存在/缺失。 一侧底部有五个位,另一侧顶部和底部各有八个位。我们将具有16个位的一侧称为 side A,具有五个位的一侧称为 side B。
![]() | ![]() |
---|---|
Side A (16 bits) | Side B (5 bits) |
创建并训练一个新配方
与每个侧面单独一个配方不同,由于布局不同,我们将把两侧合并为一个配方,从而避免为存在/缺失模型训练两次。
-
创建一个新配方。在此案例中,它是一个 classification 配方,但同样的原理也可用于 segmentation。
-
为第一视图设置 Template Image 和 Alignment:
备注
当在同一配方中检查多于一个视图时,Aligner 将不可用。Template Image 和 Aligner 仅用于为 Inspection Setup 设置基准图像。
- 为侧 A 绘制 ROI。给它们命名,以便识别所属的侧。在本示例中,我们将 ROI 命名为 A1-A16。
- 返回 Template Image 和 Alignment,以从新捕获或库中替换为侧 B 的图像。
- 使用每个 ROI 旁边的锁图标,以避免移动侧 A 的 ROI,然后为侧 B 绘制并命名 ROI。
备注
对于更复杂的配方,可以对需要检测的视图数量重复此过程。
- 使用来自两侧 A 和 B 的图像对分类模型进行标注和训练。拍摄并标注侧 A 时,不要标注侧 B 的 ROI,反之亦然。
![]() | ![]() |
---|---|
Labeling side A (Pass) | Labeling side A (Fail) |
![]() | ![]() |
Labeling side B (Pass) | Labeling side B (Fail) |
配置 Node-RED 逻辑
- 导航到 IO Block(从 Recipe Editor 的 Configure IO)以打开您的 Node-RED 流。
- 创建一个源以告诉 OV20i 当前正在检查哪一侧。
备注
这可以是机器人位置数据、来自 PLC 的信息,或您想要使用的任何其他信息。下面的示例中,我们将使用两个 Inject 节点来模拟:一个发送字符串 "A",一个发送字符串 "B"。
- 由于传入的侧数据可能是瞬态的,但我们想要检查活动的是哪一侧,因此将状态数据存储为一个 Flow 变量,该变量将持续到接收到下一条侧信息。将您的数据源连接到包含以下代码的函数块:
flow.set('side',msg.payload);
return msg;
- 可以通过打开 context 数据侧栏、发送一条消息,然后在 Flow variable 窗格中点击 刷新 来测试侧数据是否正确存储。数据流窗格仅在使用小型 refresh 按钮手动刷新时才会更新。
- 一旦侧数据正确存储在 Flow variable 中,添加一个连接到 All Block Outputs 的 switch 节点。这将是根据 Flow variable 中活动的侧来路由带有检测数据的消息的区块。将其配置为查看 Flow 变量,并在 A 活动时将消息路由到端口 1,B 活动时路由到端口 2。
备注
对于更复杂的配方,可以对需要检测的视图数量重复此过程。
- 将 switch 的每个输出端口连接到一个 Classification Block Logic block,并根据您要检测的该侧的规则进行配置。Switch 节点一次只会将消息路由到其中一个节点。下图显示了用于交换口 B 的配置。请注意它没有引用 A 的 ROI,因此当检测通过该节点路由时,该侧的结果将被忽略。
- 最后,将 逻辑块连接到 Inspection Pass/Fail block。这可以使结果在 HMI 上显示,并传递给任何附加的 PLC 或其他流组件。
测试配方
现在 Node-RED 流已配置完毕,是时候对配方进行端到端测试。
- 首先,我们将使用 Node-RED 的 inject 节点发送 A 侧指令。然后使用 HMI 检查一个合格部件。请注意,尽管 B 侧的某些区域失败,整个检测仍然通过。
- 现在在 A 侧移除一个钻头并再次检测时,我们得到我们想要的失败结果。
- 继续到 B 侧时,使用 Node-RED inject 发送 B 信号,并在上下文数据窗格的 Flow 变量部分点击 刷新,以确保其已存储。
- 现在切换到良品的 B 侧时,尽管 A 侧的区域全部失败,检测仍然通过。
恭喜!您现在已掌握在部件的多个视图之间使用单一配方和模型的方法。这将允许在高速条件下执行复杂的检测,并实现与机器人之间的紧密集成。它还将为您节省大量时间,避免为同一检测在不同视图上训练多种模型。