AI 驅動文件
您想了解什麼?
訓練分割器
本指南介紹如何設定和配置 OV80i 分割功能,以自動檢測、測量和分析零件中的特定特徵或缺陷。當您需要識別不規則形狀、測量面積或檢測簡單分類無法處理的特定模式時,請使用分割功能。
影片指南
觀看本主題的實際操作:如何在幾分鐘內建立分割程式
何時使用分割: 表面缺陷、液體洩漏、不規則形狀、面積測量、模式檢測,或任何需要畫素級精度的特徵。
開始之前
您將需要
- 已設定並連線的 OV80i 相機系統
- 具有您想要分割的特徵的測試零件(例如,帶有鉛筆標記的紙張)
- 適合您特定應用的良好光照條件
- 15-20 張用於訓練的樣本影象
第一步:建立分割程式
1.1 開始新程式
- 導航至 All Recipes 頁面
- 點選
+ New Recipe(右上角)
- 輸入程式名稱: 使用描述性名稱,如 "Pencil_Mark_Detection" 或 "Surface_Defect_Segmentation"
- 選擇程式型別: 從下拉選單中選擇 "Segmentation"
- 點選
OK建立
1.2 啟用程式
- 在列表中找到您的程式(顯示為 "Inactive")
- 點選
Activate - 點選
Activate and go to editor確認並啟動程式編輯器
✅ 結果: 程式現在為 "Active" 狀態,並顯示程式編輯器。
第二步:配置相機設定
2.1 開啟影象配置
- 點選
Configure Imaging(左下角)

2.2 最佳化分割的對焦
對焦對準確的邊緣檢測至關重要:
- 將測試零件定位在相機視野中
- 轉動鏡頭對焦環,直到邊緣清晰銳利
- 使用不同的零件進行測試,以確保在整個範圍內保持一致的對焦
提示
- 對焦於缺陷/特徵將出現的表面
- 確保整個感興趣區域清晰對焦
- 對於分割來說,輕微過銳比模糊對焦更好
2.3 設定最佳曝光
適當的曝光可確保一致的特徵檢測:
- 調整曝光以獲得均衡的照明
- 避免過度曝光的區域(純白色區域)
- 確保特徵可見且具有良好的對比度
分割曝光指南:
- 特徵應與背景形成清晰的對比
- 避免可能被誤認為缺陷的陰影
- 使用不同的零件條件進行測試(乾淨、髒汙、磨損)
2.4 配置 LED 照明模式
根據要分割的物件選擇照明:
| 特徵型別 | 推薦照明 | 原因 |
|---|---|---|
| 表面缺陷 | 明場 | 均勻照明可顯示錶面不規則性 |
| 劃痕/裂縫 | 側光 | 產生陰影,突出線性缺陷 |
| 凸起特徵 | 暗場 | 使凸起區域從背景中突出 |
| 液體洩漏 | 側光 | 顯示錶面紋理差異 |
2.5 調整 Gamma 以增強特徵
- 增大 Gamma 以增強特徵與背景之間的對比度
- 在檢視目標特徵時測試不同的值
- 找到使特徵最易區分的設定
2.6 儲存配置
- 在實時預覽中檢查設定
- 點選
Save Imaging Settings

✅ 檢查點: 特徵應清晰可見,對比度良好。
第三步:設定模板與對齊
3.1 導航至模板部分
在麵包屑選單中點選 "Template Image and Alignment"
3.2 配置對齊(可選)
![]()
在本示例中,我們將跳過對齊:
- 如果零件位置始終一致,選擇
Skip Aligner - 點選
Save

何時使用對齊器: 當零件到達時位置或方向存在變化,且會影響分割精度時啟用。
第四步:定義檢測區域
4.1 導航至檢測設定
在麵包屑選單中點選 "Inspection Setup"
4.2 設定感興趣區域 (ROI)
ROI 定義了分割發生的位置:
- 在相機視野中放置一個測試零件
- 拖動 ROI 角點以框定檢測區域
- 合理調整 ROI 大小:
- 包含所有可能出現特徵的區域
- 排除不必要的背景區域
- 在預期特徵位置周圍留出小的緩衝空間

4.3 分割 ROI 最佳實踐
| 應該做 | 不應做 |
|---|---|
| 覆蓋整個檢測表面 | 包含無關的背景物體 |
| 在邊緣周圍留出緩衝空間 | 使 ROI 過小而無法容納特徵變化 |
| 考慮零件位置的變化 | 與夾具或工裝重疊 |
| 使用最大的預期特徵進行測試 | 包含帶有永久性標記的區域 |
4.4 儲存 ROI 設定
- 驗證 ROI 覆蓋所有目標區域
- 點選
Save
第五步:標註訓練資料
5.1 導航至 Label And Train
在麵包屑選單中點選 "Label And Train"
5.2 配置檢測類別
- 在 Inspection Types 下點選
Edit - 將類別重新命名以匹配您的特徵(例如 "Pencil Mark"、"Surface Defect"、"Spill Area")
- 選擇類別顏色以便視覺識別
- 儲存更改
5.3 捕獲並標註訓練影象
您至少需要 10 張已標註的影象,但推薦 15-20 張:
影象捕獲流程
- 將第一個測試零件放置在檢測區域內
- 使用相機介面拍攝影象
- 使用畫筆工具在目標特徵上進行塗抹
- 準確塗抹:
- 覆蓋整個特徵區域
- 保持在特徵邊界內
- 不要塗抹背景區域
- 使用一致的標註方法
- 點選
Save Annotations - 對下一個零件重複此操作

標籤標註最佳實踐
| 良好標註 | 不良標註 |
|---|---|
| 精確的特徵邊界 | 邊緣繪製粗糙 |
| 一致的特徵定義 | 標準不一致 |
| 完整的特徵覆蓋 | 遺漏特徵區域 |
| 乾淨的背景(未繪製) | 意外繪製到背景 |
5.4 訓練資料多樣性
確保您的訓練集包含:
- 不同的特徵尺寸
- 各種特徵強度
- ROI 內的多個位置
- 不同的光照條件(如適用)
- 邊緣情況和臨界示例
5.5 訓練資料質量檢查
- 審查所有已標註的影象
- 驗證標註方式的一致性
- 刪除任何標註錯誤的示例
- 必要時新增更多示例
第六步:訓練分割模型
6.1 啟動訓練流程
- 標註完成後點選
Return to Live - 點選
Train Segmentation Model

6.2 配置訓練引數
- 設定迭代次數:
- 快速訓練: 50-100 次迭代(5-10 分鐘)
- 生產質量: 200-500 次迭代(15-30 分鐘)
- 高精度: 500+ 次迭代(30+ 分鐘)
- 點選
Start Training
6.3 監控訓練進度
訓練進度顯示:
- 當前迭代次數
- 訓練準確率百分比
- 預計完成時間

訓練控制:
- 中止訓練: 出現問題時停止
- 提前完成訓練: 準確率達到要求時停止

提示
- 85% 準確率通常適用於生產
- 訓練在達到目標準確率時自動停止
- 更多的訓練資料往往比更多的迭代次數更有效
第七步:測試分割效能
7.1 訪問實時預覽
- 訓練完成後點選
Live Preview - 使用各種零件進行測試:
- 已知合格零件(應顯示無/極少分割)
- 已知缺陷零件(應突出顯示缺陷)
- 邊緣情況和臨界示例

7.2 評估結果
檢查分割質量:
| 指標 | 良好表現 | 需要改進 |
|---|---|---|
| 準確性 | 穩定地識別真實特徵 | 遺漏明顯特徵 |
| 精確度 | 誤報較少 | 大量背景區域被高亮 |
| 邊緣質量 | 乾淨、準確的邊界 | 粗糙或不準確的邊緣 |
| 一致性 | 重複測試結果相似 | 結果差異很大 |
7.3 結果不佳故障排除
| 問題 | 可能原因 | 解決方案 |
|---|---|---|
| 遺漏特徵 | 訓練資料不足 | 新增更多標註示例 |
| 誤報 | 光照/對比度差 | 改善影象設定 |
| 邊緣粗糙 | 影象質量差 | 改善對焦/光照 |
| 結果不一致 | 訓練多樣性不足 | 新增更多多樣化示例 |
第 8 步:配置透過/失敗邏輯
8.1 訪問 IO模組
- 確保 AI 模型顯示為綠色(已訓練狀態)
- 透過麵包屑選單導航至 IO模組
8.2 移除預設邏輯
- 刪除 Classification Block Logic 節點
- 準備構建自定義分割邏輯
8.3 構建分割流程
使用以下元件建立 Node-RED 流程:
- 從左側面板拖動節點:
- Function 節點(用於邏輯)
- Debug 節點(用於測試)
- 最終的 Pass/Fail 節點
- 使用連線連線節點

8.4 根據需求配置邏輯
選項 A:未檢測到缺陷時透過
用例: 任何檢測到的特徵均視為失敗的質量檢測
Function 節點程式碼:
const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length <1; // Pass if no features found
msg.payload = results;
return msg;
選項 B:僅在缺陷較小時透過
用例: 接受尺寸低於閾值的輕微缺陷
Function 節點程式碼:
const threshold = 500; // Adjust pixel count threshold
const allBlobs = msg.payload.segmentation.blobs;
const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold);
msg.payload = allUnderThreshold;
return msg;
選項 C:缺陷總面積較小時透過
用例: 接受缺陷總面積有限的部件
Function 節點程式碼:
const threshold = 5000; // Adjust total pixel threshold
const allBlobs = msg.payload.segmentation.blobs;
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0);
msg.payload = totalArea < threshold;
return msg;
8.5 配置 Function 節點
- 雙擊 Function 節點
- 從上述示例複製相應程式碼
- 貼上到 "On Message" 選項卡
- 根據您的應用調整閾值
- 點選
Done
8.6 部署並測試邏輯
- 點選
Deploy以啟用邏輯 - 導航至 HMI 進行測試
- 使用已知的合格件和不合格件進行測試
- 驗證透過/失敗結果是否符合預期
第 9 步:生產驗證
9.1 全面測試
使用以下項測試分割系統:
| 測試用例 | 預期結果 | 失敗時的操作 |
|---|---|---|
| 乾淨部件 | 透過(無分割) | 調整閾值或重新訓練 |
| 輕微缺陷 | 根據您的標準透過/失敗 | 最佳化邏輯引數 |
| 嚴重缺陷 | 失敗(清晰的分割) | 檢查模型準確性 |
| 邊緣情況 | 行為一致 | 新增訓練資料 |
9.2 效能驗證
監控以下指標:
- 每次檢測的處理時間
- 多次測試的一致性
- 生產照明條件下的準確性
- 長時間執行的可靠性
9.3 最終調整
如果效能不理想:
- 為邊緣情況新增更多訓練資料
- 調整邏輯中的閾值
- 改善成像條件
- 透過額外迭代重新訓練模型
成功!您的分割系統已就緒
您現在擁有一個可正常工作的分割系統,能夠:
- 自動檢測特定特徵或缺陷
- 以畫素級精度測量面積
- 根據您的需求應用自定義透過/失敗邏輯
- 透過 I/O 控制與生產系統整合
高階配置選項
自定義閾值邏輯
對於複雜的驗收標準,可組合多個條件:
const smallThreshold = 200;
const largeThreshold = 1000;
const maxTotalArea = 3000;
const allBlobs = msg.payload.segmentation.blobs;
const smallBlobs = allBlobs.filter(blob => blob.pixel_count < smallThreshold);
const largeBlobs = allBlobs.filter(blob => blob.pixel_count > largeThreshold);
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_c