如何在 C# 中使用影像進行 OCR 處理

如何使用 IronOCR 在 C# 中讀取圖像

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR 運用光學字元辨識技術,從 TIFFBMP 格式的圖像中擷取文字。 安裝 NuGet 套件後,基本的文字擷取只需要一行程式碼。

OCR(光學字元辨識)技術可從影像中辨識並擷取文字。 它透過從掃描的頁面、照片或其他影像檔案中擷取文字內容,將印刷文件數位化。 IronOCR 使用Tesseract 5的先進機器學習演算法,並結合專有的影像預處理技術,實現了業界領先的準確度。

此函式庫支援 tiffbmp 格式。 圖片濾鏡可透過自動修正常見的品質問題來增強閱讀能力。 IronOCR 將Tesseract 5與先進的預處理技術相結合,可對不同影像品質和格式(從高解析度掃描到壓縮的 Web 影像)提供準確的結果。

快速入門:使用 IronOCR 讀取圖像檔案

用一行代碼從圖像中萃取文字。 此範例載入一張圖片,並使用 Read 上的 IronTesseract 方法讀取其文字。 該函式庫可自動處理影像預處理和文字擷取。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 複製並運行這段程式碼。

    var result = new IronTesseract().Read(new OcrImageInput("Potter.png"));
  3. 部署到您的生產環境進行測試

    今天就在您的專案中開始使用免費試用IronOCR

    arrow pointer


如何使用 IronOCR 閱讀影像?

請先建立 IronTesseract 類別的實例。 請使用 'using' 語句,根據圖片檔案路徑建立 OcrImageInput 物件。 這可確保妥善的資源處理。 IronOCR 支援 jpg、png、gif、tiff 和 bmp 格式。 使用 Read 方法執行 OCR。 圖庫會自動偵測影像格式,並應用適當的預處理。

新使用者請參閱Windows 安裝指南或探索NuGet 套件選項。 如需跨平台開發,請查看 Linux 設定macOS 安裝

請注意 從版本 2025.6 開始:

  • 現在載入 TIFF 影像的效能穩定提升。
  • 讀取 TIFF 影像顯示效能的提升取決於機器的 GPU。 有些使用者可能會體驗到高達兩倍的速度,有些使用者則可能會看到與先前版本相似的效能。
/* :path=/static-assets/ocr/content-code-examples/how-to/input-images-read.cs */
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add image
using var imageInput = new OcrImageInput("Potter.png");

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Display the extracted text
Console.WriteLine(ocrResult.Text);

// Get confidence level
double confidence = ocrResult.Confidence;
Console.WriteLine($"Confidence: {confidence}%");
/* :path=/static-assets/ocr/content-code-examples/how-to/input-images-read.cs */
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add image
using var imageInput = new OcrImageInput("Potter.png");

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Display the extracted text
Console.WriteLine(ocrResult.Text);

// Get confidence level
double confidence = ocrResult.Confidence;
Console.WriteLine($"Confidence: {confidence}%");
$vbLabelText   $csharpLabel
IronOCR 文本提取演示:在程式碼編輯器中將哈利波特頁面影像轉換為純文字

請造訪 如何讀取多格/頁 GIF 和 TIFF 以閱讀 TIFF 和 GIF 影像。 關於多頁處理,請參閱 多頁 TIFF 處理範例

為什麼置信度很重要?

置信度表示 IronOCR 對於擷取文字精確度的肯定程度。 85% 以上的值通常表示結果可靠。 分數較低者可能需要影像預處理或手動審查。 使用置信度分數來自動標示需要人工驗證的文件,或觸發額外的 影像最佳化篩選器

何時應該使用不同的圖像格式?

PNG 和 TIFF 格式因無損壓縮而提供最佳的 OCR 效果。 單頁文件使用 PNG,多頁掃描則使用 TIFF。 JPEG 適用於照片,但可能會產生壓縮假象。 BMP 提供未壓縮的品質,但檔案大小較大。 GIF 適合色彩有限的簡單圖形。 進一步了解針對特定格式的優化

常見的圖像讀取錯誤有哪些?

常見的錯誤包括影像解析度低(低於 200 DPI)、文字歪斜、對比度差或不支援的語言。 IronOCR 提供許多問題的自動修正功能,但嚴重的問題可能需要手動預先處理。 請參閱我們的 疑難排解指南,以瞭解解決方案。

如何以位元組匯入影像?

OcrImageInput 類別接受以檔案路徑、位元組、AnyBitmap、Stream 或 Image 物件形式傳入的影像。 AnyBitmap 是來自 IronSoftware.Drawing.AnyBitmap 的位圖物件。 這種靈活性可讓您與各種資料來源(包括資料庫、Web API 和雲端儲存)無縫整合。

這種靈活性有助於處理資料庫、Web 服務或記憶體串流的影像。 有關進階的串流處理,請參閱 使用輸入串流的 OCRSystem.Drawing整合指南提供額外的範例,以達到傳統程式碼的相容性。

:path=/static-assets/ocr/content-code-examples/how-to/input-images-import-byte.cs
using IronOcr;
using System.IO;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read byte from file
byte[] data = File.ReadAllBytes("Potter.tiff");

// Import image byte
using var imageInput = new OcrImageInput(data);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

何時應該使用位元組陣列而非檔案路徑?

當影像來自資料庫、Web 服務或加密來源時,位元組陣列的效果最佳。 它們提供更好的安全性,因為檔案不需要暫存磁碟。 在雲端應用程式、微服務或處理敏感文件時使用位元組陣列。 檔案路徑在本機批次處理大型影像集時仍能保持較高的效率。

using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Method 1: From URL
var imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg");
using var urlInput = new OcrImageInput(imageFromUrl);

// Method 2: From Stream
using var fileStream = File.OpenRead("document.png");
using var streamInput = new OcrImageInput(fileStream);

// Method 3: From System.Drawing (with IronSoftware.Drawing)
var bitmap = AnyBitmap.FromFile("scan.bmp");
using var bitmapInput = new OcrImageInput(bitmap);

// Process any of these inputs
IronTesseract ocr = new IronTesseract();
OcrResult result = ocr.Read(bitmapInput);
using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Method 1: From URL
var imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg");
using var urlInput = new OcrImageInput(imageFromUrl);

// Method 2: From Stream
using var fileStream = File.OpenRead("document.png");
using var streamInput = new OcrImageInput(fileStream);

// Method 3: From System.Drawing (with IronSoftware.Drawing)
var bitmap = AnyBitmap.FromFile("scan.bmp");
using var bitmapInput = new OcrImageInput(bitmap);

// Process any of these inputs
IronTesseract ocr = new IronTesseract();
OcrResult result = ocr.Read(bitmapInput);
$vbLabelText   $csharpLabel

為什麼記憶體管理對於影像位元組很重要?

大型影像會消耗大量記憶體,尤其是同時處理多個文件時。 使用"使用"語句可確保資源處理得宜。 對於批次處理,可考慮實施具有有限並發作業的佇列系統。 多執行緒指南展示了高效的記憶體管理技術。

不同輸入類型對效能有何影響?

檔案路徑可為本機檔案提供最快的效能,因為 IronOCR 會直接讀取資料。 位元組陣列需要將整個影像載入記憶體,但具有彈性。 Streams 透過增量讀取資料來平衡記憶體使用量與效能。 若要獲得大批量處理的最佳效能,請參閱我們的 效能調整指南

如何指定掃描區域?

在實例化 OcrImageInput 時傳入 CropRectangle,以指定要處理的影像區域。 限制掃描範圍可大幅提升效能。 以下範例僅讀出章節編號和標題。 當針對特定的文件區域時,此技術最多可縮短 90% 的處理時間。

如需複雜的佈局或多個區域,請參閱 圖片的 OCR 區域內容區域指南說明進階的區域選擇技巧。

:path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput("Potter.tiff", ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
$vbLabelText   $csharpLabel

為什麼指定區域可以改善效能?

僅處理相關的影像區域可減少 60-90% 的計算開銷。 OCR 引擎會分析輸入區域中的每個像素,因此較小的區域意味著較快的處理速度。 此方法還可消除目標文字區域以外的頁眉、頁腳或裝飾元素的潛在干擾,從而提高精確度。

OCR 掃描區域示範,在原始影像和除錯輸出中都以紅色矩形突出顯示第八章標題

何時應該使用多重掃描區域?

對於具有不同文字區域的文件,如表格、發票或多列版面,請使用多重區域。 每個區域分開處理,以維持邏輯的文字流程。 這種方法對於 擷取表中資料或從結構化文件中讀取特定欄位非常有效。

坐標系的慣例是什麼?

IronOCR 使用標準像素座標,原點 (0,0) 位於左上角。 X 向右增加,Y 向下增加。 矩形參數為 (X、Y、寬度、高度)。 若要精確選擇區域,請使用影像編輯工具來識別像素座標,或在應用程式中實作可視化的區域選擇器。

如何應用進階影像處理?

IronOCR 提供全面的影像預處理功能,以提升 OCR 精確度。 在處理低品質影像、掃描文件或具有挑戰性的條件時,應用篩選條件。 濾鏡精靈有助於為您的特定圖像確定最佳的濾鏡組合。

using IronOcr;

IronTesseract ocr = new IronTesseract();

using var input = new OcrImageInput("low-quality-scan.jpg");

// Apply image enhancement filters
input.Deskew();  // Correct image rotation
input.DeNoise(); // Remove background noise
input.Binarize(); // Convert to black and white
input.EnhanceResolution(300); // Adjust DPI for better accuracy

// Configure for better accuracy
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
ocr.Configuration.Language = OcrLanguage.English;

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

IronTesseract ocr = new IronTesseract();

using var input = new OcrImageInput("low-quality-scan.jpg");

// Apply image enhancement filters
input.Deskew();  // Correct image rotation
input.DeNoise(); // Remove background noise
input.Binarize(); // Convert to black and white
input.EnhanceResolution(300); // Adjust DPI for better accuracy

// Configure for better accuracy
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
ocr.Configuration.Language = OcrLanguage.English;

OcrResult result = ocr.Read(input);
$vbLabelText   $csharpLabel

了解影像最佳化篩選器修正低品質掃描。 有關色彩校正的需求,請參閱 影像色彩校正指南

何時應該套用影像預處理濾鏡?

在處理掃描文件、文字照片或有品質問題的影像時,請套用篩選條件。 常見的情況包括修正歪斜的頁面、移除影印本的背景雜訊或強化褪色的文字。 DPI 設定指南有助於優化解析度相關問題。

為什麼篩選順序很重要?

篩選順序對結果有顯著的影響。 請先進行旋轉校正 (Deskew),接著執行雜訊去除,最後進行對比度增強。 二值化通常應該放在最後。不正確的排序可能會擴大問題 - 例如,在去噪之前進行銳化會增加雜訊的能見度。 測試不同的順序以獲得最佳效果。

哪些是常見的預處理錯誤?

過度加工是最常見的錯誤。 過度的銳化會造成假象,強烈的去噪會移除精細的文字細節,而不當的二值化臨界值會遺失資訊。 從最少的預處理開始,僅在需要時加入篩選條件。 影像品質修正指南提供詳細的最佳實務。

我該如何優化效能?

在處理多個影像或大批量時,請考慮這些最佳化:

  1. 重複使用 IronTesseract 實例:建立一個實例以執行多項操作
    2.指定掃描區域:將 OCR 限制在相關的影像區域,以獲得 60-90% 的收益 3.使用適當的圖像格式:PNG 和 TIFF 可提供比 JPEG 更好的效果 4.選擇性地應用預處理:僅在必要時使用篩選器 5.實施平行處理:利用多核心 CPU 進行批次作業

有關高效能方案,請參閱多執行緒指南快速 OCR 配置 進度追蹤功能 有助於監控長時間執行的作業。

為什麼實例重複使用可以改善效能?

IronTesseract 初始化過程會載入語言資料並設定 OCR 引擎,耗時 200-500 毫秒。 重複使用實例可消除後續作業的這項開銷。 為網路應用程式建立單一實體,或為批次處理建立共用實體,以達到效率最大化。

何時應該使用平行處理?

並行處理有利於具有多個獨立影像的場景。 同時處理不同的頁面或文件,但避免在同一影像上進行平行作業。 現代的 CPU 可有效處理 4-8 個並發的 OCR 作業。 監控記憶體使用量,因為每個作業都需要 100-500 MB,視影像大小而定。

記憶體使用上有哪些注意事項?

OCR 作業在 RAM 中通常需要 10-20 倍的影像檔案大小。 5MB 的影像在處理過程中可能會使用 50-100MB 的空間。 對於大型批次,請以有限的並發作業實現生產者-消費者模式。 取消令牌範例示範取消記憶體密集的操作。

接下來的步驟是什麼?

利用這些資源從更複雜的情境中提取文字:

常見問題解答

在 C# 中可以讀取哪些影像格式來進行文字擷取?

IronOCR 支援從 JPG、PNG、GIF、TIFF 和 BMP 影像格式讀取文字。該函式庫會自動偵測影像格式,並應用適當的預處理,以獲得最佳的文字擷取結果。

如何在一行代碼中從圖像檔中提取文字?

您可以使用 IronOCR 單行提取文字:`var result = new IronTesseract().Read(new OcrImageInput("image.png"));`.這會使用 Tesseract 5 OCR 技術自動處理影像預處理和文字擷取。

讀取影像時使用何種 OCR 技術?

IronOCR 結合了 Tesseract 5 先進的機器學習演算法與專屬的影像預處理。從高解析度掃描到壓縮網頁影像,IronOCR 結合了 Tesseract 5 先進的機器學習演算法與專屬的影像預處理,在不同的影像品質與格式下,都能提供領先業界的精確度。

閱讀圖片時,如何正確處理資源?

在建立 OcrImageInput 物件時,請使用「using」語句,以確保適當的資源處理。此模式會自動管理記憶體和檔案句柄:`using var ocrInput = new OcrImageInput("image.jpg");`

我可以讀取影像的特定區域而非整個檔案嗎?

是的,IronOCR 允許您指定裁剪區域,以定義圖像中的特定閱讀區域。此功能有助於將 OCR 處理集中在影像的相關部分,以獲得更佳的效能與準確性。

圖像會自動進行哪些預處理?

IronOCR 可自動套用影像濾鏡,透過修正常見的品質問題來增強閱讀能力。該函式庫可處理格式偵測與預處理,基本用例無需手動設定。

TIFF 影像處理的效能是否有提升?

從 IronOCR 版本 2025.6 開始,載入 TIFF 影像的效能持續加快。讀取 TIFF 影像的效能改善取決於電腦的 GPU,有些使用者的讀取速度可達先前版本的兩倍。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

審核人
Jeff Fritz
Jeffrey T. Fritz
首席程序经理 - .NET 社群团队
Jeff 也是 .NET 和 Visual Studio 团队的首席程序经理。他是 .NET Conf 虚拟会议系列的执行制作人,并主持“Fritz 和朋友”这一每周两次的開發者的直播节目,在节目上讨论技術并与观众一起编写代碼。Jeff 撰写研讨会、主持演讲,并计划大型 Microsoft 開發者活動(包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit)的內容。
準備好開始了嗎?
Nuget 下載 5,556,263 | 版本: 2026.3 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖片變成可搜尋的文字。