跳到主要内容

AI 驱动文档

您想了解什么?

在单个程序中使用多个视图

OV10i 注意

OV10i 仅支持分类模型。本页提到的分割功能仅在 OV20iOV80i 摄像头上可用。

本指南将向您展示如何设置单个程序,使其能够检查不同的零件、角度或视图,而无需切换到其他程序。这样做的原因有很多,但主要有两种使用场景:

  • 当两次捕获之间没有足够的时间切换程序时;
  • 当需要对多个零件或零件的多个角度执行相同的检查时(例如,检查汽车车身上五个不同位置的螺柱有无)。在这种情况下,此方法可避免在不同程序中多次训练同一个模型(螺柱有无)。
备注

以下示例是一个包含两个视图和一种检查类型的简单版本,但您可以将此技术用于数量不限的检查类型和视图。在此次检查中,我们将检查一个钻头盒两侧钻头的有无。一侧底部有五个钻头,另一侧顶部和底部共有八个钻头。我们将有 16 个钻头的一侧称为 A 面,有 5 个钻头的一侧称为 B 面。

A 面B 面
A 面(16 个钻头)B 面(5 个钻头)

创建并训练新程序

由于两侧布局不同,我们不为每一侧创建单独的程序,而是将两侧合并到一个程序中,这样就无需两次训练相同的有无检测模型。

  1. 创建一个新程序。本例中是一个分类程序,但同样的原理也适用于分割。

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

备注

在同一程序上检查多个视图时,对齐器不可用。模板图像和对齐器仅用于为检查设置设定基准图像。

模板图像和对齐 - 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模块(从程序编辑器中点击 Configure IO)以打开您的 Node-RED 流程。

  2. 创建一个数据源,告诉 OV10i 当前正在检查哪一面。

备注

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

  1. 由于传入的面数据可能是瞬时的,但我们希望检查哪一面处于活动状态,因此我们将使用 Flow variable 存储状态数据,该数据将持续保留直到接收到下一个面信息。将您的数据源连接到包含以下代码的函数模块:
flow.set('side',msg.payload);
return msg;

Edit function node

  1. 您可以通过打开 context 数据侧边栏、发送消息,然后点击 Flow variable 窗格上的 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 node 一次只会将消息路由到其中一个节点。下图显示了 switch 的 B 面端口的配置。请注意,它没有引用任何 A 面的 ROI,因此当检查通过此节点路由时,逻辑将忽略该面的结果。

Edit Classification Block Logic node

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

Node-RED Flow

测试程序

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

  1. 首先,我们将使用 Node-RED inject node 发送 A 面命令。然后,我们将使用 HMI 检查一个合格零件。请注意,尽管其中一个 B 面区域失败,但整个检查仍然通过。

HMI side A, pass

  1. 现在,当我们移除 A 面的一个钻头并再次检查时,我们获得了期望的失败结果。

HMI side A, fail

  1. 继续进行 B 面检查,我们使用 Node-RED inject 发送 B 信号,并 refresh context 数据窗格中的 Flow variable 部分以确保其已被存储。

Node-RED Flow B

  1. 现在,当我们翻转到合格零件的 B 面时,我们看到尽管 A 面的所有区域都失败,但检查仍然通过。

HMI side B, pass

恭喜!您现在已经了解如何在零件的多个视图中使用同一个程序和模型。这将允许以高速进行复杂检查,并与机器人实现紧密集成。这也将为您节省大量时间,避免训练多个执行相同检查但仅针对不同视图的模型。