AI 驅動文件
您想了解什麼?
在單一配方中的多檢視
本指南向您展示如何設定一個單一的配方,以便在不切換到其他配方的情況下對不同部件、角度或檢視進行檢測。這樣做有多種原因,但有兩個主要使用場景:
- 當在捕獲之間沒有足夠的時間切換配方時,
- 當對同一部件的多個部位或角度執行相同的檢測時(例如在車身五個不同位置的螺柱的存在/不存在)。在這種情況下,該方法可避免在不同配方中對同一存在/不存在模型進行多次訓練。
以下示例是一個簡單版本,只有兩檢視和一種檢測型別,但您可以對同樣的技術應用於無限數量的檢測型別和檢視。在此檢測中,我們將檢查鑽頭盒兩側鑽頭位的存在/不存在。一側底部有五個位,另一側在頂部和底部各有八個位,總共有16個位。我們將擁有16個位的一側稱為 Side A,五個位的一側稱為 Side B。
![]() | ![]() |
|---|---|
| Side A(16 位) | Side B(5 位) |
建立並訓練新配方
由於兩側佈局不同,我們將把兩邊合併為一個配方,以避免就同一存在/不存在模型在兩邊重複訓練。
-
建立一個新配方。在此示例中,這是一個 classification 配方,但同樣的原則也可用於 segmentation。
-
為第一檢視設定模板影象和對齊:
在同一配方上對多檢視進行檢測時,對齊器在不可用。模板影象和對齊器僅用於為 Inspection Setup 設定基準影象。

- 為 Side A 繪製 ROI。為幫助識別所屬邊,請將其命名。在本例中,我們將 ROI 命名為 A1-A16。

- 返回模板影象與對齊,將影象換成 Side B,可以來自新捕獲的影象或庫中的影象。

- 使用每個 ROI 旁邊的鎖定圖示,避免移動 Side A 的 ROI,然後為 Side B 繪製並命名 Side B 的 ROI。

對於更復雜的配方,重複此過程以實現你想要檢查的任意數量的不同檢視。
- 使用來自 Side A 和 Side B 的影象對分類模型進行標註和訓練。在捕獲並標註 Side A 時,不要標註 Side B 的 ROI,反之亦然。
![]() | ![]() |
|---|---|
| Side A 透過標註 | Side A 失敗標註 |
![]() | ![]() |
| Side B 透過標註 | Side B 失敗標註 |
配置 Node-RED 邏輯
-
導航至 IO Block(Recipe Editor 中的 Configure IO)以開啟你的 Node-RED 流。
-
建立一個源以告知 OV10i 當前正在檢查的側面。
這可以是機器人位置資料、來自 PLC 的資訊,或你想使用的任何資訊。在下面的示例中,我們將使用兩個 Inject nodes 來模擬:一個傳送字串 "A",一個傳送字串 "B"。
- 由於進入的側資料可能是瞬時的,但我們希望檢查哪個側處於活動狀態,因此我們將使用一個 Flow variable 來儲存狀態資料,該資料會在接收到下一條側資訊之前持續存在。將資料來源連線到包含以下程式碼的 function block:
flow.set('side',msg.payload);
return msg;

- 可以透過開啟 context 資料側邊欄,傳送一條訊息,然後在 Flow variable 窗格上點選 refresh 來測試側資料是否正確儲存。流資料窗格僅在手動使用小型 refresh 按鈕重新整理時才會更新。

- 一旦側資料已正確儲存在 Flow variable,新增一個連線到 All Block Outputs 的 switch node。這將是根據 Flow variable 中活動的側來路由帶有檢查資料的訊息的節點。將其配置為檢視 Flow variable,並在 A 側 活動時將訊息路由到埠 1,B 側 活動時路由到埠 2。

對於更復雜的配方,請對你想要檢查的更多不同檢視重複此過程。
- 將 switch 的每個輸出埠連線到 Classification Block Logic block,並根據你想要針對該側檢查的規則進行配置。switch 節點一次只會將訊息路由到其中一個節點。下方的圖片展示了 switch 的 B 側埠的配置。請注意,它沒有引用 A ROI,因此當檢查透過此節點路由時,邏輯將忽略該側的結果。

- 最後,將 logic blocks 連線到 Inspection Pass/Fail block。這樣結果就能顯示在 HMI 上,並傳遞給任何連線的 PLC 或其他流元件。

測試配方
現在 Node-RED 流已配置好,是時候對配方進行端到端測試了。
- 首先,我們將使用 Node-RED 的 inject node 傳送 A 側命令,然後使用 HMI 對良品進行檢查。請注意,儘管 B 側區域中的某個區域失效,整次檢查仍然透過。

- 現在當對 A 側移除一個鑽頭並再次進行檢查時,我們得到期望的失敗結果。

- 接下來進入 B 側,我們使用 Node-RED 的 inject 傳送 B 訊號,並在 context 資料窗格中的 Flow variable 區段執行 refresh 以確保它已被儲存。

- 現在切換到良品的 B 側時,儘管 A 側的所有區域都失效,檢查仍然透過。

恭喜!您現在知道如何在同一配方和模型下針對部件的多種檢視進行使用。這將實現高速度下的複雜檢查,並與機器人實現緊密整合。它也會省下大量時間,避免為在不同檢視上執行同一檢查而訓練多模型。





