跳過到頁腳內容
使用 IRONOCR

C# 中的 OCR CodeProject Tutorial:使用 IronOCR 從影像中萃取文字

C# 中的光學字元辨識 (OCR) 功能可讓您從 .NET 應用程式中的掃描文件、影像檔案和 TIFF 檔案中提取機器可讀文字。 IronOCR是一個 .NET 原生 OCR 庫,您只需安裝一個 NuGet 包,幾行程式碼即可開始從映像中讀取文字——無需外部服務,無需運行時依賴,也無需按次 API 呼叫付費。

立即開始 IronOCR 的免費試用,並跟隨以下程式碼範例進行操作。

如何在.NET專案中安裝IronOCR?

將 OCR 新增至 .NET 10 專案的最快方法是透過 NuGet 套件管理器。 在專案目錄中開啟終端機並執行 dotnet CLI 命令,或使用 Visual Studio 中的套件管理器控制台:

# .NET CLI
dotnet add package IronOcr

# Package Manager Console
Install-Package IronOcr
# .NET CLI
dotnet add package IronOcr

# Package Manager Console
Install-Package IronOcr
SHELL

安裝完成後,NuGet 套件管理員會自動下載所有必要的組件並連接參考。 IronOCR 的目標框架為 .NET Framework 4.6.2+、.NET Core 3.1+ 以及 .NET 5 至 .NET 10,因此它可以在控制台應用程式、ASP.NET Core 服務、WPF 應用程式和 Azure Functions 中運行。

您無需註冊許可證金鑰即可在本機上進行測試-在套用許可證之前,輸出結果會顯示試用浮水印。 新增 using 指令,並在準備投入生產環境時,在啟動時傳遞一次金鑰:

using IronOcr;

// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
using IronOcr;

// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronOcr

' Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

有關定價和啟用詳情,請參閱IronOCR 授權頁面

如何從圖像文件中提取文字?

核心 OCR 工作流程涉及三個物件:IronTesseract(引擎)、OcrInput(輸入容器)和 OcrResult(輸出)。 下面的範例讀取一個 PNG 文件,並將識別出的文字列印到控制台。

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("sample-document.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("sample-document.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.LoadImage("sample-document.png")

    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

光學字元識別輸出

OCR in C# CodeProject Tutorial:使用 IronOCR 從圖片中萃取文字:圖片 1 - OCR 輸出的螢幕截圖

IronTesseract 為 Tesseract 5 引擎封裝了 .NET 友善的預設設定和自動模型管理。 OcrInput.LoadImage 接受 PNG、JPEG、BMP、GIF、TIFF 和 WebP 文件,因此您很少需要在將圖像傳遞給引擎之前轉換格式。

OcrResult.Text 屬性傳回一個由換行符號連接的所有可識別字元組成的純字串。 如需更豐富的存取資訊(例如單字邊界框、置信度分數、每段文字),請瀏覽 result.Pagesresult.Paragraphsresult.Words 和 @@--CODE-108615--@ 集合。

值得了解的關鍵特性:

  • result.Pages[0].Text -- 單頁文本
  • result.Words[n].Textresult.Words[n].Confidence -- 逐字準確率 (0.0 -- 1.0)
  • result.Pages[0].Paragraphs -- 用於結構化擷取的段落分割

您也可以呼叫 ocr.ReadAsync(input) 來保持桌面或 Web 應用程式中的 UI 執行緒空閒。

如何處理掃描文件和TIFF文件?

在文件掃描工作流程中,多頁 TIFF 檔案很常見。 IronOCR 使用 LoadImageFrames 來處理它們,這樣您就可以精確地選擇要處理的訊框(頁面)——當您只需要大型存檔的子集時非常有用。

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);

// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
}
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);

// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
}
Imports IronOcr

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    Dim pageIndices As Integer() = {0, 1, 2}
    input.LoadImageFrames("scanned-documents.tiff", pageIndices)

    ' Correct skew and remove noise before reading
    input.Deskew()
    input.DeNoise()

    Dim result As OcrResult = ocr.Read(input)

    For Each page In result.Pages
        Console.WriteLine($"Page {page.PageNumber}:")
        Console.WriteLine(page.Text)
    Next
End Using
$vbLabelText   $csharpLabel

OCR 從多頁 TIFF 檔案輸出

OCR in C# CodeProject Tutorial:使用 IronOCR 從影像中萃取文字:影像 2 - 多頁 TIFF OCR 輸出

Deskew 旋轉影像以校正平板掃描器引入的任何傾斜。 DeNoise 可去除乾擾 Tesseract 引擎的斑點和 JPEG 偽影。這兩個預處理濾波器配合使用,可顯著提高低品質掃描影像的辨識準確率。

針對難以辨認的來源資料,可使用其他 OcrInput 過濾器:

  • input.Sharpen() -- 提高模糊影像的邊緣對比度
  • input.Binarize() -- 轉換為黑白格式,以獲得傳真品質的文檔
  • input.Scale(200) -- 放大小圖像以獲得更好的字元分離效果
  • input.Rotate(90) -- 修正旋轉的文件方向

有關預處理選項及其應用時機的完整列表,請參閱IronOCR 影像濾鏡指南

如何設定 OCR 的語言支援?

IronOCR 預設讀取英文文字。 若要處理其他語言的文檔,請安裝相符的語言 NuGet 套件,並在 IronTesseract 實例上設定 Language 屬性。

dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.Japanese
dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.Japanese
SHELL

然後配置引擎,對於雙語文檔,添加第二種語言:

using IronOcr;
using IronOcr.Languages;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);

using var input = new OcrInput();
input.LoadImage("german-invoice.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronOcr.Languages;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);

using var input = new OcrInput();
input.LoadImage("german-invoice.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports IronOcr.Languages

Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.German

' For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French)

Using input As New OcrInput()
    input.LoadImage("german-invoice.png")

    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

IronOCR 支援超過 125 種語言,每種語言都以單獨的輕量級 NuGet 套件的形式分發。 這樣可以保持生產二進位檔案的大小—只包含應用程式實際需要的語言資料。 當您呼叫 AddSecondaryLanguage 時,引擎會在辨識過程中融合主要語言模型和輔助語言模型。

如何處理 OCR 錯誤並提高識別結果?

生產應用需要針對OCR流程進行錯誤處理。影像品質問題、檔案缺失或格式不支援都可能導致異常。 將呼叫包裹在 try/catch 區塊中,可以得到一個清晰的恢復路徑。

using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

try
{
    using var input = new OcrInput();
    input.LoadImage("document.png");
    input.DeNoise();
    input.Deskew();

    OcrResult result = ocr.Read(input);

    if (result.Text.Length > 0)
    {
        Console.WriteLine("Recognised text:");
        Console.WriteLine(result.Text);
    }
    else
    {
        Console.WriteLine("No text was detected in the image.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"OCR error: {ex.Message}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

try
{
    using var input = new OcrInput();
    input.LoadImage("document.png");
    input.DeNoise();
    input.Deskew();

    OcrResult result = ocr.Read(input);

    if (result.Text.Length > 0)
    {
        Console.WriteLine("Recognised text:");
        Console.WriteLine(result.Text);
    }
    else
    {
        Console.WriteLine("No text was detected in the image.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"OCR error: {ex.Message}");
}
Imports IronOcr

Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English

Try
    Using input As New OcrInput()
        input.LoadImage("document.png")
        input.DeNoise()
        input.Deskew()

        Dim result As OcrResult = ocr.Read(input)

        If result.Text.Length > 0 Then
            Console.WriteLine("Recognised text:")
            Console.WriteLine(result.Text)
        Else
            Console.WriteLine("No text was detected in the image.")
        End If
    End Using
Catch ex As Exception
    Console.WriteLine($"OCR error: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

以下幾個設定有助於提高準確率:

  • ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto -- 讓 Tesseract 自動選擇單列、多列和單字佈局
  • ocr.Configuration.ReadBarCodes = false -- 如果您正在處理純文字文件並希望提高吞吐量,請停用條碼檢測
  • ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5 -- 確保您使用最快的可用引擎

對於欄位位置可預測的結構化表單,請使用基於區域的 OCR僅讀取重要區域:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports IronSoftware.Drawing

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    Dim region As New CropRectangle(x:=50, y:=200, width:=600, height:=100)
    input.LoadImage("form.png", region)

    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

將辨識範圍限制在裁切矩形區域內,可減少大影像處理時間高達 90%。 此技術非常適合用於提取發票號碼、讀取表單欄位和掃描身分證件。 更多詳情請參閱區域 OCR 使用指南

如何從識別的文本創建可搜尋的 PDF?

將掃描影像存檔轉換為可搜尋的 PDF 檔案是 OCR 最有價值的應用案例之一。 生成的檔案保留了原始的視覺外觀,同時嵌入了一個不可見的文字層,PDF 檢視器、搜尋引擎和螢幕閱讀器可以對其進行索引。

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");

Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");

Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");
Imports IronOcr

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.Title = "Quarterly Report Q1 2026"
    input.LoadImage("page1.png")
    input.LoadImage("page2.png")
    input.LoadImage("page3.png")

    Dim result As OcrResult = ocr.Read(input)
    result.SaveAsSearchablePdf("searchable-output.pdf")

    Console.WriteLine("Searchable PDF created.")
    Console.WriteLine($"Pages processed: {result.Pages.Count}")
End Using
$vbLabelText   $csharpLabel

輸出可搜尋的 PDF 文件

OCR in C# CodeProject Tutorial:使用 IronOCR 從影像中萃取文字:影像 3 - 從輸入的影像建立可搜尋的 PDF

SaveAsSearchablePdf 會產生一個 PDF/A 相容的文件,其中每個辨識出的單字都放置在原始影像的精確像素座標處。 Adobe Acrobat、macOS 上的預覽程式和 Foxit Reader 都支援在產生這些檔案後立即進行全文搜尋。

對於基於 Web 的文件檢視器或下游 NLP 管道,請改用 result.SaveAsHocrFile("output.hocr")hOCR 格式是一種開放的 XML 標準,它將每個單字的邊界框與文字一起編碼,從而實現用戶端搜尋高亮顯示和單字級輔助功能註釋。

可從 OcrResult 取得其他輸出格式:

  • result.SaveAsHocrFile("output.hocr") -- 帶有位置資料的 hOCR XML
  • result.ToXDocument() -- 程式化處理的 LINQ 可查詢 XDocument
  • result.Pages[0].Text -- 流式管道每頁純文本

對於已與IronPDF配合使用的應用程序,您可以將 OcrResult 直接匯入 PDF 產生工作流程,從而在單一 .NET 進程中將 OCR 提取與 PDF 編輯結合。

如何解讀條碼和文字?

IronOCR 可讀取嵌入在與印刷文字相同影像中的條碼和二維碼,無需執行單獨的條碼庫。 透過一個配置屬性啟用該功能:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadImage("shipping-label.png");

OcrResult result = ocr.Read(input);

Console.WriteLine("Text:");
Console.WriteLine(result.Text);

Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"  {barcode.Format}: {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadImage("shipping-label.png");

OcrResult result = ocr.Read(input);

Console.WriteLine("Text:");
Console.WriteLine(result.Text);

Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"  {barcode.Format}: {barcode.Value}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

支援的條碼格式包括 Code 128、Code 39、EAN-13、EAN-8、UPC-A、UPC-E、PDF417、Data Matrix 和 QR 碼。 詳細資訊請參閱IronOCR 條碼讀取指南

這項功能在物流、醫療保健和零售應用中尤其有用,因為運輸標籤、病人腕帶和產品標籤都包含人可讀文字和機器可讀條碼。

如何將 IronOCR 與其他 .NET OCR 選項進行比較?

開發人員在評估 .NET 的 OCR 程式庫時,通常會考慮 IronOCR、Tesseract.NET 以及 Google Cloud Vision 或 Azure電腦視覺 等雲端服務。 下表總結了主要區別:

基於關鍵開發人員標準的 .NET OCR 選項比較
標準 IronOCR Tesseract.NET Azure電腦視覺
部署 本機部署或雲端部署,無需外部呼叫 本地部署 僅限雲端,需上網連接
安裝 單一 NuGet 套件 多個軟體包 + 原生二進位文件 SDK + Azure 訂閱
語言包 透過 NuGet 套件提供 125 多個套件 手動 tessdata 下載 由 Azure 管理
可搜尋的 PDF 輸出 內建一個方法調用 不包含 不包含
圖像預處理 12+ 內建過濾器 需要手動預處理 自動(伺服器端)
定價模式 一次永久許可 開源(Apache 2.0) 按通話次數計費

Tesseract是由 Google 維護的開源項目,它為 IronOCR 和 Tesseract.NET 提供底層技術支援。 IronOCR 增加了 .NET 慣用的打包方式、自動模型管理以及原始 Tesseract 綁定所缺乏的生產輸出功能(可搜尋的 PDF、hOCR 匯出)。 Azure 電腦視覺提供最先進的雲端精確度,但引入了網路延遲和每次呼叫成本,不適合高容量或離線工作流程。

對於資料隱私法規禁止將文件傳送到外部服務的情況(例如醫療記錄、法律文件、財務報表),像 IronOCR 這樣的本地庫是合適的選擇。

下一步計劃是什麼?

現在,您擁有了向任何 .NET 10 應用程式添加 OCR 的構建模組:透過 NuGet 安裝、基本圖像到文字提取、多頁 TIFF 處理、語言配置、錯誤處理、基於區域的讀取、條碼檢測和可搜尋的 PDF 生成。

如需深入了解,請瀏覽以下 IronOCR 資源:

IronOCR 文件主頁——完整的 API 參考和功能指南 影像濾鏡教學-所有預處理濾鏡的詳細指南 條碼讀取指南-二維碼和線性條碼及文本 -區域 OCR 使用指南-基於作物的表單和 ID 識別 -語言參考-- 超過 125 種支援語言的完整列表

有關許可問題或在生產環境中部署 IronOCR,請造訪IronOCR 許可頁面免費試用授權可在評估期間移除輸出浮水印, Iron Software 的支援團隊可解答任何程度的技術問題。

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

常見問題解答

什麼是OCR?它如何使C#開發人員受益?

OCR(光學字元辨識)技術可將掃描文件、PDF 或影像等檔案轉換為可編輯和可搜尋的資料。對於 C# 開發人員而言,OCR 簡化了文件處理流程,使應用程式能夠從圖像和掃描文件中提取文本,從而增強資料的可存取性和易用性。

如何在 C# 專案中實現 OCR?

在 C# 專案中實作 OCR 功能,需要安裝 IronOCR NuGet 套件,建立 IronTesseract 實例,將映像載入到 OcrInput 中,然後呼叫 Read 方法。傳回的 OcrResult 包含擷取的文字和逐字定位資料。

IronOCR支援哪些图像格式?

IronOCR 支援 PNG、JPEG、BMP、GIF、TIFF 和 WebP 影像格式。這使您可以直接處理大多數常見圖像類型,而無需在處理前轉換檔案。

IronOCR 可以處理多頁 TIFF 檔案嗎?

是的,IronOCR 可以處理多頁 TIFF 檔案。使用 LoadImageFrames 函數並傳入頁面索引數組來處理特定幀,然後遍歷 result.Pages 來存取每頁的文字。

是否可以使用 IronOCR 從圖像的特定區域提取文字?

是的,可以向 LoadImage 函數傳遞 CropRectangle 參數,將 OCR 識別範圍限制在指定區域內。這可以顯著縮短處理時間,對於從表單、發票和身分證件中提取特定欄位非常有用。

IronOCR是否支援不同語言的文字擷取?

IronOCR 支援超過 125 種語言,每種語言都以單獨的 NuGet 套件形式提供。在 IronTesseract 中設定 Language 屬性,然後呼叫 AddSecondaryLanguage 函數來新增雙語文件。

與原始的 Tesseract.NET 相比,IronOCR 有哪些優勢?

IronOCR 在 Tesseract 引擎的基礎上增加了 .NET 慣用的打包方式、自動語言模型管理、內建影像預處理過濾器、可搜尋的 PDF 輸出和 hOCR 匯出功能,所有這些都可以透過一個 NuGet 套件訪問,無需手動管理本地二進位檔案。

IronOCR是如何提高文字辨識準確率的?

IronOCR 提供預處理濾鏡——去斜、去雜訊、銳利化、二值化、縮放和旋轉——在 Tesseract 引擎處理影像之前糾正常見的掃描缺陷,從而提高低品質來源材料的識別準確率。

IronOCR 能讀取條形碼和 QR 碼嗎?

是的,將 ocr.Configuration.ReadBarCodes 設為 true 可以偵測相同影像中的條碼、二維碼以及文字。結果會以格式類型和解碼值的形式儲存在 OcrResult.Barcodes 中。

IronOCR在C#應用程式中的常見用例有哪些?

IronOCR 應用於文件管理系統、發票和收據資料提取、從掃描檔案產生可搜尋 PDF、表單欄位讀取、運輸標籤處理、醫療記錄數位化和輔助功能工具。

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

鋼鐵支援團隊

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