跳到主要內容

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

恭喜!您現在已經瞭解如何在零件的多個檢視中使用同一個程式和模型。這將允許以高速進行復雜檢查,並與機器人實現緊密整合。這也將為您節省大量時間,避免訓練多個執行相同檢查但僅針對不同檢視的模型。