跳到主要內容

AI 驅動文件

您想了解什麼?

在單個程式中使用多個檢視

OV10i 注意

OV10i 僅支援分類模型。本頁提到的分割功能僅在 OV20i 和 OV80i 攝像頭上可用。

本指南將向您展示如何設定單個程式,使其能夠檢查不同的零件、角度或檢視,而無需切換到其他程式。這樣做的原因有很多,但主要有兩種使用場景:

  • 當兩次捕獲之間沒有足夠的時間切換程式時;
  • 當需要對多個零件或零件的多個角度執行相同的檢查時(例如,檢查汽車車身上五個不同位置的螺柱有無)。在這種情況下,此方法可避免在不同程式中多次訓練同一個模型(螺柱有無)。
備註

以下示例是一個包含兩個檢視和一種檢查型別的簡單版本,但您可以將此技術用於數量不限的檢查型別和檢視。在此次檢查中,我們將檢查一個鑽頭盒兩側鑽頭的有無。一側底部有五個鑽頭,另一側頂部和底部共有八個鑽頭。我們將有 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 Outputs 的 switch 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

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