跳至頁尾內容
USING IRONOCR

如何在 C# 中建立字元識別

光學字元辨識(OCR)技術允許將文字轉換成機器可讀的數位格式。 當文件被掃描時(例如發票或收據),電腦將其保存為圖像文件。然而,掃描圖像中的文字無法使用普通文字編輯器進行編輯、搜尋或計數。

OCR可以處理圖像,提取文字,並將其轉換為電腦可讀的文字格式。 這使得可以從多個來源提取文字,包括PDF文件和其他掃描圖像。 此外,OCR功能超越了簡單的文字提取,它包括主要的圖像格式和PDF文件,將它們轉換為可搜尋的OCR資料。

在C#中,開發者可以通過各種程式庫利用OCR的強大功能,其中之一就是由Iron Software開發的IronOCR強大程式庫。 在本教程中,我們將探討OCR的基礎知識,並展示如何利用IronOCR在C#中高效地進行字元辨識。

How to create Character Recognition in C

  1. 建立一個全新的C#專案,並在Visual Studio中為專案命名。
  2. 安裝IronOCR .NET程式庫,並將其包括在專案文件夾中。
  3. 利用IronOCR Tesseract從圖像中讀取文字。
  4. 利用IronOCR高級功能來讀取圖像中的文字。
  5. 調整IronOCR讀取操作的性能。

開始使用IronOCR

IronOCR是一個由Iron Software開發的C#程式庫,提供先進的OCR功能。 它提供從圖像、PDF和掃描文件中準確提取文字的功能。 在我們深入探討程式碼之前,請確認您已在專案中安裝IronOCR。

來自Iron SoftwareIronOCR的關鍵功能

改進的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從圖像中讀取文字。

先決條件

  1. Visual Studio:請確保您已安裝Visual Studio或任何其他C#開發環境。
  2. NuGet 包管理器:請確保NuGet存在,以便管理項目中的套件。

步驟1:在Visual Studio中建立一個新的C#專案

開始時,讓我們建立一個使用Visual Studio的控制台應用程式,如下所示。

如何在C#中建立字元辨識:圖1 - 在Visual Studio中建立一個全新的C#專案

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

如何在C#中建立字元辨識:圖2 - 提供專案名稱和保存位置

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

如何在C#中建立字元辨識:圖3 - 選擇專案的適當.NET版本

點擊"建立"按鈕以建立新的專案。

步驟2:安裝IronOCR程式庫並將其整合到您的專案中

IronOCR可以在NuGet包管理器控制台中找到,如下所示。 使用提供的命令安裝套件。

如何在C#中建立字元辨識:圖4 - IronOCR NuGet包管理器下載頁面

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

如何在C#中建立字元辨識:圖5 - 透過NuGet包管理器的瀏覽選項卡搜尋IronOCR

一旦安裝完畢,應用程式便可以利用IronOCR從圖像中讀取文字。

步驟3:利用IronOCR Tesseract從圖像中讀取文字

IronOCR乃是唯一提供Tesseract 5 OCR能力的.NET程式庫。 目前它仍然是所有程式語言中最先進的Tesseract 5程式庫。 IronOCR無縫整合了Tesseract 5到各種.NET環境中,包括Framework、Standard、Core、Xamarin和Mono,確保對整個生態系統的全面支持。

請考慮以下圖像文件作為輸入。 現在,讓我們看看如何讀取這個圖像文件中的文字。

如何在C#中建立字元辨識:圖6 - 範例輸入

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
$vbLabelText   $csharpLabel

程式碼解釋

  1. IronTesseract實例:我們首先建立一個IronTesseract實例以執行OCR操作。
  2. 載入圖像:我們將樣本圖像載入到OcrInput物件中。
  3. 讀取文字:讀取圖像中的文字,並將結果列印到控制台。

輸出

如何在C#中建立字元辨識:圖7 - 使用IronOCR提取的文字

步驟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
$vbLabelText   $csharpLabel

頁面分割模式

PageSegmentationMode決定了Tesseract如何對輸入圖像進行分割。 選項包括AutoOsd、SingleBlock、SingleLine等。 例如:

ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
$vbLabelText   $csharpLabel

自定義Tesseract變數

您可以通過設置特定變數來微調Tesseract。 例如,要禁用並行處理:

ocr.Configuration.TesseractVariables["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables("tessedit_parallelize") = False
$vbLabelText   $csharpLabel

列入和排除字元名單

使用WhiteListCharacters和BlackListCharacters來控制Tesseract識別哪些字元。 例如:

ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë|^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë|^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ocr.Configuration.BlackListCharacters = "`ë|^"
$vbLabelText   $csharpLabel

額外配置變數

探索其他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)
$vbLabelText   $csharpLabel

現在讓我們嘗試使用高級設置來解碼相同的圖像

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
$vbLabelText   $csharpLabel

程式碼解釋

  1. IronOCR配寘:建立了一個IronTesseract(主要的IronOCR類)實例並將其分配給變數ocrTesseract

    配寘設置應用於ocrTesseract

    • 語言:指定OCR的語言(本例中為英語)。
    • 配寘:一個TesseractConfiguration物件,允許進一步自定義:
      • ReadBarCodes:禁用條碼閱讀。
      • BlackListCharacters:指定要排除的字元(不識別的字元)。
      • WhiteListCharacters:未指定白名單,允許所有字元。
      • PageSegmentationMode:將頁面分割模式設置為"AutoOsd"。
      • TesseractVariables:未使用自定義變數。
    • MultiThreaded:禁用多執行緒。
  2. OCR輸入和圖像載入:ocrInput的OcrInput物件。 圖像文件"sample1.png"被新增到ocrInput
  3. 文字提取:ocrInput。 結果被儲存在ocrResult變數中。
  4. 輸出:提取的文字使用Console.WriteLine(ocrResult.Text)列印到控制台。

輸出

如何在C#中建立字元辨識:圖8 - 使用IronOCR提取的文字

步驟5:進行IronOCR讀取操作的性能調整

當使用IronOCR時,您可以存取多個圖像過濾器,這些過濾器可以在進行OCR之前幫助預處理圖像。 這些過濾器優化圖像質量、提高可見性並減少噪點或偽影。 它們有助於提高OCR操作的性能。

  1. 旋轉:

    旋轉過濾器允許您按指定數量的度數順時針旋轉圖像。對於逆時針旋轉,使用負數。

  2. 去斜:

    去斜過濾器校正圖像的傾斜,確保文字直立且正交。 這對於OCR特別有用,因為Tesseract在掃描方向正確時效果最佳。

  3. 縮放:

    縮放過濾器按比例縮放OCR輸入頁面。

  4. 二值化:

    二值化過濾器將每個像素轉換為黑色或白色,中間地帶沒有。 在文字和背景對比度非常低的情況下,它可以提高OCR性能。

  5. 轉為灰度:

    灰度過濾器將每個像素轉換為灰度。 雖然不大可能顯著提高OCR精度,但可能會提高速度。

  6. 反轉:

    反轉過濾器顏色反轉—白色變成黑色,黑色變成白色。

  7. 替換顏色:

    替換顏色過濾器將圖像中的特定顏色替換為另一種顏色,考慮一定閾值。

  8. 對比度:

    對比度過濾器自動增加對比度。它通常能改善低對比度掃描中的OCR速度和準確性。

  9. 膨脹腐蝕:

    這些先進的形態過濾器會操作圖像中物件的邊界。

    • 膨脹增加像素到物件邊界。
    • 腐蝕從物件邊界移除像素。
  10. 銳化:

    銳化過濾器會銳化模糊的OCR文件並將Alpha通道扁平化為白色。

  11. 去噪:

    去噪過濾器去除數位噪聲。應用於預期噪聲的情況。

  12. 深層清理背景噪聲:

    此重加噪聲去除過濾器只應在已知有極端文件背景噪聲時使用。 它可能會降低清潔文件的OCR準度且非常消耗CPU。

  13. 提升解析度:

    增強解析度過濾器會提升低品質圖像的解析度。 由於自動解析度處理,通常不太需要。

以下是如何在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)
$vbLabelText   $csharpLabel

常見的OCR應用

  1. 文件數位化:OCR被廣泛用於將掃描的紙質文件(如發票、收據、表單和合同)轉換為數位格式。 此數位化過程簡化了文件的儲存、檢索和管理,減少了紙張雜亂並提高了效率。
  2. 資料提取:OCR允許從掃描的文件、圖像和PDF中提取文字和資料。 這些提取資料可以用於自動資料輸入、內容分析、編目以及與資料庫或業務系統整合。
  3. 影像文字辨識:OCR技術允許從列印的文件和圖像中提取文字以進行編目和搜索用途。 此功能被用於各種應用,包含擴增實境、基於圖像的搜索引擎和翻譯服務。
  4. 自動車牌識別(ALPR):ALPR系統使用OCR從由安裝在交通監控、停車管理、收費和執法應用的攝像機拍攝的圖像或影片流中讀取車牌號。
  5. 可及性解決方案:OCR在為視障人士建立可存取內容方面起著至關重要的作用。 通過將圖像或文件中的文字轉換為語音或點字,OCR幫助資訊對於身心障礙人士的可達性。
  6. 身份認證:OCR技術被用於身份認證過程中,例如掃描和處理身份文件如護照、駕照和身份證。 它協助驗證文件的真偽並提取相關資訊以供身份認證用途。
  7. 銀行與金融:OCR用於銀行和金融,如閱讀支票、處理發票、將現有的PDF文件轉換、從財務報告中提取資料以及自動化基於文件的工作流程,以提高財務操作的準確性與效率。
  8. 自動化翻譯:OCR技術整合進翻譯工具和語言學習應用中,用以將印刷文字從一種語言轉換為另一種語言。 使用者可以用他們的裝置捕捉文字,OCR協助將其即時翻譯成所需的語言。
  9. 檔案及歷史文件保存:OCR被用於將檔案資料和歷史文獻數位化,以數位格式保存以便未來存取、研究和分析,同時確保珍貴文化遺產的保存。

授權要求

IronOCR. 提供以下資訊以取得並寄送您的電子郵件ID的金鑰

如何在C#中建立字元辨識:圖9 - IronPDF試用授權頁面

一旦通過購買或免費試用獲得金鑰,按照以下步驟使用金鑰。

設置您的授權金鑰:使用程式碼設定您的IronOCR授權金鑰。 在應用程式啟動時新增以下行(在使用IronOCR之前):

IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"
$vbLabelText   $csharpLabel

全域應用程式金鑰(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>
XML

使用.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")
$vbLabelText   $csharpLabel

結論

總的來説,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功能,使您的應用程式能夠處理圖像和掃描文件。

Kannaopat Udonpant
軟體工程師
在成為軟體工程師之前,Kannapat在日本北海道大學完成了環境資源博士學位。在攻讀學位期間,Kannapat還成為車輛機器人實驗室的一員,該實驗室隸屬於生產工程系。在2022年,他憑藉C#技能加入了Iron Software的工程團隊,專注於IronPDF。Kannapat珍視他的工作,因為他能直接向撰寫大部分IronPDF程式碼的開發者學習。除了同儕學習,Kannapat還喜歡在Iron Software工作的社交方面。不寫程式碼或文件時,Kannapat通常在他的PS5上玩遊戲或重看The Last of Us。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話