跳過到頁腳內容
使用 IRONOCR

如何在 C# GitHub 專案中使用 IronOCR 實作 OCR

在GitHub上搜尋 OCR 解決方案通常會得到零散的文件、複雜的 Tesseract 配置以及多年未更新的專案。 對於需要從圖像和 PDF 中可靠提取文字的 C# 開發人員來說,瀏覽儲存庫生態系統可能會耗費數小時,而這些時間本可以更好地用於編碼。 許多開源光學字元辨識專案需要手動進行二進位管理、下載 tessdata 檔案以及針對特定平台的故障排除。

本教學課程示範如何使用IronOCR(一個託管庫)在 C# 專案中實現 OCR 功能,IronOCR 消除了原始 Tesseract 包裝器常見的配置開銷。 無論是建立文件處理管道還是為現有應用程式添加文字辨識功能,本指南都提供了適用於任何 OCR C# GitHub專案的工作程式碼範例。

如何開始使用IronOCR?

IronOCR提供了一個透過NuGet分發的託管.NET庫,因此可以輕鬆地將其整合到任何GitHub儲存庫中。 與需要手動管理二進位檔案和 tessdata 設定的開源 Tesseract OCR 封裝器不同, IronOCR在內部處理這些依賴項,並且可以在 Windows、Linux 和 macOS 上開箱即用。

該庫在GitHub上維護官方範例倉庫,開發者可以複製和參考這些倉庫。 這些範例展示了實際應用,包括圖像轉文字、支援多種語言和 PDF 處理。 貢獻者無需任何額外設置,即可在克隆後立即測試功能。

若要在 Visual Studio 中開始使用 IronOCR,請透過NuGet套件管理器安裝IronOCR :

Install-Package IronOcr
Install-Package IronOcr
SHELL

OCR C# GitHub:使用IronOCR實現文字辨識:映像 1 - 安裝

安裝完成後,這個軟體包包含了OCR操作所需的一切。 此程式庫支援.NET Framework 4.6.2+、. .NET Core和.NET 5 至 10,以實現跨專案類型的最大相容性。

如何在 C# 中從圖像格式中提取文字?

以下範例示範了使用 IronOCR 的 IronTesseract 類別進行基本文字擷取。 此OCR引擎可讀取多種影像格式,包括PNG、JPG、JPEG、BMP、GIF和TIFF:

using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load and process an image
using var input = new OcrInput("document-scan.png");

// Perform OCR and retrieve results
var result = ocr.Read(input);

// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load and process an image
using var input = new OcrInput("document-scan.png");

// Perform OCR and retrieve results
var result = ocr.Read(input);

// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
$vbLabelText   $csharpLabel

IronTesseract 類別作為主要的 OCR 引擎,基於優化的 Tesseract 5 實作建置。 建立實例後,OcrInput 物件會從磁碟、URL 或位元組陣列載入目標映像。 Read 方法處理輸入並傳回一個OcrResult,其中包含提取的純文字以及表示識別準確率的置信度百分比。 置信度值越高(高於 90%),通常表示來源文件乾淨、格式良好。

OcrResult 物件提供已識別內容的結構化存取。 除了純文字之外,開發人員還可以存取單字、行、段落和字符,以及它們的位置和置信度分數。 每個 Word 都包含邊界矩形座標,這使得它對於需要精確文字位置資料的應用程式(例如文件註釋或表單欄位提取)來說很有價值。

輸入

OCR C# GitHub:使用IronOCR實現文字辨識:圖 2 - 範例輸入

輸出

OCR C# GitHub:使用IronOCR實現文字辨識:圖片 3 - 控制台輸出

IronOCR還支援從串流和位元組數組載入映像,這對於接收檔案上傳的 Web 應用程式尤其有用。 這意味著 OCR 處理可以完全在記憶體中進行,而無需將臨時檔案寫入磁碟,從而減少高吞吐量環境下的輸入輸出開銷。

OCR C# GitHub:使用IronOCR實現文字辨識:圖 4 - 功能

影像預處理如何提高光學字元辨識的準確率?

掃描的檔案經常出現歪斜、雜訊過多或解析度不足等問題。 IronOCR內建了預處理過濾器,可以在 OCR 引擎處理影像之前修正這些問題:

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");

// Apply preprocessing filters to enhance scan quality
input.Deskew();                    // Straighten rotated images
input.DeNoise();                   // Remove digital artifacts
input.EnhanceResolution(225);      // Optimize DPI for OCR

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

var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");

// Apply preprocessing filters to enhance scan quality
input.Deskew();                    // Straighten rotated images
input.DeNoise();                   // Remove digital artifacts
input.EnhanceResolution(225);      // Optimize DPI for OCR

var result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Deskew 方法可自動偵測並修正高達 15 度的影像旋轉,處理頁面在掃描器上略微偏離中心的常見情況。 DeNoise 濾鏡可去除照片文件或舊掃描件中常見的斑點和偽影。 EnhanceResolution 將低 DPI 影像放大到 200-300 DPI 範圍,這是光學字元辨識精度的最佳範圍。

這些過濾器可以串聯起來,完全在記憶體中運行,無需臨時檔案。 在許多情況下,對存在嚴重品質問題(例如墨跡褪色、背景雜訊或相機畸變)的文件進行多次預處理可以顯著提高文字辨識結果。 對於解析度低於 150 DPI 的掃描文件或在光線不均勻條件下拍攝的照片,改進效果最為明顯。

感興趣區域裁剪如何提高性能?

對於只有部分影像包含相關文字的文檔,定義裁切區域既可以減少處理時間,又可以減少背景雜訊造成的潛在誤報:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();
using var input = new OcrInput("invoice.png");

// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);

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

var ocr = new IronTesseract();
using var input = new OcrInput("invoice.png");

// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);

var result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

在處理發票或表格等結構化文件時,針對特定區域進行定位尤其有價值,因為這些文件中的文字欄位佔據已知位置。 與全影像分析相比,這種方法可以減少 40-70% 的 OCR 處理時間,具體取決於影像中無關部分的比例。

能否同時擷取條碼、二維碼和文字?

IronOCR可以同時辨識同一文件中的文字並掃描條碼。 這種雙重功能對於處理發票、出貨標籤和庫存文件非常有用:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // Enable barcode detection

using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);

// Access extracted text
Console.WriteLine($"Text: {result.Text}");

// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // Enable barcode detection

using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);

// Access extracted text
Console.WriteLine($"Text: {result.Text}");

// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
$vbLabelText   $csharpLabel

ReadBarCodes 設定為 true 時,條碼檢測功能將被激活,且不會顯著影響處理時間。結果中的 Barcodes 集合包含每個偵測到的條碼的值和格式類型。 支援的格式包括二維碼、Code 128、EAN-13、UPC、Data Matrix 和 PDF417。這種雙重功能在處理包含人可讀文字和機器可讀程式碼的文件時,無需單獨的條碼掃描庫。

輸入

OCR C# GitHub:使用IronOCR實現文字辨識:圖片 5 - 條碼範例圖片

輸出

OCR C# GitHub:使用IronOCR實現文字辨識:圖片 6 - 控制台條碼文字輸出

對於倉庫和物流應用而言,將文字和條碼提取合併到一次處理中,可以減少 API 呼叫次數,簡化應用程式架構。 一次 Read 操作即可返回文件中所有可識別的數據,無論該數據是列印文字、手寫文字還是機器可讀程式碼。 OcrResult.Barcodes 屬性公開了一個類型化的集合,因此下游程式碼可以迭代結果而無需特定於格式的解析邏輯。

如何從掃描影像產生可搜尋的PDF?

將掃描文件轉換為可搜尋的 PDF ,可以在文件管理系統中進行文字選擇、複製和全文搜尋。 此功能支援多種影像格式作為輸入:

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);

// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);

// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
$vbLabelText   $csharpLabel

SaveAsSearchablePdf 方法嵌入與識別內容相符的不可見文字圖層,在保持原始文件外觀的同時,實現文字操作。 這樣就能產生適用於檔案管理和企業文件管理系統的文件。 IronOCR也支援將結果匯出為HTML或 JSON 格式,以便與下游系統整合。

對於多頁文檔, IronOCR會逐頁處理,並將結果合併成一個文件。它還能自動處理包含多個訊框的 TIFF 文件,從而簡化掃描文件的批次轉換流程。 產生的 PDF 檔案保留了原始掃描件的視覺佈局,同時嵌入的文字圖層使得每一頁都可以在任何 PDF 檢視器或文件管理平台中進行全文搜尋。

如何在多語言應用程式中使用IronOCR ?

IronOCR支援125 多種語言,包括英語、西班牙語、法語、德語、中文、日語、阿拉伯語等。 語言包透過NuGet作為單獨的程式包進行安裝,從而保持核心庫的輕量級:

using IronOcr;

// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;

using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;

using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

對於同一頁面上包含多種語言的文檔, IronOCR支援同時載入多種語言模型。 這對於處理來自多個地區的文件而無需預先按語言對文件進行分類的國際化應用程式來說非常重要。 每個語言包都與核心庫一起維護,並支援相同的預處理和輸出功能。

GitHub專案中 OCR 的最佳實踐是什麼?

在GitHub上維護 OCR 專案時,一些組織決策可以改善貢獻者的體驗和專案的長期健康。 無論您是建立小型實用程式腳本還是大型企業文件處理服務,這些做法都適用。

對於大型測試鏡像,請使用Git LFS避免增加倉庫體積。標準 Git 歷史記錄中的二進位資源會增加複製時間和儲存成本,尤其是在測試資料集包含高解析度掃描時。 許可證金鑰應儲存在環境變數或GitHub Secrets 中,切勿儲存在已提交的 C# 程式碼中; 請參閱許可證密鑰配置指南以取得設定說明。

在專用的 test-data 資料夾中包含範例影像,以便貢獻者無需查找自己的文件即可驗證 OCR 功能。 在 README 檔案中記錄支援的影像格式和.NET版本要求,以減少新使用者上手時遇到的問題。 使用GitHub Actions在 CI 管線中建置和執行測試,以確認函式庫在目標環境中的功能是否正確。

對於GitHub Actions 工作流程, IronOCR在 Windows 和 Linux 運行器的容器化環境中運作。 當目標平台為 Ubuntu 或其他非 Windows 系統時,有關設定詳情,請參閱Linux 部署指南

下一步計劃是什麼?

IronOCR透過 NuGet 分發的庫為 C# GitHub專案帶來可靠的文字識別功能,該程式庫可處理 Tesseract 配置、預處理、條碼檢測和多語言支援,而無需外部二進位依賴項。 本指南中的程式碼範例涵蓋了核心用例:基本文字擷取、影像預處理、條碼掃描、可搜尋 PDF 建立和多語言處理。

要體驗全部功能,即可開始免費試用,無需時間限製或信用卡。 準備進行生產部署時,請查看涵蓋從個人開發人員到企業團隊的授權選項

相關資源,助您拓展知識:

OCR C# GitHub:使用IronOCR實現文字辨識:圖片 7 - 授權

常見問題解答

什麼是 IronOCR?

IronOCR是一個C#的.NET OCR庫,通過優化的Tesseract 5引擎從圖像和PDF中提取文字。它通過NuGet安裝,內部處理二進制依賴項,無需手動配置tessdata。

如何在 C# 項目中安裝 IronOCR?

在Visual Studio的NuGet包管理控制台中運行`Install-Package IronOcr`,或使用NuGet包管理UI搜索IronOcr。該包包括Windows、Linux和macOS所需的所有二進制文件。

IronOCR能在GitHub Actions上工作的Linux環境中使用嗎?

可以,IronOCR支持GitHub Actions中的Linux運行器。請參閱https://ironsoftware.com/csharp/ocr/how-to/linux/上的Linux部署指南,以獲得在Ubuntu及其他發行版上所需的包依賴項。

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

是的。在調用Read()之前設置ocr.Configuration.ReadBarCodes = true。OcrResult.Barcodes集合包含每個檢測到的碼的值和格式類型,支持QR碼、Code 128、EAN-13、UPC、Data Matrix和PDF417。

如何從掃描圖像生成可搜尋的PDF?

在調用ocr.Read(input)後,使用result.SaveAsSearchablePdf("output.pdf")創建一個PDF,其原始掃描圖像上面有一個隱藏的文字層。輸出適合歸檔和企業文件管理系統使用。

IronOCR支持英語之外的其他語言嗎?

支持。IronOCR通過專用的NuGet語言包支持125+種語言。安裝語言包(例如,Install-Package IronOcr.Languages.French),然後在處理之前設置ocr.Language = OcrLanguage.French。

我應如何在GitHub儲存庫中存儲IronOCR授權金鑰?

在GitHub Secrets中存儲授權金鑰,並將其作為環境變量注入到您的GitHub Actions工作流中。切勿直接在C#代碼或appsettings文件中提交授權金鑰字符串。

IronOCR 支持哪些圖像格式?

IronOCR支持PNG、JPG、JPEG、BMP、GIF、TIFF(包括多頁)、PDF及其他常見格式。圖像可以從文件路徑、URL、流或字節數組中加載。

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

鋼鐵支援團隊

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