使用 IRONOCR

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

Kannaopat Udonpant
坎納帕特·烏頓潘
2024年4月29日
分享:

介紹

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

然而,OCR 可以處理圖像,提取文本,並將其轉換為電腦可以讀取的文本格式。 這使得可以從各種來源提取文本,包括 PDF 檔案和其他掃描圖像。 此外,OCR 功能不僅限於簡單的文字提取,還包括主要的圖像格式和 PDF 文件,將它們轉換為可搜索的 OCR 資料。

在 C# 中,開發人員可以通過各種函式庫利用 OCR 的強大功能,其中之一是來自 Iron Software 的強大函式庫 IronOCR。 在本教程中,我們將探索光學字符識別 (OCR) 的基本原理,並演示如何使用 IronOCR 在 C# 中高效執行字符識別。

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

  1. 在 Visual Studio 中建立一個全新的 C# 專案並命名該專案。

  2. 安裝 IronOCR .NET 程式庫並將其包含在專案資料夾中。

  3. 利用 IronOCR Tesseract 從圖片中讀取文字。

  4. 利用IronOCR進階功能讀取影像中的文字

  5. 調整IronOCR讀取操作的效能。

開始使用IronOCR

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

IronOCR 的主要功能來自 Iron Software

改進的 Tesseract OCR 引擎

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

廣泛的語言覆蓋

IronOCR 支援超過 127 種語言,能夠熟練處理多語言需求,成為要求語言多樣性的應用程式的理想選擇。

多樣化的輸出選擇

提取的文本可以方便地輸出為純文字或結構化數據,以便無縫整合到進一步的處理管道中。 此外,IronOCR 支援直接從影像輸入創建可搜尋的 PDF。

跨平台適應性

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

利用 Tesseract 5

IronOCR 利用經過精心調整以便在 .NET 生態系統中獲得最佳性能的 Tesseract 5 的強大功能。

區域式 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 版本

單擊「Create」按鈕以創建新專案。

步驟 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

  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, // read bar codes false
                BlackListCharacters = "`ë
^", // black listed characters
                WhiteListCharacters = null, // no white list, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // no custom variable 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 image
    }
}
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, // read bar codes false
                BlackListCharacters = "`ë
^", // black listed characters
                WhiteListCharacters = null, // no white list, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // no custom variable 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 image
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

程式碼說明

  1. IronOCR 配置:創建 IronTesseract(主要的 IronOCR 類別)的一個實例,並將其分配給變數 ocrTesseract。

    配置設定應用於ocrTesseract:

    1. 語言:指定用於 OCR 的語言(在此情況下為英文)。

    2. 配置:TesseractConfiguration 物件,允許進一步自訂:

    3. ReadBarCodes:禁用讀取條碼。

    4. BlackListCharacters:指定要列入黑名單的字符(不識別的字符)。

    5. WhiteListCharacters:未指定白名單,允許所有字符。

    6. PageSegmentationMode:設置頁面分割模式為 “AutoOsd”。

    7. TesseractVariables:未使用自定義變數。
    1. 多線程:停用多線程。
  1. OCR 輸入及圖片載入: 使用區塊創建一個可處置的 ocrInput 物件,其類型為 OcrInput。 圖像文件“sample1.png”已添加到 ocrInput。

  2. 文字提取:在 ocrTesseract 上調用 Read 方法,傳入 ocrInput。

  3. 結果存儲在 ocrResult 變數中。

  4. 輸出:使用 Console.WriteLine(ocrResult.Text) 將提取的文字輸出到控制台。

輸出

如何在 C# 中創建字符識別:圖 8 - 使用 IronOCR 提取的文本

步驟 5:IronOCR 讀取操作的效能調整。

使用IronOCR時,您可以使用各種影像濾鏡來協助在執行OCR之前預處理影像。 這些過濾器優化圖像質量,提高可見性,並減少噪點或偽影。 它們有助於提高 OCR 操作的性能。

  1. 旋轉

    旋轉濾鏡允許您將圖像按指定的度數順時針旋轉。如需逆時針旋轉,請使用負數。

  2. 去偏斜

    Deskew 濾鏡校正圖像傾斜,確保文字直立且正交。 這對於光學字符識別特別有用,因為 Tesseract 在正確定向的掃描中表現最佳。

  3. 規模

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

  4. 二值化

    Binarize 濾鏡將每個像素轉換為黑色或白色,沒有中間色調。 在文字與背景之間對比度極低的情況下,它可以提高OCR的效能。

  5. ToGrayScale:將圖像轉換為灰階。

    ToGrayScale 濾鏡將每個像素轉換為灰階色調。 雖然不太可能顯著提高 OCR 精確度,但可能會提升速度。

  6. 反轉

    反轉濾鏡會反轉顏色——白色變成黑色,黑色變成白色。

  7. ReplaceColor

    ReplaceColor 濾鏡會在考慮特定閾值的情況下,將圖像中的特定顏色替換為另一種顏色。

  8. 對比

    對比濾鏡會自動增加對比度。它往往能在低對比度掃描中提高OCR的速度和準確性。

  9. 膨脹侵蝕

    這些高級形態學過濾器可操控影像中的物體邊界。

    1. 膨脹會在物體邊界添加像素。
    1. 侵蝕從物件邊界移除像素。

    2. 銳化

    銳化濾鏡會銳化模糊的OCR文件,並將alpha通道展平為白色。

    1. 去噪

    去噪濾鏡能消除數位噪音。在預期有噪音的情況下使用它。

    1. 去除背景噪音

    當已知文件有極端背景噪聲時,應僅使用此重度背景噪聲消除濾波器。 它可能會降低對於乾淨文件的OCR準確性,而且會佔用大量的CPU資源。

    1. EnhanceResolution

    EnhanceResolution 濾鏡增強了低品質圖像的解析度。 由於自動解析度處理,通常不需要。

    以下是一個在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>
XML

使用 .NET Core 的 appsettings.json:對於 .NET Core 應用程式,請在專案的根目錄中創建一個 appsettings.json 檔案。 將 "IronOcr.LicenseKey" 鍵替換為您的授權值:

{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
If True Then
	"IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
End If
$vbLabelText   $csharpLabel

測試您的授權金鑰:透過測試來驗證您的金鑰是否已正確安裝:

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,起價為$749。 透過IronOCR擁抱OCR的力量,為您的C#專案開啟無限的可能性。

Kannaopat Udonpant
坎納帕特·烏頓潘
軟體工程師
在成為軟體工程師之前,Kannapat 在日本北海道大學完成了環境資源博士學位。在攻讀學位期間,Kannapat 也成為了車輛機器人實驗室的成員,該實驗室隸屬於生物生產工程學系。2022 年,他利用自己的 C# 技能,加入了 Iron Software 的工程團隊,專注於 IronPDF 的開發。Kannapat 珍視這份工作,因為他可以直接向負責撰寫大部分 IronPDF 程式碼的開發人員學習。除了同儕學習外,Kannapat 還享受在 Iron Software 工作的社交方面。當他不在撰寫程式碼或文件時,Kannapat 通常會在 PS5 上玩遊戲或重看《最後生還者》。
< 上一頁
如何在 C# 中執行車輛註冊 OCR
下一個 >
如何使用C#中的OCR讀取身份證件