如何在C#中使用輸入圖像進行OCR處理

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

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

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

OCR(光學字元識別)技術從圖片中識別並擷取文字。 它通過從已掃描的頁面、照片或其他圖片文件中擷取文字內容來數位化印刷文件。 IronOCR運用Tesseract 5的先進機器學習算法,再結合專有圖片預處理,實現業界領先的準確性。

此程式庫支持bmp格式。 圖像濾鏡通過自動修正常見質量問題來提升閱讀能力。 IronOCR將Tesseract 5與先進的預處理相結合,以提供準確的結果,涵蓋從高解析度掃描到壓縮的網頁圖像的不同圖像品質和格式。

快速開始:使用IronOCR讀取圖片文件

使用一行程式碼從圖片中擷取文字。 此範例載入一張圖片並使用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-2.cs
/* :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文字擷取演示:Harry Potter頁面圖片在程式碼編輯器中轉換為純文字

請存取如何讀取多幀/頁GIF和TIFF,了解如何讀取TIFF和GIF圖片。 對於多頁面,請參閱多頁TIFF處理範例

為什麼置信度級別很重要?

置信度級別表示IronOCR對於擷取文字準確性的把握程度。 得分在85%以上通常表示結果可靠。 較低的得分可能需要進行圖像預處理或人工審核。 使用置信度分數自動標記文件進行人工驗證或觸發其它圖像優化濾鏡

我什麼時候應該使用不同的圖像格式?

PNG和TIFF格式因為無損壓縮而提供最佳的OCR結果。 對於單頁文件使用PNG,對於多頁掃描使用TIFF。 JPEG對於照片效果好,但可能會引入壓縮影像。 BMP提供無壓縮的質量,但文件大小較大。 GIF適合色彩有限的簡單圖形。 了解更多關於格式特定優化

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

常見的錯誤包括圖像解析度低(低於200 DPI),文字偏斜,對比度差或不受支持的語言。 IronOCR提供對許多問題的自動修正,但嚴重問題可能需要手動預處理。 請參閱我們的故障排除指南了解解決方案。

我如何將圖片匯入為位元組?

Image物件的圖片。 AnyBitmap是一個圖像物件,來自IronSoftware.Drawing.AnyBitmap。 此靈活性可與包括資料庫、網路API和雲端儲存等各種資料來源無縫整合。

這種靈活性在使用來自資料庫、網路服務或記憶流的圖像時有幫助。 針對高級流處理,請參閱OCR與輸入流System.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

我應該什麼時候使用位元組陣列而不是文件路徑?

當圖片來自資料庫、網路服務或加密來源時,位元組陣列效果最佳。 它們提供更好的安全性,因為文件不需要臨時磁碟儲存。 在雲端應用、微服務或處理敏感文件時使用位元組陣列。 文件路徑對於本地批次處理大型圖片集合更有效率。

:path=/static-assets/ocr/content-code-examples/how-to/input-images-4.cs
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

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

大型圖片消耗大量記憶體,特別是在同時處理多個文件時。 使用'using'語句確保正確的資源釋放。 對於批次處理,考慮實施具有有限并行操作的佇列系統。 多執行緒指南展示了有效的記憶體管理技術。

不同輸入型別的性能影響是什麼?

文件路徑對於本地文件提供最快的性能,因為IronOCR直接讀取資料。 位元組陣列需要將整個圖像載入到記憶體中,但提供靈活性。 流通過逐步讀取資料平衡了記憶體使用和性能。 對於大型批次的最佳性能,請參閱我們的性能調整指南

我如何指定掃描區域?

在實例化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準確性。 在處理低品質圖片、掃描文件或挑戰性條件時應用濾鏡。 濾鏡精靈有助於確定您特定圖片的最佳濾鏡組合。

:path=/static-assets/ocr/content-code-examples/how-to/input-images-6.cs
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.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.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-500毫秒。 重用實例消除了後續操作的這一負擔。 為網路應用建立單列實例,或者為批次處理建立共享實例以最大化效率。

我什麼時候應該使用並行處理?

並行處理受益於具有多個獨立圖片的場景。 同時處理不同的頁面或文件,但避免對同一圖片並行化操作。 現代CPU可以有效處理4-8個並發的OCR操作。 監控記憶體使用情況,因為每個操作需要100-500MB根據圖像大小而定。

記憶體使用的考量是什麼?

OCR操作通常需要圖片文件大小的10-20倍的RAM。 一個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的先進機器學習演算法和專有的圖像預處理。這種組合在不同圖像質量和格式中提供業界領先的準確性,從高解析度掃描到壓縮的網路圖像。

如何正確處理讀取圖像時的資源?

當建立OcrImageInput物件時使用'using'語句以確保正確處理資源。此模式自動管理記憶體和文件句柄:`using var ocrInput = new OcrImageInput("image.jpg");`

我可以只讀取圖像的特定區域而不是整個文件嗎?

是的,IronOCR允許您指定裁剪區域以定義圖像中的特定讀取區域。此功能有助於將OCR處理集中在圖像的相關部分,以提高性能和準確性。

圖像會自動應用什麼預處理?

IronOCR自動應用增強閱讀能力的圖像濾鏡,通過校正常見的質量問題。該程式庫會處理格式檢測和預處理,無需手動配置以滿足基本使用需求。

TIFF圖像處理方面有性能改善嗎?

從IronOCR版本2025.6開始,載入TIFF圖像能夠顯著提高性能。閱讀TIFF圖像的性能改善程度取決於機器的GPU,有些使用者的速度達到之前版本的兩倍。

使用IronOCR進行文件管理的好處是什麼?

使用IronOCR進行文件管理通過將掃描的文件轉換為可搜索和可編輯的文字來簡化工作流程,減少手動資料輸入的需求並提高文件的可存取性。

IronOCR如何提高資料精確性?

IronOCR通過其先進的識別算法和影像校正功能提高資料精確性,確保文字提取過程既可靠又精確。

IronOCR有免費試用版嗎?

有的,Iron Software提供IronOCR的免費試用版,允許使用者在做出購買決定前測試其功能和能力。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

由...審核
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提供內容支援。
準備開始了嗎?
Nuget 下載 6,136,090 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動?

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