跳到主要内容

AI 驱动文档

您想了解什么?

在单一配方中的多视图

OV10i Note

OV10i 仅支持 classification 模型。本页提及的 segmentation 功能在 OV20iOV80i 相机上可用。

本指南向您展示如何设置一个单一的配方,以便在不切换到其他配方的情况下对不同部件、角度或视图进行检测。这样做有多种原因,但有两个主要使用场景:

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

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

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

创建并训练新配方

由于两侧布局不同,我们将把两边合并为一个配方,以避免就同一存在/不存在模型在两边重复训练。

  1. 创建一个新配方。在此示例中,这是一个 classification 配方,但同样的原则也可用于 segmentation。

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

备注

在同一配方上对多视图进行检测时,对齐器在不可用。模板图像和对齐器仅用于为 Inspection Setup 设置基准图像。

Template image and alignment- Side A

  1. 为 Side A 绘制 ROI。为帮助识别所属边,请将其命名。在本例中,我们将 ROI 命名为 A1-A16。

ROIs - Side A

  1. 返回模板图像与对齐,将图像换成 Side B,可以来自新捕获的图像或库中的图像。

Template image and alignment- Side B

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

ROIs - Side B

备注

对于更复杂的配方,重复此过程以实现你想要检查的任意数量的不同视图。

  1. 使用来自 Side A 和 Side B 的图像对分类模型进行标注和训练。在捕获并标注 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 nodes 来模拟:一个发送字符串 "A",一个发送字符串 "B"。

  1. 由于进入的侧数据可能是瞬时的,但我们希望检查哪个侧处于活动状态,因此我们将使用一个 Flow variable 来存储状态数据,该数据会在接收到下一条侧信息之前持续存在。将数据源连接到包含以下代码的 function block:
flow.set('side',msg.payload);
return msg;

Edit function node

  1. 可以通过打开 context 数据侧边栏,发送一条消息,然后在 Flow variable 窗格上点击 refresh 来测试侧数据是否正确存储。流数据窗格仅在手动使用小型 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 节点一次只会将消息路由到其中一个节点。下方的图片展示了 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 信号,并在 context 数据窗格中的 Flow variable 区段执行 refresh 以确保它已被存储。

Node-RED Flow B

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

HMI side B, pass

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