AI 驅動文件
您想了解什麼?
OCR(光學字元識別)
OV80i 可直接從相機影象中讀取列印文字、序列號、日期碼以及其他字母數字字元,使用了預訓練的 OCR 模型。與分類器與分割器不同,OCR 無需訓練資料。它開箱即用。
OCR 在以下情況下特別有用:
- 驗證序列號或批次程式碼是否與預期值一致
- 確認標籤存在且可讀
- 讀取日期/到期碼以實現可追溯性
- 在組裝過程中檢查部件上的零件號
OCR 僅在 OV80i 上可用。OV20i 與 OV10i 不支援 OCR。
How OCR Works
OV80i 使用一種兩階段 AI 流水線進行文字識別:
- Text Detection(文字檢測): 在 ROI 內定位文字的位置。對每個檢測到的單詞或文字區域返回邊界框。
- Text Recognition(文字識別): 讀取每個檢測到的邊界框內的字元,並返回帶有置信分數的文字字串。
整個過程在相機的 NVIDIA Jetson Orin NX GPU 上執行。無需雲連線。
該模型支援廣泛的字符集,包括:
- 數字 (0-9)
- 拉丁字母 (A-Z, a-z,帶變音字元)
- 常用標點符號與符號
- 希臘字母
- 貨幣符號
- 數學運算子
字符集是固定的,無法自定義。該模型支援約 480 個字元,覆蓋大多數印刷的拉丁字母基語言的工業文字。
先決條件
在設定 OCR 之前,您需要一臺符合以下條件的相機:
- 物理上已安裝並穩定
- 已連線到網路並可在瀏覽器中訪問
- 已對準要讀取文字的部件
若尚未完成,請先按照入門指南操作:
第一步:建立新配方
每次檢測都從一個配方開始。配方是一個完整的軟體包:影象設定、對齊、檢測區域、AI 模型以及輸出規則。
- 在左側邊欄導航到 All Recipes
- 在右上角點選 + New
- 為你的配方命名一個描述性名稱(例如“序列號檢查”、“標籤驗證”)
- 點選 Activate 使其成為活動配方,然後點選 Edit 開啟配方編輯器

配方編輯器展示完整的檢測流水線。你將從左到右進行操作:
- Imaging Setup(成像設定)
- Image Alignment & Inspection Setup(模板、ROIs)
- AI Blocks(分類、分割、OCR、測量)
- Set Pass/Fail & IO Logic(輸出規則)
有關配方建立的詳細演練,請參閱 Create First Inspection.
第三步:配置影象設定
高質量影象是實現準確 OCR 的基礎。文字必須清晰可見、對比度強。
- 點選 Configure Imaging 或切換到 Imaging Setup 選項卡
- 在觀看實時預覽時,調整以下設定:
| Setting | Goal for OCR |
|---|---|
| Exposure | 亮度足夠清晰地看到所有文字。太暗文字會融入背景。太亮白色標籤會過曝。 |
| Gain | 儘量保持在較低水平。增益過高會引入噪聲,看起來像文字偽影。 |
| Gamma | 調整以改善文字與背景之間的對比度。 |
| Focus | 文字必須清晰銳利。如字元看起來模糊,請調整 C-mount 鏡頭焦環。 |
OCR 的準確性在很大程度上依賴影象質量。相機影象中的文字必須清晰可見,並且與背景具有良好對比。深色文字在淺色背景上或淺色文字在深色背景上都能很好地工作。請避免:
- 造成字元陰影的不均勻照明
- 光澤標籤上的眩光
- 曝光不足使文字難以與背景區分
在實時預覽中放大文字區域。你能清楚地讀出每一個字元嗎?如果你不能讀清,AI 也讀不清。
有關所有成像設定的詳細指南,請參閱 Image Settings.
第三步:設定模板對齊
模板對齊會告訴相機如何跟蹤您零件的位置和方向。這一點很關鍵,因為零件在傳送帶或夾具上並不總是落在完全相同的位置。
- 導航到 模板影象與對齊 選項卡
- 將零件放入相機的視野
- 單擊 Capture Template 以拍攝參考影象
- 在始終存在且易於識別的特徵上繪製 2-3 個小的模板區域(例如角落、徽標、安裝孔)
在零件上儘量讓模板區域彼此相距越遠越好。這能顯著降低對齊時的角度抖動。兩個區域彼此接近會導致旋轉穩定性較差;將兩個區域放在對角線的對角點處會獲得極佳的穩定性。
如果跳過對齊,OCR ROI 將固定為絕對畫素位置。零件的任何移動都會導致 ROI 讀不到文字。請始終為生產用途設定對齊。
有關模板對齊的詳細指南,請參閱 Alignment.
第四步:建立 OCR 檢查區域(ROI)
現在您將精確定義相機應在零件的哪個位置查詢文字。這是確保 OCR 精度的最關鍵步驟。
4a. 導航到 Inspection Setup
- 點選 Recipe Editor 中的 Inspection Setup 選項卡
- 您將看到帶有模板影象的 Inspection Editor
4b. 新增 OCR 模型
- 在右側面板中,查詢 Models 區段
- 如果未在列表中看到 OCR 模型,請在底部點選 Add 按鈕並選擇 OCR
- OCR 模型將出現在 Models 列表中
你只能在每個配方中擁有 一個 OCR 區塊。不過,你可以在該區塊內建立多個 ROI,以從零件的不同區域讀取文字。
4c. 建立一個 OCR ROI
- 確保在 Models 列表中選中(高亮顯示)OCR 模型行
- 在 Region of Interest 區段點選 Add ROI
- 影象上將出現一個新的矩形 ROI
- 將 ROI 拖動以將其定位在你要讀取文字的位置
- 透過拖動角手柄調整大小

4d. 設定 ROI 方向
這是最需要正確設定的一項。你的 ROI 方向必須與要讀取的文字方向一致。
OCR 引擎使用 ROI 的角度來裁剪影象,然後將裁剪區域按文字水平的方式進行處理。如果你的 ROI 角度與文字角度不匹配,引擎將嘗試讀取旋轉文字,可能產生錯誤結果。
示例:
- 文字從左到右水平閱讀:ROI 角度應為 0 度
- 文字順時針旋轉 90 度:ROI 角度應為 90 度
- 文字倒置:ROI 角度應為 180 度
- 文字呈 45 度角:ROI 角度應為 45 度
如何旋轉 ROI:
- 透過單擊 ROI 選中它
- 使用 ROI 角落處的旋轉手柄,或
- 直接在畫布底部的定位欄位中設定角度值
定位欄顯示:H(高度)、W(寬度)、X 與 Y(位置),以及以度為單位的 angle。

4e. 正確設定 ROI 尺寸
- 儘可能緊湊地設定 ROI,以圍繞文字區域。額外的背景會引入噪聲,可能導致誤檢測。
- 在文字週圍留出一個小邊距(10-20 畫素),以避免字元在邊緣被剪裁。
- 不要包含你不想讀取的其他文字。如果有多個文字區域,請為每個區域建立單獨的 ROI。
如果你需要從部件的多個區域讀取文字(例如序列號和日期程式碼),請為每個區域建立一個單獨的 ROI。這樣可以獲得獨立的結果,並使透過/不透過規則更易於配置。
4f. 建立附加 ROI(可選)
為你需要讀取的每個文字區域重複執行步驟 4c-4e。在 Region of Interest 列表中為每個 ROI 指定自己的名稱。透過雙擊名稱,將它們重新命名為描述性的名稱(例如 "Serial Number"、"Date Code"、"Part Label")。
使用複製貼上來複制 ROI。名稱會自動自增(例如,"ROI"、"ROI (1)"、"ROI (2)")。
Step 5: Configure and Test the OCR Block
5a. 導航到 OCR Block
點選 Recipe Editor 標籤欄中的 OCR Block 標籤。你會在左側看到攝像頭畫面,右側是設定面板。

右側面板顯示:
- OPTICAL CHARACTER RECOGNITION 的描述
- 說明這是一個無需訓練資料的預訓練模型
- 使用 Live Preview 或 Test 進行驗證的說明
5b. 啟用 Live Preview
在右上角勾選 Live Preview Mode。攝像頭將開始實時處理幀。

啟用 Live Preview 後,你將看到:
- Processing Time:OCR 模型處理每幀的時間
- Latency:包括影象捕獲與渲染在內的總往返時間
- 在攝像頭畫面上疊加的紫色邊界框,覆蓋檢測到的文字區域
- Detected text 以標籤形式顯示在每個邊界框上
- 右側的 Parameters panel 用於調節檢測設定
5c. 驗證 OCR 的讀取是否正確
開啟 Live Preview 時,將部件放在攝像頭下並驗證:
- Are all text regions detected? 你應該在 ROI 的每個單詞/短語周圍看到紫色邊界框。
- Is the text being read correctly? 標籤應與部件上的實際文字一致。
- Are there false detections? 非文字區域是否被錯誤識別為文字?
- Move the part slightly. OCR 在不同位置是否仍然工作(這測試對齊)?
如果文字未被檢測到或被誤讀,請檢查:
- ROI 方向是否與文字方向一致(見步驟 4d)
- ROI 是否正確定位在文字之上
- 影象質量是否良好(聚焦清晰、對比度良好、光線均勻)
- 試著調整 OCR 引數(見下一節)
Step 6: 調整 OCR 引數
當啟用 Live Preview 時,右側面板會顯示四個可調引數。這些引數控制文字檢測階段(找出文字所在位置),而非識別階段(讀取文字內容)。
| 引數 | 預設值 | 功能描述 |
|---|---|---|
| Text Segmentation Threshold | 0.10 | 檢測器對區域包含文字的置信度閾值。數值越高,檢測越嚴格,誤檢越少,但可能漏掉微弱文字。數值越低越敏感,可以檢測到微弱文字,但可能有誤檢。範圍:0.0 到 1.0。 |
| Unclip Ratio | 4.0 | 從文字輪廓向外擴充套件檢測到的邊界框的程度。數值越高,邊界框越大。若邊框裁剪了大字元的邊緣,請增大該值。若相鄰單詞合併為一個框,請減小。 |
| Unclip Ceiling | 20 | 從“Unclip”擴充套件的最大畫素數上限。該上限防止在大文字上進行過大擴充套件時產生過大的邊界框。若在提高 Unclip Ratio 後仍然將大文字裁剪,請提高該值。 |
| Min Text Area | 500 | 檢測文字區域的最小面積(畫素為單位)。小於該值的區域將被丟棄以視為噪聲。若檢測到一些小的偽影被誤判為文字,請增大該值。若有小但有效的文字被過濾,請減小。 |
從預設值開始。只有在 Live Preview 中看到具體問題時才進行調整:
| 問題 | 要調整的引數 | 方向 |
|---|---|---|
| 非文字區域被檢測為文字 | Text Segmentation Threshold | 增大 |
| 有效文字被漏檢 | Text Segmentation Threshold | 降低 |
| 邊界框裁剪文字邊緣 | Unclip Ratio | 增大 |
| 相鄰單詞合併成一個框 | Unclip Ratio | 降小 |
| 大文字時邊界框變得過大 | Unclip Ceiling | 降小 |
| 提高 Unclip Ratio 後仍將大文字裁剪 | Unclip Ceiling | 增大 |
| 噪聲/偽影被檢測為文字 | Min Text Area | 增大 |
| 小的有效文字被過濾掉 | Min Text Area | 降小 |
在 Live Preview 中引數的更改會立即生效,因此可以進行迭代調優。這些引數在生產捕獲時也同樣適用,而不僅在預覽期間有效。
第7步:使用捕獲影象進行測試
在用實時預覽對引數進行調優後,驗證 OCR 在一系列生產樣本中的表現。
7a. 使用測試面板
- 禁用實時預覽模式(取消勾選覈取方塊)
- 點選 Test 按鈕

- 點選 Select From Library 以從先前捕獲的檢查中選擇影象,或點選 Upload Captures 以從計算機上傳影象
- 每個 ROI 的測試結果如下:
- Detected Text(以等寬字型/程式碼格式顯示)
- Confidence(顏色編碼標籤:綠色 ≥ 80%、橙色 ≥ 50%、紅色 <50%)
- Detection Count(檢測到的文字區域數量)
7b. 需要關注的要點
- Consistency:對於同一部件,OCR 是否每次都讀取相同的文字?
- Accuracy:檢測到的字串是否與部件上的實際文字一致?
- Confidence scores:它們是否始終高於 80%?置信度低通常表示影象質量問題。
- Edge cases:對文字模糊、褪色或部分被遮擋的部件進行測試。
如果置信度分數持續低於 80%,請重新檢查您的影象設定(步驟 2)。OCR 的準確性與影象質量直接相關。無論進行多少引數調整,都無法彌補模糊或光照不足的影象。
第8步:設定透過/失敗規則(IO 邏輯)
在 OCR 成功檢測文字後,您需要定義何謂“透過(pass)”或“失敗(fail)”。前往 IO Logic 選項卡。
基本模式
基本模式提供一個基於規則的簡易 UI,用於 OCR 的透過/失敗邏輯。不需要 Node-RED 知識。

頁面顯示:
- Preview / Test 標籤在左側,用於將結果與您的規則進行對比視覺化
- OCR Rules 區域在右側
- Save & Deploy 按鈕用於啟用規則
- Advanced Mode 按鈕用於切換到 Node-RED
建立規則
單擊 + Add rule 以建立一個透過/失敗規則。每條規則包含三個欄位:

| 欄位 | 描述 |
|---|---|
| ROIs | 要評估的 ROI。單擊展開並選擇“All ROIs”或選擇特定區域。 |
| Operator | 要對檢測文字執行的比較。 |
| Text | 要比較的期望文字字串。 |
可用運算子
單擊 Operator 下拉選單以檢視全部四個選項:

| 運算子 | 行為 | 示例用例 |
|---|---|---|
| = (equals) | 所有檢測到的文字拼接在一起必須 完全匹配 期望文字 | 驗證序列號是否恰好為“SN-2025-0042” |
| != (not equals) | 拼接文字必須 不匹配 期望文字 | 拒絕帶有已知錯誤程式碼的部件 |
| includes | 拼接文字必須 包含 期望文字,作為子字串 | 檢查標籤中是否含有單詞 “SAFETY” 的任意位置 |
| not includes | 拼接文字不得包含期望文字 | 確保不再使用的產品程式碼不會出現 |
文字比較方式
當一個 ROI 包含多個檢測到的文字區域(例如探測器將 "LOT" 和 "2025" 作為獨立單詞檢測到),在進行比較之前,所有文字字串將透過空格連線。
因此,如果探測器檢測到三個文字區域,分別為 "LOT"、"2025" 和 "A1",拼接後的文字將變為 "LOT 2025 A1"。你的規則將與這個完整的拼接文字進行比較。
這意味著:
- 針對
"LOT 2025 A1"的 equals 規則將透過 - 針對
"2025"的 includes 規則將透過 - 針對僅
"LOT"的 equals 規則將失敗(因為拼接文字不僅僅是 "LOT")
多條規則
你可以再次點選 + Add rule 增加多條規則。所有規則均使用 AND 邏輯:要使 OCR 檢查透過,必須所有規則都透過。如果任意一條規則失敗,整個檢查將失敗。
ROI 選擇

點選 ROIs 下拉選單,選擇規則適用的區域:
- All ROIs:規則對來自所有 OCR 區域的文字進行彙總評估
- Specific ROI:展開以按名稱選擇單個 ROI(這就是在步驟 4f 給 ROI 命名時務必使其描述性的重要原因)
儲存與部署
在配置完規則後,點選 Save & Deploy 以啟用它們。規則將對未來所有檢查即時生效。
高階模式(Node-RED)
若 BASIC 模式無法處理更復雜的透過/失敗邏輯,請切換到 Advanced Mode。
點選 Advanced Mode 按鈕以顯示確認對話方塊:

對話方塊說明:
- Advanced Mode 使用完整的 Node-RED 視覺化程式設計環境
- 所有 Basic Mode 規則將被停用
- 你可以隨時切換回 Basic Mode
點選 Switch to Advanced Mode(如果你已經處於 Advanced Mode,按鈕將顯示 Basic Mode)。

在 Advanced Mode,你將看到一個 Node-RED 流畫布,其中包含預構建節點,包括:
- All Block Outputs:接收來自所有 AI 塊(分類、分割、OCR、測量)的結果
- Check OCR(或類似):包含 JavaScript 的函式節點,用於評估 OCR 結果
- Classification Block Logic / Format Data for PLC / Trigger:用於整合的其他輸出節點
- Inspection Pass/Fail:最終的透過/失敗判定
- Save to Library:儲存結果
Node-RED 中的 OCR 輸出載荷
在 Advanced Mode 中,OCR 結果可在 msg.payload.ocr 物件中訪問。這可以讓你對每個檢測進行完全程式設計訪問:
{
"predictions": [
{
"roi_id": 1,
"roi_name": "Serial Number",
"center_x_global": 450,
"center_y_global": 220,
"angle_global": 90,
"search_area_id": 1,
"detections": [
{
"text": "SN-2025-0042",
"confidence": 0.95,
"roi_bbox": {
"x": 10,
"y": 5,
"width": 120,
"height": 30,
"angle": 0
},
"global_bbox": {
"x": 450,
"y": 220,
"width": 120,
"height": 30,
"angle": 90
}
}
]
}
]
}
| 欄位 | 描述 |
|---|---|
| roi_id | 產生此結果的 ROI 的數值 ID |
| roi_name | 你為 ROI 指定的名稱(例如 "Serial Number") |
| center_x_global / center_y_global | ROI 在全幀座標中的中心位置 |
| angle_global | 全幀中 ROI 的旋轉角度 |
| search_area_id | 該 ROI 所屬的檢測型別/搜尋區域 |
| detections | 在此 ROI 內發現的單個文字檢測的陣列 |
| detections[].text | 識別的文字字串 |
| detections[].confidence | 識別置信度,範圍從 0.0 到 1.0(已夾緊) |
| detections[].roi_bbox | 相對於 ROI 裁剪原點的邊界框位置 |
| detections[].global_bbox | 全域性相機幀中的邊界框位置(考慮 ROI 的旋轉與對齊) |
Use msg.payload.ocr.predictions[0].detections.map(d => d.text).join(" ") to get the same joined text string that Basic Mode uses for comparison.
將 Advanced Mode 允許你:
- 使用 JavaScript 對檢測文字應用正規表示式模式
- 根據置信度閾值過濾檢測結果
- 將 OCR 與分類/分割結果結合,用於複雜邏輯
- 將 OCR 文字格式化為 PLC 輸出(例如透過 EtherNet/IP 傳送檢測到的序列號)
- 根據 OCR 內容向 Microsoft Teams 或電子郵件傳送自定義訊息
有關 Node-RED 的詳細指南,請參閱 Node-RED Basics.
你可以隨時在 Basic 模式和 Advanced 模式之間切換,方法是使用 IO Logic 頁面頂部的切換按鈕。當切換到 Basic Mode 時,任何已部署的 Node-RED 邏輯將被停用並替換為 Basic Mode 規則。切換回時,Node-RED 流將被恢復。
第九步:Deploy the Recipe
一旦您的 OCR 設定完成並經過測試:
- 返回到 Recipe Editor(在左側邊欄中點選 Recipe Editor)
- 點選右下角的紫色 Deploy Recipe 按鈕
- 配方現已啟用並正在執行檢測
Viewing Results
HMI
HMI 頁面顯示實時檢測結果。開啟 OCR 後,您將看到:
- 實時攝像頭畫面,檢測到的文字週圍有紫色邊框
- 文字標籤顯示讀取的內容
- 基於您的 IO Logic 規則的透過/失敗狀態
- 執行統計:總檢測數、透過、失敗、良率

Library
在左側邊欄導航到 Library 以檢視過去捕獲的儲存結果。每個捕獲條目顯示:
- 帶有 OCR 覆蓋的捕獲影象
- 每個 ROI 的檢測文字
- 置信度分數
- 透過/失敗結果
Troubleshooting
未檢測到文字
| 可能原因 | 解決方法 |
|---|---|
| ROI 未放置在文字區域上方 | 在 Inspection Setup 中重新放置 ROI |
| ROI 方向與文字方向不匹配 | 將 ROI 旋轉以與文字方向對齊(Step 4d) |
| 影象中的文字過小 | 將攝像頭拉近或使用更長焦距鏡頭 |
| 相對於 ROI 文字過小 | 將 ROI 收緊至文字區域周圍 |
| Min Text Area 引數過高 | 降低 Min Text Area 引數 |
| 照明不足 / 對比度低 | 提高照明以最大化文字與背景之間的對比度 |
| 文字模糊 | 調整 C-mount 鏡頭的對焦並確保相機安裝穩定 |
| 未設定對齊 | 文字檢測需要對齊。請設定模板對齊(Step 3) |
錯誤文字檢測(誤讀)
| 可能原因 | 解決方法 |
|---|---|
| ROI 方向與文字方向不匹配 | 這是最常見的原因。將 ROI 旋轉以與文字方向對齊(Step 4d) |
| 影象質量低或有噪聲 | 提高曝光、降低增益、改善照明 |
| Text Segmentation Threshold 過低 | 提高以過濾掉錯誤文字檢測 |
| 重疊的文字區域合併成一個檢測 | 降低 Unclip Ratio 以防止框合併 |
| 同一 ROI 中有多行文字 | 如讀取順序重要,請為每行建立單獨的 ROI |
OCR 置信度持續偏低
| 可能原因 | 解決方法 |
|---|---|
| 照明均勻性差 | 確保文字區域的光照均勻 |
| 文字上的眩光或反射(尤其是光滑標籤) | 調整照明角度以消除鏡面反射,考慮使用漫射光 |
| 字型非常小或高度風格化 | 縮短拍攝距離或使用更長焦距鏡頭以增大影象中的文字大小 |
| 文字受損、褪色或部分列印 | OCR 只能讀取攝像頭看到的內容;若文字實際已退化,準確度會降低 |
| 影象設定中的增益過高 | 降低增益。高增益會產生看起來像文字的噪點 |
透過/不透過規則未按預期工作
| 可能原因 | 解決方法 |
|---|---|
| 文字的連線方式與預期不同 | 啟用實時預覽並仔細檢查實際檢測到的文字。請記住,多個檢測結果以空格連線。 |
| 在應使用 includes 而非 equals 時使用 equals | 如果只關心子字串,請使用 includes 而不是 equals |
| 規則未部署 | 在 Basic Mode 修改規則後點選 Save & Deploy |
| 規則中錯誤地選擇了 ROI | 檢查規則中的 ROIs 下拉選單,確保目標區域正確 |
侷限性
- 每個配方最多 1 個 OCR 區塊(在該區塊內可以包含多個 ROI)
- 英文最佳化的模型僅限使用:預訓練模型針對以拉丁字母為基礎的印刷文字進行最佳化。手寫文字、連筆或非拉丁字母的文字(中文、日文、韓文、阿拉伯文)不受支援。
- 基本模式不支援正規表示式或模式匹配:透過/失敗規則使用簡單的字串比較(等於、不等於、包含、不包含)。對於複雜的驗證模式(例如匹配 "SN-####-####"),請使用高階模式(Node-RED)並使用自定義 JavaScript 正規表示式。
- 無使用者可配置的字符集:該模型的 480 字元字典是固定的。例如,您不能將識別限定為僅數字。請使用透過/失敗規則來驗證預期格式。
- 無法保證的文字排序:當在一個 ROI 內檢測到多個文字區域時,它們按檢測順序(按輪廓)連線,並不一定符合閱讀順序(從左到右、從上到下)。如果閱讀順序很重要,請為每行文字使用單獨的 ROI。
- 僅限預訓練模型:與分類和分割不同,OCR 模型不能在您特定的字型或文字樣式上重新訓練或微調。它使用內建的預訓練 OCR 模型。
相關連結
- 首次檢驗 - 完整的配方建立演練
- 成像設定 - 詳細成像設定指南
- 對齊 - 模板對齊深度解析
- 檢查區域(ROI) - ROI 尺寸與策略
- 檢查設定與 ROI 型別 - ROI 型別參考
- Node-RED 基礎 - 高階 IO 邏輯程式設計
- 成像設定基礎知識 - 光照與影象質量理論