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

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

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

IronOCR 使用光學字元辨識技術從JPGPNGGIFTIFFBMP格式的影像中擷取文字。 安裝 NuGet 套件後,只需一行程式碼即可實現基本的文字提取。

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

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

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

用一行程式碼從圖像中提取文字。 本範例載入圖像並使用IronTesseractRead方法讀取其文字。 此庫可自動處理影像預處理和文字擷取。

Nuget Icon立即開始使用 NuGet 建立 PDF 檔案:

  1. 使用 NuGet 套件管理器安裝 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 安裝

[{i:(
從版本 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 物件形式傳入的影像。 AnyBitmapIronSoftware.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

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

大型影像會消耗大量內存,尤其是在同時處理多個文件時。 使用"using"語句可以確保正確釋放資源。 對於批次處理,可以考慮實現並發操作有限的佇列系統。 此多線程指南演示了高效的記憶體管理技術。

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

檔案路徑為本機檔案提供了最快的效能,因為 IronOCR 可以直接讀取資料。 位元組數組需要將整個圖像載入到記憶體中,但提供了靈活性。 串流傳輸透過增量讀取資料來平衡記憶體使用和效能。 為了獲得大批量處理的最佳效能,請參閱我們的效能調優指南

如何指定掃描區域?

實例化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 毫秒。 重複使用實例可以消除後續操作的這種開銷。 為了最大限度地提高效率,對於 Web 應用程序,應建立單例實例;對於批次處理,應建立共用實例。

何時應該使用並行處理?

並行處理有利於處理多個獨立影像的場景。 同時處理不同的頁面或文檔,但避免對相同影像進行並行操作。 現代CPU可以有效處理4-8個並發的OCR操作。 監控記憶體使用情況,因為每次操作需要 100-500MB 的內存,具體取決於圖像大小。

記憶體使用方面需要考慮哪些因素?

OCR 操作通常需要在 RAM 中佔用映像檔大小的 10-20 倍。 一張 5MB 的圖片在處理過程中可能會佔用 50-100MB 的記憶體。 對於大批量處理,採用生產者-消費者模式,並限制並發操作數。 中止令牌範例示範如何取消記憶體密集型操作。

下一步是什麼?

利用以下資源從更複雜的場景中提取文字:

-讀取 PDF 文件中的文字– 使用 OCR 處理 PDF 文檔
-從螢幕截圖中提取資料– 擷取並讀取螢幕內容
-處理掃描文件– 處理多頁掃描文件
-使用 System.Drawing 物件– 與現有的 .NET 影像處理程式碼集成
-閱讀多種語言– 提取 125 多種語言的文本
-處理特定類型的文件-針對護照、發票等進行最佳化

常見問題解答

在 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擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。

經審核
傑夫·弗里茨
傑弗裡·T·弗里茨
.NET 社群團隊首席專案經理
Jeff 同時也是 .NET 和 Visual Studio 團隊的首席專案經理。他是 .NET Conf 虛擬會議系列的執行製片人,並主持每週兩次的開發者直播節目“Fritz and Friends”,在節目中他會與觀眾一起探討技術並編寫程式碼。 Jeff 也為包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit 在內的微軟大型開發者活動撰寫研討會、簡報並策劃內容。
準備好開始了嗎?
Nuget 下載 5,299,091 | 版本: 2025.12 剛剛發布