跳到主要內容

AI 驅動文件

您想了解什麼?

OCR(光學字元識別)

OV80i 可直接從相機影象中讀取列印文字、序列號、日期碼以及其他字母數字字元,使用了預訓練的 OCR 模型。與分類器與分割器不同,OCR 無需訓練資料。它開箱即用。

OCR 在以下情況下特別有用:

  • 驗證序列號或批次程式碼是否與預期值一致
  • 確認標籤存在且可讀
  • 讀取日期/到期碼以實現可追溯性
  • 在組裝過程中檢查部件上的零件號
OV80i Only

OCR 僅在 OV80i 上可用。OV20i 與 OV10i 不支援 OCR。


How OCR Works

OV80i 使用一種兩階段 AI 流水線進行文字識別:

  1. Text Detection(文字檢測): 在 ROI 內定位文字的位置。對每個檢測到的單詞或文字區域返回邊界框。
  2. Text Recognition(文字識別): 讀取每個檢測到的邊界框內的字元,並返回帶有置信分數的文字字串。

整個過程在相機的 NVIDIA Jetson Orin NX GPU 上執行。無需雲連線。

該模型支援廣泛的字符集,包括:

  • 數字 (0-9)
  • 拉丁字母 (A-Z, a-z,帶變音字元)
  • 常用標點符號與符號
  • 希臘字母
  • 貨幣符號
  • 數學運算子
備註

字符集是固定的,無法自定義。該模型支援約 480 個字元,覆蓋大多數印刷的拉丁字母基語言的工業文字。


先決條件

在設定 OCR 之前,您需要一臺符合以下條件的相機:

  • 物理上已安裝並穩定
  • 已連線到網路並可在瀏覽器中訪問
  • 已對準要讀取文字的部件

若尚未完成,請先按照入門指南操作:


第一步:建立新配方

每次檢測都從一個配方開始。配方是一個完整的軟體包:影象設定、對齊、檢測區域、AI 模型以及輸出規則。

  1. 在左側邊欄導航到 All Recipes
  2. 在右上角點選 + New
  3. 為你的配方命名一個描述性名稱(例如“序列號檢查”、“標籤驗證”)
  4. 點選 Activate 使其成為活動配方,然後點選 Edit 開啟配方編輯器

配方編輯器概覽,顯示所有區塊

配方編輯器展示完整的檢測流水線。你將從左到右進行操作:

  • Imaging Setup(成像設定)
  • Image Alignment & Inspection Setup(模板、ROIs)
  • AI Blocks(分類、分割、OCR、測量)
  • Set Pass/Fail & IO Logic(輸出規則)

有關配方建立的詳細演練,請參閱 Create First Inspection.


第三步:配置影象設定

高質量影象是實現準確 OCR 的基礎。文字必須清晰可見、對比度強。

  1. 點選 Configure Imaging 或切換到 Imaging Setup 選項卡
  2. 在觀看實時預覽時,調整以下設定:
SettingGoal for OCR
Exposure亮度足夠清晰地看到所有文字。太暗文字會融入背景。太亮白色標籤會過曝。
Gain儘量保持在較低水平。增益過高會引入噪聲,看起來像文字偽影。
Gamma調整以改善文字與背景之間的對比度。
Focus文字必須清晰銳利。如字元看起來模糊,請調整 C-mount 鏡頭焦環。
光照對 OCR 至關重要

OCR 的準確性在很大程度上依賴影象質量。相機影象中的文字必須清晰可見,並且與背景具有良好對比。深色文字在淺色背景上或淺色文字在深色背景上都能很好地工作。請避免:

  • 造成字元陰影的不均勻照明
  • 光澤標籤上的眩光
  • 曝光不足使文字難以與背景區分
提示

在實時預覽中放大文字區域。你能清楚地讀出每一個字元嗎?如果你不能讀清,AI 也讀不清。

有關所有成像設定的詳細指南,請參閱 Image Settings.


第三步:設定模板對齊

模板對齊會告訴相機如何跟蹤您零件的位置和方向。這一點很關鍵,因為零件在傳送帶或夾具上並不總是落在完全相同的位置。

  1. 導航到 模板影象與對齊 選項卡
  2. 將零件放入相機的視野
  3. 單擊 Capture Template 以拍攝參考影象
  4. 在始終存在且易於識別的特徵上繪製 2-3 個小的模板區域(例如角落、徽標、安裝孔)
備註

在零件上儘量讓模板區域彼此相距越遠越好。這能顯著降低對齊時的角度抖動。兩個區域彼此接近會導致旋轉穩定性較差;將兩個區域放在對角線的對角點處會獲得極佳的穩定性。

注意

如果跳過對齊,OCR ROI 將固定為絕對畫素位置。零件的任何移動都會導致 ROI 讀不到文字。請始終為生產用途設定對齊。

有關模板對齊的詳細指南,請參閱 Alignment.


第四步:建立 OCR 檢查區域(ROI)

現在您將精確定義相機應在零件的哪個位置查詢文字。這是確保 OCR 精度的最關鍵步驟。

4a. 導航到 Inspection Setup

  1. 點選 Recipe Editor 中的 Inspection Setup 選項卡
  2. 您將看到帶有模板影象的 Inspection Editor

4b. 新增 OCR 模型

  1. 在右側面板中,查詢 Models 區段
  2. 如果未在列表中看到 OCR 模型,請在底部點選 Add 按鈕並選擇 OCR
  3. OCR 模型將出現在 Models 列表中
備註

你只能在每個配方中擁有 一個 OCR 區塊。不過,你可以在該區塊內建立多個 ROI,以從零件的不同區域讀取文字。

4c. 建立一個 OCR ROI

  1. 確保在 Models 列表中選中(高亮顯示)OCR 模型行
  2. 在 Region of Interest 區段點選 Add ROI
  3. 影象上將出現一個新的矩形 ROI
  4. 將 ROI 拖動以將其定位在你要讀取文字的位置
  5. 透過拖動角手柄調整大小

Inspection Setup with OCR ROI drawn over text

4d. 設定 ROI 方向

ROI 方向必須與文字方向一致

這是最需要正確設定的一項。你的 ROI 方向必須與要讀取的文字方向一致。

OCR 引擎使用 ROI 的角度來裁剪影象,然後將裁剪區域按文字水平的方式進行處理。如果你的 ROI 角度與文字角度不匹配,引擎將嘗試讀取旋轉文字,可能產生錯誤結果。

示例:

  • 文字從左到右水平閱讀:ROI 角度應為 0 度
  • 文字順時針旋轉 90 度:ROI 角度應為 90 度
  • 文字倒置:ROI 角度應為 180 度
  • 文字呈 45 度角:ROI 角度應為 45 度

如何旋轉 ROI:

  1. 透過單擊 ROI 選中它
  2. 使用 ROI 角落處的旋轉手柄,或
  3. 直接在畫布底部的定位欄位中設定角度值

定位欄顯示:H(高度)、W(寬度)、XY(位置),以及以度為單位的 angle

ROI selected showing position, dimensions, and angle of 90.96 degrees

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 標籤。你會在左側看到攝像頭畫面,右側是設定面板。

OCR Block overview page

右側面板顯示:

  • OPTICAL CHARACTER RECOGNITION 的描述
  • 說明這是一個無需訓練資料的預訓練模型
  • 使用 Live Preview 或 Test 進行驗證的說明

5b. 啟用 Live Preview

在右上角勾選 Live Preview Mode。攝像頭將開始實時處理幀。

OCR Live Preview with parameters panel

啟用 Live Preview 後,你將看到:

  • Processing Time:OCR 模型處理每幀的時間
  • Latency:包括影象捕獲與渲染在內的總往返時間
  • 在攝像頭畫面上疊加的紫色邊界框,覆蓋檢測到的文字區域
  • Detected text 以標籤形式顯示在每個邊界框上
  • 右側的 Parameters panel 用於調節檢測設定

5c. 驗證 OCR 的讀取是否正確

開啟 Live Preview 時,將部件放在攝像頭下並驗證:

  1. Are all text regions detected? 你應該在 ROI 的每個單詞/短語周圍看到紫色邊界框。
  2. Is the text being read correctly? 標籤應與部件上的實際文字一致。
  3. Are there false detections? 非文字區域是否被錯誤識別為文字?
  4. Move the part slightly. OCR 在不同位置是否仍然工作(這測試對齊)?

如果文字未被檢測到或被誤讀,請檢查:

  • ROI 方向是否與文字方向一致(見步驟 4d)
  • ROI 是否正確定位在文字之上
  • 影象質量是否良好(聚焦清晰、對比度良好、光線均勻)
  • 試著調整 OCR 引數(見下一節)

Step 6: 調整 OCR 引數

當啟用 Live Preview 時,右側面板會顯示四個可調引數。這些引數控制文字檢測階段(找出文字所在位置),而非識別階段(讀取文字內容)。

引數預設值功能描述
Text Segmentation Threshold0.10檢測器對區域包含文字的置信度閾值。數值越高,檢測越嚴格,誤檢越少,但可能漏掉微弱文字。數值越低越敏感,可以檢測到微弱文字,但可能有誤檢。範圍:0.0 到 1.0。
Unclip Ratio4.0從文字輪廓向外擴充套件檢測到的邊界框的程度。數值越高,邊界框越大。若邊框裁剪了大字元的邊緣,請增大該值。若相鄰單詞合併為一個框,請減小。
Unclip Ceiling20從“Unclip”擴充套件的最大畫素數上限。該上限防止在大文字上進行過大擴充套件時產生過大的邊界框。若在提高 Unclip Ratio 後仍然將大文字裁剪,請提高該值。
Min Text Area500檢測文字區域的最小面積(畫素為單位)。小於該值的區域將被丟棄以視為噪聲。若檢測到一些小的偽影被誤判為文字,請增大該值。若有小但有效的文字被過濾,請減小。
何時調整引數

從預設值開始。只有在 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. 使用測試面板

  1. 禁用實時預覽模式(取消勾選覈取方塊)
  2. 點選 Test 按鈕

帶有“從庫選擇”和“上傳選項”的 OCR 區塊測試面板

  1. 點選 Select From Library 以從先前捕獲的檢查中選擇影象,或點選 Upload Captures 以從計算機上傳影象
  2. 每個 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 知識。

基本模式的透過/失敗與 IO Logic 及 OCR 規則區域

頁面顯示:

  • Preview / Test 標籤在左側,用於將結果與您的規則進行對比視覺化
  • OCR Rules 區域在右側
  • Save & Deploy 按鈕用於啟用規則
  • Advanced Mode 按鈕用於切換到 Node-RED

建立規則

單擊 + Add rule 以建立一個透過/失敗規則。每條規則包含三個欄位:

顯示 ROIs 下拉、Operator 下拉和 Text 輸入的 Add rule 示例

欄位描述
ROIs要評估的 ROI。單擊展開並選擇“All ROIs”或選擇特定區域。
Operator要對檢測文字執行的比較。
Text要比較的期望文字字串。

可用運算子

單擊 Operator 下拉選單以檢視全部四個選項:

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 選項

點選 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 flow with Check OCR node

在 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_globalROI 在全幀座標中的中心位置
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 設定完成並經過測試:

  1. 返回到 Recipe Editor(在左側邊欄中點選 Recipe Editor
  2. 點選右下角的紫色 Deploy Recipe 按鈕
  3. 配方現已啟用並正在執行檢測

Viewing Results

HMI

HMI 頁面顯示實時檢測結果。開啟 OCR 後,您將看到:

  • 實時攝像頭畫面,檢測到的文字週圍有紫色邊框
  • 文字標籤顯示讀取的內容
  • 基於您的 IO Logic 規則的透過/失敗狀態
  • 執行統計:總檢測數、透過、失敗、良率

HMI view showing live OCR inspection results

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 模型。

相關連結