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
安裝完成後,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"
有關定價和啟用詳情,請參閱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
光學字元識別輸出
。
IronTesseract 為 Tesseract 5 引擎封裝了 .NET 友善的預設設定和自動模型管理。 OcrInput.LoadImage 接受 PNG、JPEG、BMP、GIF、TIFF 和 WebP 文件,因此您很少需要在將圖像傳遞給引擎之前轉換格式。
OcrResult.Text 屬性傳回一個由換行符號連接的所有可識別字元組成的純字串。 如需更豐富的存取資訊(例如單字邊界框、置信度分數、每段文字),請瀏覽 result.Pages、result.Paragraphs、result.Words 和 @@--CODE-108615--@ 集合。
值得了解的關鍵特性:
result.Pages[0].Text-- 單頁文本result.Words[n].Text和result.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
OCR 從多頁 TIFF 檔案輸出
。
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
然後配置引擎,對於雙語文檔,添加第二種語言:
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
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
以下幾個設定有助於提高準確率:
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
將辨識範圍限制在裁切矩形區域內,可減少大影像處理時間高達 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
輸出可搜尋的 PDF 文件

SaveAsSearchablePdf 會產生一個 PDF/A 相容的文件,其中每個辨識出的單字都放置在原始影像的精確像素座標處。 Adobe Acrobat、macOS 上的預覽程式和 Foxit Reader 都支援在產生這些檔案後立即進行全文搜尋。
對於基於 Web 的文件檢視器或下游 NLP 管道,請改用 result.SaveAsHocrFile("output.hocr")。 hOCR 格式是一種開放的 XML 標準,它將每個單字的邊界框與文字一起編碼,從而實現用戶端搜尋高亮顯示和單字級輔助功能註釋。
可從 OcrResult 取得其他輸出格式:
result.SaveAsHocrFile("output.hocr")-- 帶有位置資料的 hOCR XMLresult.ToXDocument()-- 程式化處理的 LINQ 可查詢 XDocumentresult.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
支援的條碼格式包括 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電腦視覺 等雲端服務。 下表總結了主要區別:
| 標準 | 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 種支援語言的完整列表
- API 參考——所有類別、方法和屬性
有關許可問題或在生產環境中部署 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、表單欄位讀取、運輸標籤處理、醫療記錄數位化和輔助功能工具。

