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

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

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

IronOCR 使用光學字元識別技術從 JPG, PNG, GIF, TIFF, 和 BMP 格式的圖像中擷取文字。 安裝 NuGet 套件後,基本的文字擷取只需要一行程式碼。

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

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

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

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

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 安裝

請注意@ 從版本 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}%");
Imports IronOcr

' Instantiate IronTesseract
Dim ocrTesseract As New IronTesseract()

' Add image
Using imageInput As New OcrImageInput("Potter.png")
    ' Perform OCR
    Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

    ' Display the extracted text
    Console.WriteLine(ocrResult.Text)

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

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

為什麼置信度很重要?

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

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

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

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

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

如何以位元組匯入影像?

<! -- 螢幕截圖示範我如何以 bytes 匯入影像? 在 IronPDF --> <!--說明:顯示逐步過程的截圖 -->

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);
Imports IronOcr
Imports System.IO

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read byte from file
Private data() As Byte = File.ReadAllBytes("Potter.tiff")

' Import image byte
Private imageInput = New OcrImageInput(data)
' Perform OCR
Private ocrResult As 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);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.IO

' Method 1: From URL
Dim imageFromUrl = AnyBitmap.FromUri("https://example.com/document.jpg")
Using urlInput As New OcrImageInput(imageFromUrl)

    ' Method 2: From Stream
    Using fileStream As FileStream = File.OpenRead("document.png")
        Using streamInput As New OcrImageInput(fileStream)

            ' Method 3: From System.Drawing (with IronSoftware.Drawing)
            Dim bitmap = AnyBitmap.FromFile("scan.bmp")
            Using bitmapInput As New OcrImageInput(bitmap)

                ' Process any of these inputs
                Dim ocr As New IronTesseract()
                Dim result As OcrResult = ocr.Read(bitmapInput)

            End Using
        End Using
    End Using
End Using
$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);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)

' Add image
Private imageInput = New OcrImageInput("Potter.tiff", ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As 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);
Imports IronOcr

Dim ocr As New IronTesseract()

Using input As 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

    Dim result As OcrResult = ocr.Read(input)
End Using
$vbLabelText   $csharpLabel

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

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

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

為什麼篩選順序很重要?

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

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

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

我該如何優化效能?

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

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

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

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

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

何時應該使用平行處理?

並行處理有利於具有多個獨立影像的場景。 同時處理不同的頁面或文件,但避免在同一影像上進行平行作業。 現代的 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 bots,將他對技術的熱愛與創意結合。

審核人
Jeff Fritz
Jeffrey T. Fritz
首席計畫經理 - .NET 社群團隊
Jeff 也是 .NET 和 Visual Studio 團隊的首席計畫經理。他是 .NET Conf 虛擬會議系列的執行製作人,並主持「Fritz and Friends」開發人直播串流,每週播出兩次,與觀眾一起討論技術和編寫程式碼。Jeff 為 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit 等大型 Microsoft 開發人員活動撰寫工作坊、簡報和規劃內容。
準備好開始了嗎?
Nuget 下載 5,384,824 | 版本: 2026.2 剛剛發布