跳到主要内容

同一配方中的多视图

本指南演示如何在不切换到其他配方的情况下,设置一个配方以检查不同部件、角度或视图。

有多种原因需要这样做,但主要有两种使用场景:

  • 捕获之间的时间不足以切换配方时,
  • 当对同一部件的多个部位或角度执行相同的检测时(例如,在车身的五个不同位置上检测螺柱的存在/不存在)。在这种情况下,该方法可避免在不同配方中对同一模型(螺柱存在/不存在)重复训练多次。
备注

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

侧 A侧 B
侧 A (16 位)侧 B (5 位)

创建并训练一个新配方

与每面各自一个配方不同,由于布局不同,我们将把两侧合并到一个配方中,这样就不需要对同一存在/不存在模型进行两次训练。

  1. 创建一个新配方。在这种情况下,这是一个分类配方,但同样的原理也可用于 segmentation(分割)。

  2. 为第一视图设置模板图像和对齐:

备注

在同一配方上检查多视图时,Aligner(对齐器)不可用。模板图像和对齐器仅用于为 Inspect 设置基准图像。

模板图像与对齐 - 侧 A

  1. 为侧 A 绘制 ROI。给它们命名,以便识别所属侧。在本例中,我们将 ROI 命名为 A1-A16。

ROI - 侧 A

  1. 返回模板图像与对齐,使用侧 B 的图像替换当前图像,可以来自新捕获或库中。

模板图像与对齐 - 侧 B

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

ROI - 侧 B

备注

对于更复杂的配方,请按需重复此过程,以检测更多不同的视图。

  1. 使用来自侧 A 和侧 B 的图像对分类模型进行标注与训练。在捕获并标注侧 A 时,请不要标注侧 B 的 ROI,反之亦然。
侧 A 通过标注侧 A 失败标注
为侧 A 标注(通过)为侧 A 标注(失败)
侧 B 通过标注侧 B 失败标注
为侧 B 标注(通过)为侧 B 标注(失败)

配置 Node-RED 逻辑

  1. 转到 IO Block(来自 Recipe Editor 的 Configure IO)以打开您的 Node-RED flow。

  2. 创建一个源,用于告诉 OV80i 当前正在检测哪一侧。

备注

这可以是机器人位置数据、来自 PLC 的信息,或你想使用的任何其他信息。在下方示例中,我们将使用两个 Inject nodes 来模拟:一个发送字符串 "A",另一个发送字符串 "B"。

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

Edit function node

  1. 您可以通过打开 context 数据侧边栏,发送消息,然后在 Flow variable pane 上点击小的 refresh 按钮来测试侧边数据是否已正确存储。Flow 数据窗格只有在手动刷新时才会更新,使用小型的 refresh 按钮。

Context menu

  1. 一旦在 Flow variable 中正确存储了侧边数据,添加一个连接到 All Block Outputsswitch node。这将是根据 Flow variable 中活动的侧边来路由带有检测数据的消息的节点。将其配置为读取 Flow variable,并在 A 活动时将消息路由到端口 1,B 活动时路由到端口 2。

Edit switch node

备注

对于更复杂的配方,可以对你希望检测的不同视图重复此过程,直到覆盖所需的视图数量。

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

Edit Classification Block Logic node

  1. 最后,将 logic blocks 连接到 Inspection Pass/Fail block。这使得结果可以在 HMI 上显示,并被传递给任何连接的 PLC 或其他 flow 组件。

Node-RED Flow

测试配方

现在 Node-RED flow 已配置完成,是时候对配方进行端到端测试了。

  1. 首先,我们将使用 Node-RED 的 inject 节点发送 A-side 指令。然后使用 HMI 对一个良品进行检测。请注意,尽管 B-side 区域中的一个区域失败,整个检测仍通过。

HMI side A, pass

  1. 现在,当我们在 A-side 移除钻头并再次检测时,我们得到我们想要的失败结果。

HMI side A, fail

  1. 接着切换到 B-side 的良品,我们使用 Node-RED 的 inject 发送 B 信号,并在 context 数据窗格的 Flow variable 区段执行 refresh,以确保它已存储。

Node-RED Flow B

  1. 现在切换到良品的 B-side 时,尽管 A-side 区域全部失败,检测仍然通过。

HMI side B, pass

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