如何在 C# 中建立字元識別
光學字元辨識(OCR)技術允許將文字轉換成機器可讀的數位格式。 當文件被掃描時(例如發票或收據),電腦將其保存為圖像文件。然而,掃描圖像中的文字無法使用普通文字編輯器進行編輯、搜尋或計數。
OCR可以處理圖像,提取文字,並將其轉換為電腦可讀的文字格式。 這使得可以從多個來源提取文字,包括PDF文件和其他掃描圖像。 此外,OCR功能超越了簡單的文字提取,它包括主要的圖像格式和PDF文件,將它們轉換為可搜尋的OCR資料。
在C#中,開發者可以通過各種程式庫利用OCR的強大功能,其中之一就是由Iron Software開發的IronOCR強大程式庫。 在本教程中,我們將探討OCR的基礎知識,並展示如何利用IronOCR在C#中高效地進行字元辨識。
How to create Character Recognition in C
開始使用IronOCR
IronOCR是一個由Iron Software開發的C#程式庫,提供先進的OCR功能。 它提供從圖像、PDF和掃描文件中準確提取文字的功能。 在我們深入探討程式碼之前,請確認您已在專案中安裝IronOCR。
來自Iron Software的IronOCR的關鍵功能
改進的Tesseract OCR引擎
IronOCR通過提高準確性和速度提升了廣泛使用的Tesseract OCR引擎的能力。 它是一個強大的解決方案,可從各種來源提取文字,包括圖像、PDF和多種文件格式。
廣泛的語言覆蓋範圍
IronOCR支持超過125種語言,熟練處理多語言需求,是要求語言多樣性應用的理想選擇。
多樣的輸出選擇
提取的文字可以方便地作為純文字或結構化資料輸出,以實現與進一步處理流水線的無縫整合。 此外,IronOCR還方便地直接從圖像輸入建立可搜尋的PDF。
跨平台適應性
專為C#、F#和VB.NET的相容性而設計,IronOCR在各種.NET環境中無縫運行,包括版本8、7、6、Core、Standard和Framework。
利用Tesseract 5
IronOCR利用Tesseract 5的強大功能,精細調整以在.NET生態系統中達到最佳性能。
基於區域的OCR功能
使用IronOCR,使用者可以精確定義文件中的特定區域,實現目標OCR處理。 此功能通過將處理能力集中在需要的地方,提高了準確性和效率。
圖像預處理工具
該程式庫提供了一套圖像預處理功能,如去斜和降噪。 即使面對不完美的源圖像,這些工具也能保證更好的結果,最終提升整體OCR體驗。
現在,我們將開發一個演示應用程式,利用IronOCR從圖像中讀取文字。
先決條件
- Visual Studio:請確保您已安裝Visual Studio或任何其他C#開發環境。
- NuGet 包管理器:請確保NuGet存在,以便管理項目中的套件。
步驟1:在Visual Studio中建立一個新的C#專案
開始時,讓我們建立一個使用Visual Studio的控制台應用程式,如下所示。

在下方提供專案名稱和位置。

為專案選擇所需的.NET版本。

點擊"建立"按鈕以建立新的專案。
步驟2:安裝IronOCR程式庫並將其整合到您的專案中
IronOCR可以在NuGet包管理器控制台中找到,如下所示。 使用提供的命令安裝套件。

使用Visual Studio NuGet包管理器,搜尋IronOCR並將其安裝到您的專案文件夾。

一旦安裝完畢,應用程式便可以利用IronOCR從圖像中讀取文字。
步驟3:利用IronOCR Tesseract從圖像中讀取文字
IronOCR乃是唯一提供Tesseract 5 OCR能力的.NET程式庫。 目前它仍然是所有程式語言中最先進的Tesseract 5程式庫。 IronOCR無縫整合了Tesseract 5到各種.NET環境中,包括Framework、Standard、Core、Xamarin和Mono,確保對整個生態系統的全面支持。
請考慮以下圖像文件作為輸入。 現在,讓我們看看如何讀取這個圖像文件中的文字。

using IronOcr;
public class Program
{
public static void Main(string[] args)
{
var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();
ocrInput.LoadImage(@"sample1.png");
var ocrResult = ocrTesseract.Read(ocrInput);
Console.WriteLine(ocrResult.Text);
}
}
using IronOcr;
public class Program
{
public static void Main(string[] args)
{
var ocrTesseract = new IronTesseract();
using var ocrInput = new OcrInput();
ocrInput.LoadImage(@"sample1.png");
var ocrResult = ocrTesseract.Read(ocrInput);
Console.WriteLine(ocrResult.Text);
}
}
Imports IronOcr
Public Class Program
Public Shared Sub Main(ByVal args() As String)
Dim ocrTesseract = New IronTesseract()
Dim ocrInput As New OcrInput()
ocrInput.LoadImage("sample1.png")
Dim ocrResult = ocrTesseract.Read(ocrInput)
Console.WriteLine(ocrResult.Text)
End Sub
End Class
程式碼解釋
- IronTesseract實例:我們首先建立一個IronTesseract實例以執行OCR操作。
- 載入圖像:我們將樣本圖像載入到OcrInput物件中。
- 讀取文字:讀取圖像中的文字,並將結果列印到控制台。
輸出

步驟4:利用IronOCR的高階功能讀取圖像中的文字
IronTesseract.Configuration物件使高級使用者能夠存取C#/.NET內的底層Tesseract API,從而進行細緻配置設置以進行微調和優化。 以下是一些可行的高級配置。
語言選擇
您可以使用Language屬性指定OCR的語言。 例如,要將語言設置為英語,請使用:
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
頁面分割模式
PageSegmentationMode決定了Tesseract如何對輸入圖像進行分割。 選項包括AutoOsd、SingleBlock、SingleLine等。 例如:
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
自定義Tesseract變數
您可以通過設置特定變數來微調Tesseract。 例如,要禁用並行處理:
ocr.Configuration.TesseractVariables["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables("tessedit_parallelize") = False
列入和排除字元名單
使用WhiteListCharacters和BlackListCharacters來控制Tesseract識別哪些字元。 例如:
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë|^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë|^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ocr.Configuration.BlackListCharacters = "`ë|^"
額外配置變數
探索其他Tesseract配置變數以根據您的需求自定義行為。 例如:
ocr.Configuration.TesseractVariables["classify_num_cp_levels"] = 3;
ocr.Configuration.TesseractVariables["textord_debug_tabfind"] = 0;
// ... (more variables)
ocr.Configuration.TesseractVariables["classify_num_cp_levels"] = 3;
ocr.Configuration.TesseractVariables["textord_debug_tabfind"] = 0;
// ... (more variables)
ocr.Configuration.TesseractVariables("classify_num_cp_levels") = 3
ocr.Configuration.TesseractVariables("textord_debug_tabfind") = 0
' ... (more variables)
現在讓我們嘗試使用高級設置來解碼相同的圖像
using IronOcr;
public class Program
{
public static void Main()
{
Console.WriteLine("Decoding using advanced features");
var ocrTesseract = new IronTesseract() // Create instance
{
Language = OcrLanguage.EnglishBest, // Configure best English language
Configuration = new TesseractConfiguration()
{
ReadBarCodes = false, // Disable reading barcodes
BlackListCharacters = "`ë|^", // Blacklisted characters
WhiteListCharacters = null, // No whitelist, allow all
PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
TesseractVariables = null, // No custom variables used
},
MultiThreaded = false,
};
using var ocrInput = new OcrInput(); // Create a disposible ocr input object
ocrInput.AddImage(@"sample1.png"); // Load the sample image
var ocrResult = ocrTesseract.Read(ocrInput); // Read the text from the image
Console.WriteLine(ocrResult.Text); // Output the text
}
}
using IronOcr;
public class Program
{
public static void Main()
{
Console.WriteLine("Decoding using advanced features");
var ocrTesseract = new IronTesseract() // Create instance
{
Language = OcrLanguage.EnglishBest, // Configure best English language
Configuration = new TesseractConfiguration()
{
ReadBarCodes = false, // Disable reading barcodes
BlackListCharacters = "`ë|^", // Blacklisted characters
WhiteListCharacters = null, // No whitelist, allow all
PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
TesseractVariables = null, // No custom variables used
},
MultiThreaded = false,
};
using var ocrInput = new OcrInput(); // Create a disposible ocr input object
ocrInput.AddImage(@"sample1.png"); // Load the sample image
var ocrResult = ocrTesseract.Read(ocrInput); // Read the text from the image
Console.WriteLine(ocrResult.Text); // Output the text
}
}
Imports IronOcr
Public Class Program
Public Shared Sub Main()
Console.WriteLine("Decoding using advanced features")
Dim ocrTesseract = New IronTesseract() With {
.Language = OcrLanguage.EnglishBest,
.Configuration = New TesseractConfiguration() With {
.ReadBarCodes = False,
.BlackListCharacters = "`ë|^",
.WhiteListCharacters = Nothing,
.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
.TesseractVariables = Nothing
},
.MultiThreaded = False
}
Dim ocrInput As New OcrInput() ' Create a disposible ocr input object
ocrInput.AddImage("sample1.png") ' Load the sample image
Dim ocrResult = ocrTesseract.Read(ocrInput) ' Read the text from the image
Console.WriteLine(ocrResult.Text) ' Output the text
End Sub
End Class
程式碼解釋
-
IronOCR配寘:建立了一個IronTesseract(主要的IronOCR類)實例並將其分配給變數
ocrTesseract。配寘設置應用於
ocrTesseract:- 語言:指定OCR的語言(本例中為英語)。
- 配寘:一個TesseractConfiguration物件,允許進一步自定義:
ReadBarCodes:禁用條碼閱讀。BlackListCharacters:指定要排除的字元(不識別的字元)。WhiteListCharacters:未指定白名單,允許所有字元。PageSegmentationMode:將頁面分割模式設置為"AutoOsd"。TesseractVariables:未使用自定義變數。
MultiThreaded:禁用多執行緒。
- OCR輸入和圖像載入:
ocrInput的OcrInput物件。 圖像文件"sample1.png"被新增到ocrInput。 - 文字提取:在
ocrInput。 結果被儲存在ocrResult變數中。 - 輸出:提取的文字使用
Console.WriteLine(ocrResult.Text)列印到控制台。
輸出

步驟5:進行IronOCR讀取操作的性能調整
當使用IronOCR時,您可以存取多個圖像過濾器,這些過濾器可以在進行OCR之前幫助預處理圖像。 這些過濾器優化圖像質量、提高可見性並減少噪點或偽影。 它們有助於提高OCR操作的性能。
-
旋轉:
旋轉過濾器允許您按指定數量的度數順時針旋轉圖像。對於逆時針旋轉,使用負數。
-
去斜:
去斜過濾器校正圖像的傾斜,確保文字直立且正交。 這對於OCR特別有用,因為Tesseract在掃描方向正確時效果最佳。
-
縮放:
縮放過濾器按比例縮放OCR輸入頁面。
-
二值化:
二值化過濾器將每個像素轉換為黑色或白色,中間地帶沒有。 在文字和背景對比度非常低的情況下,它可以提高OCR性能。
-
轉為灰度:
灰度過濾器將每個像素轉換為灰度。 雖然不大可能顯著提高OCR精度,但可能會提高速度。
-
反轉:
反轉過濾器顏色反轉—白色變成黑色,黑色變成白色。
-
替換顏色:
替換顏色過濾器將圖像中的特定顏色替換為另一種顏色,考慮一定閾值。
-
對比度:
對比度過濾器自動增加對比度。它通常能改善低對比度掃描中的OCR速度和準確性。
-
膨脹和腐蝕:
這些先進的形態過濾器會操作圖像中物件的邊界。
- 膨脹增加像素到物件邊界。
- 腐蝕從物件邊界移除像素。
-
銳化:
銳化過濾器會銳化模糊的OCR文件並將Alpha通道扁平化為白色。
-
去噪:
去噪過濾器去除數位噪聲。應用於預期噪聲的情況。
-
深層清理背景噪聲:
此重加噪聲去除過濾器只應在已知有極端文件背景噪聲時使用。 它可能會降低清潔文件的OCR準度且非常消耗CPU。
-
提升解析度:
增強解析度過濾器會提升低品質圖像的解析度。 由於自動解析度處理,通常不太需要。
以下是如何在C#中使用IronOCR應用過濾器的範例:
var ocr = new IronTesseract();
var input = new OcrInput();
input.LoadImage("sample.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
var ocr = new IronTesseract();
var input = new OcrInput();
input.LoadImage("sample.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Dim ocr = New IronTesseract()
Dim input = New OcrInput()
input.LoadImage("sample.png")
input.Deskew()
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
常見的OCR應用
- 文件數位化:OCR被廣泛用於將掃描的紙質文件(如發票、收據、表單和合同)轉換為數位格式。 此數位化過程簡化了文件的儲存、檢索和管理,減少了紙張雜亂並提高了效率。
- 資料提取:OCR允許從掃描的文件、圖像和PDF中提取文字和資料。 這些提取資料可以用於自動資料輸入、內容分析、編目以及與資料庫或業務系統整合。
- 影像文字辨識:OCR技術允許從列印的文件和圖像中提取文字以進行編目和搜索用途。 此功能被用於各種應用,包含擴增實境、基於圖像的搜索引擎和翻譯服務。
- 自動車牌識別(ALPR):ALPR系統使用OCR從由安裝在交通監控、停車管理、收費和執法應用的攝像機拍攝的圖像或影片流中讀取車牌號。
- 可及性解決方案:OCR在為視障人士建立可存取內容方面起著至關重要的作用。 通過將圖像或文件中的文字轉換為語音或點字,OCR幫助資訊對於身心障礙人士的可達性。
- 身份認證:OCR技術被用於身份認證過程中,例如掃描和處理身份文件如護照、駕照和身份證。 它協助驗證文件的真偽並提取相關資訊以供身份認證用途。
- 銀行與金融:OCR用於銀行和金融,如閱讀支票、處理發票、將現有的PDF文件轉換、從財務報告中提取資料以及自動化基於文件的工作流程,以提高財務操作的準確性與效率。
- 自動化翻譯:OCR技術整合進翻譯工具和語言學習應用中,用以將印刷文字從一種語言轉換為另一種語言。 使用者可以用他們的裝置捕捉文字,OCR協助將其即時翻譯成所需的語言。
- 檔案及歷史文件保存:OCR被用於將檔案資料和歷史文獻數位化,以數位格式保存以便未來存取、研究和分析,同時確保珍貴文化遺產的保存。
授權要求
IronOCR. 提供以下資訊以取得並寄送您的電子郵件ID的金鑰

一旦通過購買或免費試用獲得金鑰,按照以下步驟使用金鑰。
設置您的授權金鑰:使用程式碼設定您的IronOCR授權金鑰。 在應用程式啟動時新增以下行(在使用IronOCR之前):
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"
全域應用程式金鑰(Web.Config或App.Config):要在整個應用程式中全域應用金鑰,使用配置文件(Web.Config或App.Config)。 將以下金鑰新增到您的appSettings中:
<configuration>
<appSettings>
<add key="IronOcr.LicenseKey" value="IRONOCR-MYLICENSE-KEY-1EF01"/>
</appSettings>
</configuration>
<configuration>
<appSettings>
<add key="IronOcr.LicenseKey" value="IRONOCR-MYLICENSE-KEY-1EF01"/>
</appSettings>
</configuration>
使用.NET Core appsettings.json:對於.NET Core應用程式,在您的專案根目錄中建立一個appsettings.json文件。 用您的授權值替換"IronOcr.LicenseKey"金鑰:
{
"IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
測試您的授權金鑰:通過測試來確認您的金鑰已正確安裝:
bool result = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01");
bool result = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01");
Dim result As Boolean = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01")
結論
總的來説,IronOCR提供的OCR具有強大的解決方案,起始於$999。 借助IronOCR的力量,在您的C#專案中開啟一個可能的世界。
常見問題
如何在C#中執行字元識別?
要在C#中執行字元識別,您可以使用IronOCR。首先在Visual Studio中建立一個新的C#專案,然後通過NuGet套件管理器安裝IronOCR .NET庫。使用IronOCR的類和方法從圖像、PDF或掃描文件中提取文字。
使用IronOCR進行文字提取的好處是什麼?
IronOCR通過改進Tesseract OCR引擎的準確性和速度來增強文字提取。它支持超過125種語言,提供基於區域的OCR能力,並提供圖像預處理工具以優化OCR結果。
如何使用IronOCR優化OCR準確性?
要使用IronOCR優化OCR準確性,可以使用旋轉、校正、對比度調整等圖像預處理工具。您還可以通過語言選擇、頁面分割、字元白名單或黑名單進行精細調整配置。
OCR技術的常見用途是什麼?
OCR技術通常用於文件數字化、資料提取、圖像中文字識別、自動車牌識別和無障礙解決方案。它還在銀行、身份驗證和檔案文件保存中發揮作用。
哪些環境可以支持IronOCR?
IronOCR相容各種.NET環境,包括C#、F#和VB.NET。它支持.NET版本8、7、6、Core、Standard和Framework,使其適合於許多開發設置。
如何處理IronOCR的授權?
要處理IronOCR的授權,請在應用程式啟動時使用IronOcr.License.LicenseKey屬性應用您的授權金鑰。或者,您可以在Web.Config或App.Config文件中配置它,或者在.NET Core應用程式的appsettings.json中配置。
IronOCR提供了哪些進階功能?
IronOCR提供進階功能,如語言選擇、頁面分割模式、自訂Tesseract變數和字元白名單或黑名單。這些功能允許對OCR操作進行詳細定制和優化。
我可以使用IronOCR進行基於區域的OCR嗎?
是的,IronOCR支持基於區域的OCR,允許您指定圖像或文件的特定區域進行文字提取。這一功能在從複雜布局中進行目標資料提取時非常有用。
如何將OCR整合到我的C#專案中?
要将OCR整合到C#專案中,請從NuGet安裝IronOCR庫,然後在您的專案中引用它。利用該庫的方法來實現OCR功能,使您的應用程式能夠處理圖像和掃描文件。



