AI 驅動文件
您想了解什麼?
後設資料設定
本指南向您展示如何為 OV10i 相機影象配置後設資料。後設資料是與每個捕獲影象一起儲存的自定義資訊,幫助您跟蹤重要細節,如零件編號、序列號或生產資料。
何時使用後設資料: 生產跟蹤、零件識別、質量控制記錄、批次資訊、操作員識別或您需要與檢查影象關聯的任何自定義資料。
先決條件
- OV10i 相機系統已設定並連線
- 配置了帶有成像和檢查設定的活動配方
- 至少配置了一個 AI 塊(分類或分割)
- 理解您希望從檢查結果中跟蹤的資料
什麼是後設資料?
後設資料是附加到每個捕獲影象的資訊。這些資訊:
- 與影象一起儲存在相機的庫中
- 在 HMI 中顯示供操作員檢視
- 幫助識別和跟蹤特定零件或生產批次
- 可在庫中搜尋以進行分析
有用的後設資料示例:
- 零件編號(例如,“P12345”)
- 序列號(例如,“SN987654”)
- 操作員姓名(例如,“John_Smith”)
- 班次資訊(例如,“A_Shift”)
- 批次編號(例如,“Batch_2025_001”)
後設資料只能在檢查完成後儲存。後設資料必須是從相機捕獲並處理影象後,從“所有塊輸出”開始的流程的一部分。
步驟 1:訪問 Node-RED 編輯器
1.1 導航到 IO 塊
- 在配方編輯器中開啟您的活動配方
- 點選 配置 IO 或在麵包屑選單中選擇 IO 塊 以進入 Node-RED 編輯器
1.2 驗證 Node-RED 介面
檢查點: 您應該看到 Node-RED 流編輯器,左側有現有的 IO 塊流和節點面板。
步驟 2:找到“所有塊輸出”節點
2.1 找到起始點
在您的 Node-RED 流中,尋找 “所有塊輸出” 節點。這是接收來自相機的資料的起始點,檢查被觸發並處理後。
“所有塊輸出”節點:
- 包含所有 AI 塊的檢查結果
- 包括影象捕獲資訊
- 提供建立後設資料所需的資料
- 是提供後設資料和合格/不合格決策的源
2.2 理解流結構
您的流應遵循以下模式:
Camera Trigger → AI Processing → All Block Outputs → [Your Custom Logic]
從“所有塊輸出”您需要 兩個獨立路徑:
- 後設資料路徑:所有塊輸出 → 函式(建立後設資料) → 捕獲後設資料
- 決策路徑:所有塊輸出 → 函式(邏輯) → 最終合格/不合格
後設資料和合格/不合格決策必須從“所有塊輸出”節點分支。
步驟 3:新增捕獲後設資料節點
3.1 找到後設資料節點
- 在左側面板中找到“捕獲後設資料”節點(概述部分)
- 將“捕獲後設資料”節點拖到流畫布上
- 將其放置在觸發 之後,但在影象捕獲 之前
3.2 流程中的節點放置
正確的流程結構:
All Block Outputs → Function (Create Metadata) → Capture Metadata
↓
Function (Pass/Fail Logic) → Final Pass/Fail
“最終透過/失敗”節點是必需的,以確保流程正常工作。每個流程必須以此節點結束。
第 4 步:配置後設資料欄位
4.1 設定基本後設資料
- 雙擊捕獲後設資料節點
- 配置您希望跟蹤的後設資料欄位
- 為每個欄位設定資料來源
4.2 後設資料格式要求
後設資料必須格式化為一個物件,包含:
- 字串鍵 - 欄位名稱必須為文字
- 字串或數字值 - 資料可以是文字或數字
正確格式示例:
{
"part_number": "P12345",
"serial_number": "SN987654",
"operator": "John_Smith",
"shift": "A",
"quantity": 100,
"temperature": 23.5
}
第 5 步:建立後設資料功能節點
5.1 新增用於後設資料建立的功能節點
- 在“所有塊輸出”和“捕獲後設資料”節點之間新增一個“功能”節點
- 雙擊功能節點進行配置
- 此功能將從檢測結果中提取資料並建立後設資料
5.2 從所有塊輸出提取資料
“所有塊輸出”節點提供豐富的檢測資料。以下是提取資料的方法:
// Extract data from inspection results
const captureId = msg.payload.capture_id;
const serialNumber = msg.payload.serial_number || "No_Serial";
const inspectionTime = msg.payload.inspection_time || new Date().toISOString();
// Create metadata from inspection data
msg.payload = {
"capture_id": captureId,
"serial_number": serialNumber,
"inspection_time": inspectionTime,
"operator": global.get("current_operator") || "Unknown"
};
return msg;
5.3 靜態後設資料(固定值)
對於在生產過程中不會改變的資訊:
// Set static metadata values
msg.payload = {
"recipe_name": "Bolt_Inspection_v2",
"line_number": "Line_3",
"shift": "A_Shift",
"station": "QC_Station_1"
};
return msg;
5.4 動態後設資料(使用檢測資料)
對於來自檢測結果的資訊:
// Extract inspection data
const captureId = msg.payload.capture_id;
const imageUrl = msg.payload.image_url;
const predictions = msg.payload.classification?.predictions || [];
// Create dynamic metadata
msg.payload = {
"capture_id": captureId,
"part_number": "P" + Date.now(),
"total_rois": predictions.length,
"timestamp": new Date().toISOString(),
"batch": global.get("current_batch") || "Default_Batch"
};
return msg;
第 6 步:連線後設資料和透過/失敗流程
6.1 必需的流程結構
每個流程必須具有來自“所有塊輸出”的兩個路徑:
All Block Outputs → Function (Create Metadata) → Capture Metadata
↓
Function (Pass/Fail Logic) → Final Pass/Fail
6.2 連線後設資料路徑
- 將“所有塊輸出”輸出連線到您的後設資料功能輸入
- 將後設資料功能輸出連線到“捕獲後設資料”輸入
- 捕獲後設資料節點可以是終端節點(不需要輸出連線)
6.3 連線合格/不合格路徑
- 將 "All Block Outputs" 輸出連線到合格/不合格邏輯函式
- 將邏輯函式輸出連線到 "Final Pass/Fail" 輸入
- "Final Pass/Fail" 節點是必需的 - 每個流程必須在此結束
6.4 示例合格/不合格邏輯函式
// Extract inspection result for pass/fail decision
const predictions = msg.payload.classification?.predictions || [];
// Determine if inspection passed (all ROIs passed)
let passed = true;
for (let prediction of predictions) {
if (!prediction.predicted_class.includes("pass")) {
passed = false;
break;
}
}
// Set the pass/fail result
msg.payload = passed;
return msg;
第 7 步:測試後設資料配置
7.1 部署和測試
- 點選 "Deploy" 按鈕(右上角)
- 使用您配置的觸發方法(手動、數字輸入或 PLC)觸發檢查
- 驗證:
- 已捕獲影象
- 後設資料與影象一起出現
- 已做出合格/不合格決定
- 流程成功完成
7.2 驗證完整流程
檢查兩個路徑是否正常工作:
後設資料路徑:
- 在主介面中導航到庫
- 找到您的測試影象
- 驗證影象詳細資訊中出現後設資料
合格/不合格路徑:
- 檢查檢查結果顯示合格/不合格狀態
- 驗證 "Final Pass/Fail" 節點正確處理
- 確認任何連線的輸出(PLC、指示燈)響應適當
7.3 測試不同的觸發源
驗證後設資料與您的特定觸發器一起工作:
對於手動觸發:
- 使用軟體觸發按鈕
- 驗證每次手動捕獲時後設資料出現
對於數字輸入觸發:
- 啟用外部感測器/開關
- 確認觸發影象時捕獲後設資料
對於 PLC 觸發:
- 從 PLC 傳送觸發訊號
- 驗證後設資料包含 PLC 資料(如適用)
第 8 步:高階後設資料配置
8.1 來自多個全域性變數的後設資料
結合來自不同全域性儲存源的資料:
// Combine data from various global storage
const operatorData = global.get("operator_info") || {};
const productData = global.get("product_info") || {};
const shiftData = global.get("shift_info") || {};
msg.payload = {
"operator": operatorData.name || "Unknown",
"operator_id": operatorData.id || "000",
"product_code": productData.code || "Default",
"product_version": productData.version || "1.0",
"shift": shiftData.current || "Day",
"line_status": "Running",
"timestamp": new Date().toISOString()
};
return msg;
第 9 步:故障排除後設資料問題
9.1 常見問題
| 問題 | 症狀 | 解決方案 |
|---|---|---|
| 後設資料未出現 | 庫中沒有資料 | 驗證後設資料節點是否在主 IO 塊流程中 |
| 錯誤影象的後設資料 | 資料與錯誤捕獲一起出現 | 檢查時序 - 後設資料必須在影象捕獲之前 |
| 觸發不起作用 | 沒有捕獲影象 | 驗證 IO 塊觸發配置 |
| 缺少後設資料欄位 | 一些資料缺失 | 檢查函式節點有效負載格式 |
| 錯誤的資料型別 | 節點顯示錯誤狀態 | 確保值僅為字串或數字 |
9.2 除錯後設資料流
新增除錯節點以進行故障排除:
- 在觸發器後新增除錯節點以驗證觸發器是否正常工作
- 在後設資料函式後新增除錯節點以檢查有效負載
- 在捕獲後設資料後新增除錯節點以確認處理
- 檢查除錯面板以獲取錯誤訊息
第10步:最佳實踐
10.1 流設計
設計高效的後設資料流:
- 將後設資料儘早放入流中 - 在觸發器後立即設定後設資料
- 使用單個後設資料節點 - 不要重複使用捕獲後設資料節點
- 保持流的連續性 - 後設資料必須是主要檢查流的一部分
- 處理缺失資料 - 始終提供預設值
10.2 後設資料欄位命名
使用一致且清晰的欄位名稱:
- 使用下劃線而不是空格("part_number" 而不是 "part number")
- 描述性但簡潔("operator" 而不是 "op")
- 使用小寫以保持一致性
- 避免可能導致問題的特殊字元
10.3 效能考慮
對於高產量生產:
- 最小化後設資料大小 - 僅包含必要的資訊
- 使用高效的資料型別 - 儘可能使用數字,短字串
- 避免複雜處理 - 保持後設資料建立簡單快速
- 快取全域性資料 - 將頻繁使用的資料儲存在全域性變數中
成功!您的後設資料系統已準備就緒
您的後設資料配置現在可以:
✅ 將自定義資訊附加到每個觸發的影象捕獲
✅ 跟蹤與檢查流同步的生產資料
✅ 在相機庫中儲存可搜尋的資訊
✅ 在操作員的 HMI 中顯示相關資料
✅ 支援製造要求的可追溯性
持續維護
定期系統檢查
- 驗證後設資料是否與觸發的捕獲一起出現
- 檢查生產執行中是否有缺失資料
- 監控高觸發率下的流效能
- 根據需求變化更新後設資料欄位
流管理
- 審查生產中的後設資料時序
- 最佳化功能節點效能
- 更新全域性變數管理
- 培訓操作員進行基於觸發的操作
下一步
在設定基於觸發的後設資料後:
- 測試所有配置的觸發型別(手動、數字、PLC)
- 培訓操作員正確使用觸發器進行後設資料捕獲
- 設定全域性變數管理以處理動態資料
- 為不同產品線建立後設資料模板
- 使用後設資料分析實施生產監控