OCR vTool#
光學字元辨識的主要目標,是辨識圖像中的物件,或讀取物件上的特定資訊,例如最佳食用期限、序號或產品標籤。
OCR vTool 透過「Image」輸入腳位接收影像,並透過「Texts」與「Regions」輸出腳位輸出文字及所識別單字的分段區域。
如欲購買「OCR vTool 」的授權,請造訪Basler 網站。

運作原理#
在指定的感興趣區域內,OCR vTool 會將文字分割成單詞和個別字元,並對每個字元進行分類,即辨識其為字母、數字或特殊字元(例如標點符號)。
儘管名稱如此,OCR vTool 並不會讀取單一字元,而是讀取單詞。單詞的最小長度為 2 個字元。
如果您的文字橫跨多行,每一行至少會被視為一個單詞。如果同一行內的單詞之間有較大的空格,演算法會將這些單詞視為獨立的實體。
一個 4 步驟的精靈將引導您完成 vTool 的設定。它會即時回報您的設定所產生的效果。請參閱以下各節,以進一步了解各個步驟的詳情。
預覽區#
預覽區是一個實用的工具,可讓您立即查看在 vTool 設定中進行的任何變更。
預覽區域上方有兩個按鈕,一個是用來切換是否顯示分割區域及辨識字元周圍的邊界框,另一個則是用來突出顯示區域。

顯示邊界框與已識別的字元#
此按鈕可讓您顯示/隱藏分割區域周圍的邊界框:
在每個被辨識的字元上方,都會顯示辨識結果。這讓您可以快速確認辨識結果是否正確。

突出顯示地區#
此按鈕可讓您標示出已分割的區域:
這樣一來,便更容易判斷一個字元是已被完全辨識,還是僅被部分辨識。這對於微調分割設定(例如對比度)非常有幫助。

步驟 1:初始設定#
首先,請載入適當的教學影像,來源可以是磁碟中的檔案,或是透過即時攝影機擷取的影像。該教學影像必須在以下方面能代表實際的檢測影像:
- 文字的位置與方向
- 字元大小(若您是手動指定字元尺寸)
在自動模式下,字元大小可隨機變化。
Basler 建議在設定「OCR vTool 」時,使用多張不同的樣本影像。如此一來,您便能更準確地評估文字的影像品質,並檢查分割結果以及候選區塊的信心水準。這些樣本影像最好能涵蓋您預期在應用程式中會出現的完整字元集。
矩形設定#
載入圖片後,圖片中會顯示一個矩形。此矩形用來標示文字所在的區域。您可以透過拖曳矩形的控制點,或直接在預覽區域左側的輸入框中手動輸入數值,來調整其位置、方向及大小。
該區域必須僅包含您要讀取的文字,因為 OCR 演算法無法區分字元與不需要的影像元素(雜訊)或噪點。若無法完全避免雜訊或噪點,您應採取適當措施,例如新增後處理步驟,或使用其他 OCR 輔助工具來定義多個文字區域。此外,請勿將矩形過於緊密地套在文字周圍,因為文字在不同影像間可能會朝各個方向略微偏移。
在定義區域時,請注意貫穿區域矩形的箭頭。這表示閱讀方向。朝其他方向排列的文字將無法被讀取。
為了讓「OCR vTool 」能穩定運作,您要處理的所有影像中的文字方向應大致相同。輕微的偏差(幾度)是可以接受的。Basler 建議將相機定位在能從左至右讀取文字的位置。若您的文字方向不同(但保持恆定),請據此調整區域矩形的位置,同時確保箭頭指向文字的閱讀方向。
如果文字的位置變化很大,且文字周圍的背景空間有限,您應將圖片對齊作為預處理步驟,以確保文字的方向和位置保持穩定。
這是一張範例圖片,其中矩形已稍微旋轉,以配合文字的排列。

字型設定#
選擇一種字型及其對應的字元集,以配合圖片中的文字。通常,這取決於應用程式或印刷流程的規格。
下表列出了可用的字型,並展示了它們的外觀範例:
| 字型名稱 | 描述 | 外觀 |
|---|---|---|
| 標準混合型 | 常見於文件中的各種字型,包括帶有或不帶有襯線的字型 | ![]() |
| 標準無襯線字體 | 各種無襯線的辦公室字型,常被用於文件中 | ![]() |
| OCR-A | 根據 OCR-A 標準的定義 | ![]() |
| OCR-B | 根據 OCR-B 標準的定義 | ![]() |
| 圓點印花 | 由點陣印表機產出的各種點陣字型 | ![]() |
| 製藥業 | 製藥業中使用的無襯線字體 | ![]() |
| SEMI | SEMI 標準中所定義的、用於半導體產業的字型 | ![]() |
| 手寫 | 手寫數字 | ![]() |
根據字型不同,可用的字元集也各異。一個字元集可能包含以下子集中的部分或全部:
- 大寫字母
- 小寫字母
- 數字
- 特殊字元
可識別的特殊字元會因字型而異。
下表列出了每種字型所能辨識的字元:
| 字型名稱 | 大寫字母 | 小寫字母 | 數字 | 特殊字元 |
|---|---|---|---|---|
| 標準混合型 | 是 | 是 | 是 | - = + < > . # $ % & ( ) @ * e £ ¥ |
| 標準無襯線字體 | 是 | 是 | 是 | - / + . $ % * e £ ¥ |
| OCR-A | 是 | 是 | 是 | - ? ! / { } = + < > . # $ % & ( ) @ * e £ ¥ |
| OCR-B | 是 | 是 | 是 | - ? ! / { } = + < > . # $ % & ( ) @ * e £ ¥ |
| 圓點印花 | 是 | 否 | 是 | - / . * : |
| 製藥業 | 是 | 否 | 是 | - / . ( ) : |
| SEMI | 是 | 否 | 是 | - 。 |
| 手寫 | 否 | 否 | 是 | 不適用 |
拒絕類別#
「拒絕類別」可讓您處理結果不明確的情況,也就是 vTool 無法辨識的字元。這些字元會被歸類為「被拒絕的字元」,並根據其在「pylon Viewer 」中的出現位置,以不同的問號圖示來表示。
此圖示用於設定對話方塊中:
此圖示用於釘選資料檢視中:

使用「拒收類別」來更精準地評估結果的信心程度。除了反映字元與訓練字體的契合度外,該信心程度還反映了字元的列印或影像品質。
若信心值最高的結果屬於「拒絕」類別,則該影像區塊無法明確地歸類為某個字元。這可能是由於影像模糊或字元印刷不完整所致。若此情況頻繁發生,則表示影像品質不佳。 在這種情況下,您可以嘗試改善影像品質,或在後處理步驟中將此類字元標記為無法讀取。採用這種方法較為穩妥,因為它允許您改為選擇一個信心值較低的字元。
如果您的分類結果經常出現模稜兩可的情況,您可以考慮使用正規表達式來進行詞彙修正。
若您希望始終返回一個字元,請停用「允許拒絕」選項。
要找出最適合您的設定,請嘗試啟用和停用該選項,並觀察第 4 步驟中的候選清單和辨識出的單字有何差異。
步驟 2:字元尺寸#
字元的分割是基於對字元尺寸(即寬度、高度和筆畫寬度)的某些假設。OCR vTool 支援一種自動演算法,可直接從影像資料中推導出這些尺寸。此外,您也可以手動指定所需的尺寸範圍。字元高度在 20 至 30 像素之間是合適的尺寸範圍,但您也可以指定更大的字元尺寸。低於 20 像素的字元將無法再被可靠地辨識。
資訊
如果文字中的字元大小不一,或是不同圖片中的字元大小各異,請使用自動模式。這樣一來,無論字元大小如何,都能被正確讀取。
手動指定尺寸的典型應用情境,是當自動模式無法在分割過程中排除雜訊時。在這種情況下,手動指定尺寸可望移除不需要的影像元素。
步驟 3:區段設定#
對比#
圖像中字元的分割是基於閾值機制,並以指定的最小對比度值作為閾值。請調整最小對比度,並在預覽區中觀察分割結果。若要獲得更佳的可視化效果,請使用預覽區上方的切換按鈕啟用區域分割視圖。
請選擇一個最低對比度設定,確保所有字元都能被正確分割並讀取。請勿將最低對比度設定得太低,否則可能會導致誤判不必要的雜訊。
現有的字型均經過訓練,僅適用於淺色背景上的深色字元。若此「極性」設定符合您的應用需求,請選用「深色文字搭配淺色背景」選項。
如果您的應用程式涉及深色背景上的淺色字元,則必須使用「淺色於深色」選項。在此情況下,系統會在預處理步驟中將影像進行內部反轉。
若您的應用程式中的文字比背景淺或比背景深,請選擇「兩者皆可」選項。不過,OCR vTool 無法讀取極性混雜的文字。同一文字區域內的文字極性必須一致。
字距#
字元還可能包含點、逗號、連字號等特殊符號。其中大部分是標點符號。然而,連字號和等號則被視為分隔符號。
在某些應用情境中,您可能需要讀取這些字元。若屬此情況,請選擇包含特殊字元的字元集,並啟用「標點符號」和「分隔符號」選項。
在其他應用情境中,您可能希望讀取不含標點符號或分隔符號的文字,例如在讀取日期時,您僅需讀取數字。因此,請選擇「僅數字」字元集,並停用「標點符號」和「分隔符號」選項。
在間距方面,您還必須考慮個別字元之間的距離。要成功將文字分割成獨立區域,字元之間必須有足夠的間距。然而,實際上字元往往排列得太過緊密,導致難以區分。若您發現應用程式中出現這種情況,請啟用「分離相鄰字元」選項。
圓點印花#
「點陣字體」與其他所有字體類型不同,其字元完全由獨立的點構成,而非連續的筆畫。為了能夠讀取點陣文字,OCR vTool 提供了專用的分割與分類選項。若要啟用這些選項,您必須在精靈的第 1 步驟中選取「點陣字體」。字元間有足夠大間距且採用緊湊點陣排版方式的標準點陣字元,可立即被讀取。
若遇到點陣印刷文字,且字元之間的間距與單一字元內各點之間的間距相近或更小,Basler 建議啟用「緊密字元間距」選項。
要成功進行分段,還必須考慮字元中各點之間的間距。在緊湊的點陣列印方案中,各點之間的間距相當緊密,且間距大小保持一致。此類字元可透過啟用「自動」選項(此為預設設定)來順利讀取。在此情況下,系統會採用內建的自動模式。
然而,如果某些間隙比其他間隙更大,單一字元的分割可能會失敗,導致該字元被分割成多個區域。在這種情況下,可透過「最大點間隙」選項手動指定點與點之間允許的最大間隙,這可能會有所幫助。不過,這樣做可能會增加處理時間。
步驟 4:結果#
精靈的最後一步會顯示一個表格,其中列出單字中每個字元位置的潛在候選字元,並附有置信度值。若您點選表格中的某個項目,預覽區中對應的邊界框便會被選取,反之亦然。
展開下拉式清單,即可顯示所有候選項目。這些項目是按照可信度由高至低排序的。這讓您能夠評估角色分類的整體可信度,並向您展示潛在的替代選項。
資訊
信心值是一個介於 0 到 1 之間的數值,用以顯示字元辨識的準確程度。分類結果非常好的情況下,信心值通常會高於 0.99。若信心值低於 0.9 或 0.8,則可能表示該分類結果不可靠。
表格下方是「已識別文字」區域。此處會以簡潔的形式顯示已識別的完整文字內容。
正規表達式#
OCR 常面臨的一大挑戰,在於數字 0、大寫字母 O 和小寫字母 o 之間的辨識困難。像 OCR-A 或 SEMI 這樣的專用 OCR 字型,其設計初衷就是為了區分 0 和 O,但其他字型則未必如此。您可以透過正規表達式來解決這個問題。
正規表達式可讓您進行詞彙修正。所謂詞彙修正,是指不僅僅採用信心度最高的候選詞,還會將其他候選詞一併納入考量,以嘗試找出符合正規表達式的候選詞組合。
要執行此操作,請在結果表格上方的輸入欄位中,輸入與文字中單字數量相等的正規表達式。請以單一空格分隔各個正規表達式。
範例:假設您想讀取最佳食用日期,例如「03/2026」。主要目的是讀取日期或時間中的數字。同時假設還需讀取特殊字元或字母。 在這種情況下,您應選擇一個包含數字、字母和特殊字元的字元集。透過使用正規表達式「(0[1-9]|10|11|12)/202[4-9]」,您不僅能讀取斜線,同時還能維持 MM/YYYY 的日期結構。
資訊
正規表達式無法透過增減字元來調整單字長度。正規表達式必須符合單字長度,且所有圖片中的單字長度都必須保持一致。
對長單字進行拼寫修正可能會增加處理時間。
設定 vTool#
要設定 OCR Basic vTool:
-
在vTool「設定」區域的「配方管理」窗格中,按一下「開啟設定」或雙擊該 vTool。
此時將開啟「OCR 基本設定」對話方塊。 -
擷取或開啟一張圖片。
請使用 單發 按鈕以擷取即時影像,或點擊 開啟圖片 按鈕以開啟現有圖片。
圖片一經載入,文字識別程序便會立即開始,結果將顯示在預覽區中。
視窗底部會顯示已辨識的字元,各詞之間以空格分隔。由於此處空間有限,您可能無法看到完整的文字。這僅是顯示已辨識字元的數量。完整的文字將在精靈的第 4 步驟中顯示。
如需更多資訊,請參閱 步驟 1:初始設定.
-
在「矩形設定」區域中,請手動輸入數值來定義文字區域。
此外,您也可以使用預覽區域中區域矩形的控制點,來移動、調整大小及旋轉該矩形,使其符合您想要讀取文字的影像部分。
矩形內的箭頭必須指向文字的閱讀方向。 -
在「字型設定」區塊中,請設定以下選項:
- 字型
- 字集
- 拒絕類別
-
按一下 下一頁.
該流程的第 2 步 OCR 基礎 對話方塊隨即開啟。
如需更多資訊,請參閱 步驟 2:字元尺寸.
-
請決定是否保留預設的自動模式,以啟用字元尺寸的偵測功能。若要手動指定尺寸,請取消勾選「自動」選項,並輸入所需的字元寬度、高度及筆畫寬度範圍。
-
按一下 下一頁.
第 3 步 OCR 基礎 對話方塊隨即開啟。
如需更多資訊,請參閱 步驟 3:區段設定.
-
請根據您的應用需求調整對比度和極性。
-
請根據您的應用需求選擇間距選項。
-
若您已選取「Dot Print」字型,請依需求設定相關選項。
-
按一下 下一頁.
第 4 步驟的 OCR 基礎 對話方塊隨即開啟。
如需更多資訊,請參閱 步驟 4:結果.
-
請在分類表和文字欄位中檢視字元辨識的結果。
在表格中,您可以展開每個位置以檢視其他分類結果。您將看到已分類的字元及其置信度。
若已啟用詳細檢視選項,您可以在表格中選取一個字元,預覽區域中對應字元的邊界框便會被標示出來;反之,您也可以點擊預覽區域中的字元區域,以在表格中查看對應的字元。 -
如有需要,請輸入正規表達式以進行單字修正。
每個單字請輸入一個正規表達式。各表達式之間請以單一空格分隔。 -
請檢查「已識別文字」欄位中顯示的詞彙。
-
按一下「完成」以結束設定程序。
您可以在引腳資料檢視中查看 OCR Basic vTool 的結果。在此處,您可以選擇要顯示哪些輸出。
Inputs#
Image#
可直接從「相機」vTool 或任何能輸出影像的 vTool(例如「Image Format Converter 」vTool)接收影像。
- 資料類型:圖片
- 影像格式:8 位元至 16 位元的單色或彩色影像。彩色影像會在內部轉換為單色影像。
Outputs#
Texts#
回傳已識別的文字字串。
- 資料類型:字串陣列
Regions#
回傳已識別文字的區域。
- 資料類型:區域陣列







