如何在 C# GitHub 專案中使用 IronOCR 實現 OCR
在GitHub上尋找OCR解決方案通常會產生分散的文件、複雜的Tesseract配置以及多年未更新的項目。 對於需要從圖像和PDF中可靠提取文字的C#開發者來說,導航儲存庫生態系統可能會耗費許多時間,而更好的方法是用於編碼。 許多開源的光學字元識別項目需要手動管理二進制文件、下載tessdata文件以及進行特定平台的故障排除。
本教程展示如何使用IronOCR在C#項目中實現OCR功能,這是一個託管庫,消除了使用原始Tesseract封裝常見的配置開銷。 無論是構建文件處理管道還是在現有應用程式中新增文字識別,本指南提供已準備就緒的工作程式碼範例,適用於任何OCR C# GitHub項目。
如何開始使用IronOCR?
IronOCR通過NuGet提供一個託管的.NET庫,這使得將其整合到任何GitHub儲存庫中變得簡單明瞭。 與需要手動管理二進制文件和tessdata配置的開源Tesseract OCR封裝不同,IronOCR在內部處理這些依賴項,並在Windows、Linux、和macOS上立即可用。
該庫在GitHub上維護官方範例儲存庫,開發者可以克隆或參考這些範例。 這些範例展示了實際應用,包括圖像到文字轉換、多語言支持和PDF處理。 貢獻者可以在克隆後立即測試功能,無需進行任何額外設置。
要在Visual Studio中入門,通過NuGet套件管理器安裝IronOCR:
Install-Package IronOcr

安裝後,此單一套件包含了所有進行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}%");
Imports IronOcr
' Initialize the OCR engine
Dim ocr As New IronTesseract()
' Load and process an image
Using input As New OcrInput("document-scan.png")
' Perform OCR and retrieve results
Dim result = ocr.Read(input)
' Output the extracted text to console
Console.WriteLine($"Extracted Text:{vbCrLf}{result.Text}")
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
IronTesseract類作為主要的OCR引擎,基於優化的Tesseract 5實現。 建立實例後,OcrInput物件可以從磁盤、URL或字節陣列中載入目標圖像。 Read方法處理輸入並返回OcrResult,其中包括提取的純文字和表示識別準確度的置信度百分比。 較高的置信度值(超過90%)通常表明來源文件清晰、格式良好。
OcrResult物件提供了對已識別內容的結構化存取。 除了純文字之外,開發者還可以存取單個單詞、行、段落和字元,以及其位置和置信度分數。 每個Word都包括邊界矩形的坐標,這對於需要精確文字定位資料的應用程式非常有價值,例如文件註解或表單字段提取。
輸入

輸出

IronOCR還支持從流和字節陣列中載入圖像,這在接收文件上傳的Web應用程式中特別有用。 這意味着OCR處理可以完全在記憶體中發生,而無需將臨時文件寫入磁盤,從而在高通量環境中減少輸入輸出開銷。

圖像預處理如何提高光學字元識別精度?
掃描文件通常會傾斜、噪音較多或解析度不佳。 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);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As 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
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput("invoice.png")
' Define crop region (x, y, width, height in pixels)
Dim cropArea As New CropRectangle(50, 100, 600, 300)
input.AddRegion(cropArea)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
在處理結構化文件(例如發票或表單)時,鎖定特定區域特別有價值,因為文字字段佔據已知的位置。 此方法可以將OCR處理時間降低40-70%,具體取決於圖像中有多少部分不相關。
是否可以同時提取條形碼和QR碼及文字?
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}");
}
Imports IronOcr
Dim ocr = New IronTesseract()
ocr.Configuration.ReadBarCodes = True ' Enable barcode detection
Using input As New OcrInput("shipping-label.png")
Dim result = ocr.Read(input)
' Access extracted text
Console.WriteLine($"Text: {result.Text}")
' Access any barcodes found in the image
For Each barcode In result.Barcodes
Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}")
Next
End Using
當Barcodes集合包含每個檢測到的條形碼的值和格式型別。 支持的格式包括QR碼、Code 128、EAN-13、UPC、Data Matrix和PDF417。這種雙重能力消除了處理包含人類可讀文字和機器可讀程式碼文件時需要單獨的條形碼掃描庫的需求。
輸入

輸出

對於倉庫和物流應用,將文字和條形碼提取結合成一次操作,減少了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");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput("scanned-contract.tiff")
Dim result = ocr.Read(input)
' Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf")
End Using
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);
Imports IronOcr
' Install-Package IronOcr.Languages.French
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.French
Using input As New OcrInput("french-document.png")
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
對於在同一頁上包含多語言的文件,IronOCR支持同時載入多個語言模型。 這對於不需要按語言預先排序文件的國際化應用很有用,因為它們處理來自多個地區的文件。 每個語言包都與核心庫一起維護,並支持相同的預處理和輸出功能。
在GitHub項目中有關OCR的最佳實踐是什麼?
在GitHub上維護OCR項目時,一些組織決策可以提高貢獻者的體驗並改善長期的項目健康。 無論您是構建小型實用腳本還是大型企業文件處理服務,這些實踐都適用。
使用Git LFS儲存大型測試圖像,以避免儲存庫大小膨脹。標準Git歷史中的二進制資產會增加克隆時間和儲存成本,尤其是當測試資料集包括高解析度掃描時。 將許可證密鑰儲存在環境變數或GitHub Secrets中,絕不要在提交的C#程式碼中; 請參考許可證密鑰配置指南以獲取設置說明。
在專用test-data文件夾中包含範例圖像,以便貢獻者可以驗證OCR功能而無需自行尋找文件。 在README文件中記錄支持的圖像格式和.NET版本要求,以減少入門問題。 在CI流水線中使用GitHub Actions構建和運行測試,以確認庫在目標環境中正常運行。
對於GitHub Actions工作流程,IronOCR在Windows和Linux執行器上的容器化環境中運行。 在針對Ubuntu或其他非Windows執行器時,請參考Linux部署指南以獲取配置詳細資訊。
您的下一步是什麼?
IronOCR通過一個NuGet分發的庫將可靠的文字識別帶給C#的GitHub項目,該庫處理Tesseract配置、預處理、條形碼檢測和多語言支持,而無需外部的二進制依賴項。 本指南中的程式碼範例涵蓋了核心使用案例:基本文字提取、圖像預處理、條形碼掃描、可搜尋PDF建立和多語言處理。
要探索完整的功能集,開始免費試用,無時間壓力或信用卡要求。 準備好投入生產部署時,查看許可選項,涵蓋個人開發者到企業團隊。
相關資源以擴展您的知識:

常見問題
什麼是IronOCR?
IronOCR是一個C#的.NET OCR程式庫,使用優化的Tesseract 5引擎從圖像和PDF中提取文字。它可以通過NuGet安裝,並內部處理二進位依賴,不需要手動tessdata配置。
如何在C#專案中安裝IronOCR?
在Visual Studio中的NuGet Package Manager控制台中運行`Install-Package IronOcr`,或使用NuGet包管理器UI搜索IronOcr。該包包含所有Windows、Linux和macOS所需的二進位文件。
IronOCR在GitHub Actions上是否適用於Linux?
是的,IronOCR支援GitHub Actions中的Linux執行器。請參考Linux部署指南 https://ironsoftware.com/csharp/ocr/how-to/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、流或位元組陣列中載入。



