如何在 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 與先進的預處理功能,可針對從高解析度掃描到壓縮網頁影像等不同的影像品質與格式,提供精確的結果。

快速入門:使用 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 安裝指南](/csharp/ocr/get-started/windows/)或探索[NuGet 套件選項](/csharp/ocr/get-started/advanced-installation-nuget/)。 如需跨平台開發,請查看 [Linux 設定](/csharp/ocr/get-started/linux/) 或 [macOS 安裝](/csharp/ocr/get-started/mac/)。 [{i:(@ 從版本 2025.6 開始: - 現在載入 TIFF 影像的效能穩定提升。 - 讀取 TIFF 影像顯示效能的提升取決於機器的 GPU。 有些使用者可能會體驗到高達兩倍的速度,有些使用者則可能會看到與先前版本相似的效能。 @@--括號關閉--@@ ```csharp /* :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}%"); ```
IronOCR 文本提取演示:在程式碼編輯器中將哈利波特頁面影像轉換為純文字
請造訪 [如何讀取多格/頁 GIF 和 TIFF](/csharp/ocr/how-to/input-tiff-gif/) 以閱讀 TIFF 和 GIF 影像。 關於多頁處理,請參閱 [多頁 TIFF 處理範例](/csharp/ocr/examples/csharp-tesseract-multipage-tiff/)。

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

何時應該使用不同的圖像格式? PNG 和 TIFF 格式因無損壓縮而提供最佳的 OCR 效果。 單頁文件使用 PNG,多頁掃描則使用 TIFF。 JPEG 適用於照片,但可能會產生壓縮假象。 BMP 提供未壓縮的品質,但檔案大小較大。 GIF 適合色彩有限的簡單圖形。 進一步瞭解 [特定格式最佳化](/csharp/ocr/features/相容性/)。

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

如何以位元組匯入影像? <!--說明:顯示逐步過程的截圖 --> `OcrImageInput` 類接受檔案路徑、位元組、`AnyBitmap`、Stream 或 Image 物件形式的影像。 `AnyBitmap` 是來自 [IronSoftware.Drawing.AnyBitmap](/open-source/csharp/drawing/examples/bitmap-to-stream/)的位圖物件。 這種靈活性可讓您與各種資料來源(包括資料庫、Web API 和雲端儲存)無縫整合。 這種靈活性有助於處理資料庫、Web 服務或記憶體串流的影像。 有關進階的串流處理,請參閱 [使用輸入串流的 OCR](/csharp/ocr/how-to/input-streams/)。 [System.Drawing整合指南](/csharp/ocr/how-to/input-system-drawing/)提供額外的範例,以達到傳統程式碼的相容性。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-images-import-byte.cs ```

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

為什麼記憶體管理對於影像位元組很重要? 大型影像會消耗大量記憶體,尤其是同時處理多個文件時。 使用"使用"語句可確保資源處理得宜。 對於批次處理,可考慮實施具有有限並發作業的佇列系統。 [多執行緒指南](/csharp/ocr/how-to/async/)展示了高效的記憶體管理技術。

不同輸入類型對效能有何影響? 檔案路徑可為本機檔案提供最快的效能,因為 IronOCR 會直接讀取資料。 位元組陣列需要將整個影像載入記憶體,但具有彈性。 Streams 透過增量讀取資料來平衡記憶體使用量與效能。 若要獲得大批量處理的最佳效能,請參閱我們的 [效能調整指南](/csharp/ocr/examples/tune-tesseract-for-speed-in-dotnet/)。

如何指定掃描區域? 在實體化 `OcrImageInput` 時傳入 `CropRectangle` 以指定要處理的影像區域。 限制掃描範圍可大幅提升效能。 以下範例僅讀出章節編號和標題。 當針對特定的文件區域時,此技術最多可縮短 90% 的處理時間。 如需複雜的佈局或多個區域,請參閱 [圖片的 OCR 區域](/csharp/ocr/how-to/ocr-region-of-an-image/)。 [內容區域指南](/csharp/ocr/troubleshooting/crop-regions-rectangles/)說明進階的區域選擇技巧。 ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs ```

為什麼指定區域可以改善效能? 僅處理相關的影像區域可減少 60-90% 的計算開銷。 OCR 引擎會分析輸入區域中的每個像素,因此較小的區域意味著較快的處理速度。 此方法還可消除目標文字區域以外的頁眉、頁腳或裝飾元素的潛在干擾,從而提高精確度。
OCR 掃描區域示範,在原始影像和除錯輸出中都有紅色矩形突出顯示第八章標題

何時應該使用多重掃描區域? 對於具有不同文字區域的文件,如表格、發票或多列版面,請使用多重區域。 每個區域分開處理,以維持邏輯的文字流程。 這種方法對於 [ 擷取表中資料](/csharp/ocr/how-to/read-table-in-document/)或從結構化文件中讀取特定欄位非常有效。

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

如何應用進階影像處理? IronOCR 提供全面的影像預處理功能,以提升 OCR 精確度。 在處理低品質影像、掃描文件或具有挑戰性的條件時,應用篩選條件。 [濾鏡精靈](/csharp/ocr/how-to/filter-wizard/)有助於為您的特定圖像確定最佳的濾鏡組合。 ```csharp 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); ``` 了解[影像最佳化篩選器](/csharp/ocr/examples/ocr-image-filters-for-net-tesseract/)和[修正低品質掃描](/csharp/ocr/examples/ocr-low-quality-scans-tesseract/)。 有關色彩校正的需求,請參閱 [影像色彩校正指南](/csharp/ocr/how-to/image-color-correction/)。

何時應該套用影像預處理濾鏡? 在處理掃描文件、文字照片或有品質問題的影像時,請套用篩選條件。 常見的情況包括修正歪斜的頁面、移除影印本的背景雜訊或強化褪色的文字。 [DPI 設定指南](/csharp/ocr/how-to/dpi-setting/)有助於優化解析度相關問題。

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

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

我該如何優化效能? 在處理多個影像或大批量時,請考慮這些最佳化: 1.**重複使用 `IronTesseract` 實例**:為多個作業建立一個實體 2.**指定掃描區域**:將 OCR 限制在相關的影像區域,以獲得 60-90% 的收益 3.**使用適當的圖像格式**:PNG 和 TIFF 可提供比 JPEG 更好的效果 4.**選擇性地應用預處理**:僅在必要時使用篩選器 5.**實施平行處理**:利用多核心 CPU 進行批次作業 有關高效能方案,請參閱[多執行緒指南](/csharp/ocr/examples/csharp-tesseract-multithreading-for-speed/)和[快速 OCR 配置](/csharp/ocr/examples/tune-tesseract-for-speed-in-dotnet/)。 [ 進度追蹤功能](/csharp/ocr/how-to/progress-tracking/) 有助於監控長時間執行的作業。

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

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

記憶體使用上有哪些注意事項? OCR 作業在 RAM 中通常需要 10-20 倍的影像檔案大小。 5MB 的影像在處理過程中可能會使用 50-100MB 的空間。 對於大型批次,請以有限的並發作業實現生產者-消費者模式。 [取消令牌範例](/csharp/ocr/examples/abort-token/)示範取消記憶體密集的操作。

接下來的步驟是什麼? 利用這些資源從更複雜的情境中提取文字: - [Read text from PDFs](/csharp/ocr/how-to/input-pdfs/) - 使用 OCR 處理 PDF 文件 - [ 從螢幕截圖擷取資料](/csharp/ocr/examples/read-screenshot/) - 擷取並讀取螢幕內容 - [ 處理掃描文件](/csharp/ocr/examples/read-scanned-document/) - 處理多頁掃描文件 - [Work with System.Drawing objects](/csharp/ocr/how-to/input-system-drawing/) - 與現有的 .NET 成像程式碼整合 - [閱讀多國語言](/csharp/ocr/how-to/ocr-multiple-languages/) - 擷取 125 種以上語言的文字 - [處理特定的文件類型](/csharp/ocr/tutorials/read-specific-document/) - 針對護照、發票等進行優化

常見問題解答

在 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,246,844 | 版本: 2025.12 剛發表