跳過到頁腳內容
使用 IRONOCR

如何在 C# 中創建字符識別

光學字符識別(OCR)技術允許將文本轉換為機器可讀的數字格式。 當文檔被掃描(例如發票或收據)時,電腦會將其保存為圖像文件。但是,常規文本編輯器無法編輯、搜索或計算掃描圖像中的文本。

OCR 可以處理圖像,提取文本,並將其轉換為計算機可讀的文本格式。 這使得從各種來源(包括 PDF 文件和其他掃描圖像)中提取文本成為可能。 此外,OCR 功能不僅限於簡單的文本提取,還包括主要圖像格式和 PDF 文檔,將其轉換為可搜索的 OCR 數據。

In C#, developers can leverage the power of OCR through various libraries, and one of which is the powerful library IronOCR from Iron Software. 在本教程中,我們將探索 OCR 的基礎知識,並演示如何在 C# 中使用IronOCR高效地執行字符識別。

如何在 C# 中創建字符識別

  1. 在 Visual Studio 中創建一個全新的 C# 項目並命名。
  2. 安裝 IronOCR .NET 庫,並將其包含在項目文件夾中。
  3. 使用 IronOCR Tesseract 從圖像中讀取文本。
  4. 使用 IronOCR 高級功能讀取圖像中的文本。
  5. 調整 IronOCR 讀取操作的性能。

開始使用 IronOCR

IronOCR, a C# library developed by Iron Software 開發的 C# 庫,提供高級 OCR 功能。 它能夠準確提取圖像、PDF 和掃描文檔中的文本。 在探討代碼之前,請確保在項目中安裝了 IronOCR。

Key features of IronOCR from Iron Software

改進的 Tesseract OCR 引擎

IronOCR 通過提高準確性和速度來提升廣泛使用的 Tesseract OCR 引擎的功能。 它是一個強大的解決方案,用於從各種來源提取文本,包括圖像、PDF 和多種文檔格式。

語言廣泛覆蓋

支持超過 125 種語言,IronOCR 能夠處理多語言需求,是需要語言多樣性應用程序的理想選擇。

多樣的輸出選擇

提取的文本可以方便地以純文本或結構化數據形式輸出,以便於進一步的處理管線集成。 此外,IronOCR 還促使直接從圖像輸入中創建可搜索的 PDF。

跨平台適應性

專為與 C#、F# 和 VB.NET 的兼容性而設計,IronOCR 能夠在包括版本 8、7、6、Core、Standard 和 Framework 的各種 .NET 環境中無縫運行。

利用 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 can be found in the 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 輸入和圖像加載: 一個 using 塊創建一個可處置的 ocrInput 對象,類型為 OcrInput。 將圖像文件“sample1.png”添加到 ocrInput
  3. 文本提取: 調用 ocrTesseract 上的 Read 方法,傳遞 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>
    <!-- Other settings -->
    <appSettings>
        <add key="IronOcr.LicenseKey" value="IRONOCR-MYLICENSE-KEY-1EF01"/>
    </appSettings>
</configuration>
<configuration>
    <!-- Other settings -->
    <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,提供了從 $799 開始的強大 OCR 解決方案。 擁抱 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,允許您指定圖片或文件的特定區域進行文字提取。此功能對於從複雜佈局中進行目標數據提取很有用。

我如何在我的 C# 專案中集成 OCR?

要在您的 C# 專案中集成 OCR,從 NuGet 安裝 IronOCR 庫,然後在專案中引用它。利用庫的方法實現 OCR 功能,讓您的應用程序可以處理圖片和掃描文件。

Kannaopat Udonpant
軟體工程師
在成為软件工程師之前,Kannapat 從日本北海道大學完成了環境資源博士學位。在追逐學位期间,Kannapat 還成為了生產工程系一部份——汽車机器人实验室的成員。2022 年,他利用他的 C# 技能加入 Iron Software 的工程團隊, 專注於 IronPDF。Kannapat 珍惜他的工作,因为他直接向编写大部分 IronPDF 使用的代码的开发者学习。除了同行学习,Kannapat 还喜欢在 Iron Software 工作的社交十环。当他不编写代码或文档时,Kannapat 通常在他的 PS5 上打游戏或重看《The Last of Us》。