如何使用 IronOCR 在 C# 中擷取讀取結果

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

IronOCR 的 Read 方法會傳回一個 OcrResult 物件,其中包含已擷取的文字,以及詳細的元資料,包括精確座標、尺寸、文字方向,以及每個偵測到的元素的層級結構(段落、行、字、字元)。

OCR 結果包含關於偵測到的段落、行、單字及個別字元的完整資訊。

針對每個元素,它提供文字內容、精確的 X 和 Y 座標、尺寸(寬度和高度)、文字方向(由左至右或由上至下),以及在 CropRectangle 物件中的位置。

快速入門:從第一個偵測到的單字擷取 WORD 文字

using IronTesseractRead 方法對圖片進行 OCR 識別,並透過 WORDs 集合提取第一個 WORD 的文字。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 請複製並執行此程式碼片段。

    string wordText = new IronTesseract().Read("file.jpg").WORDs[0].Text;
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronOCR

    arrow pointer

我可以從 OCR 結果中提取哪些資料?

結果值不僅包含擷取的文字,還包含 IronOCR 在 PDF 和圖像文件中偵測到的頁面、段落、行、單字、字元及 BARCODE 相關資訊。 您可以透過 Read 方法,從回傳的 OcrResult 物件中取得此資訊。

IronOCR 的全面結果系統建基於強大的 Tesseract 5 引擎,為開發人員提供超越簡單文字辨識的結構化資料擷取能力。 無論處理掃描文件照片螢幕截圖OcrResult 類別都能讓您對擷取的資料進行細緻的控制。

:path=/static-assets/ocr/content-code-examples/how-to/read-results-output-information.cs
using IronOcr;
using System;
using static IronOcr.OcrResult;

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

// Add image
using var imageInput = new OcrImageInput("sample.jpg");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Retrieve list of detected paragraphs
Paragraph[] paragraphs = ocrResult.Paragraphs;

// Output information to console
Console.WriteLine($"Text: {paragraphs[0].Text}");
Console.WriteLine($"X: {paragraphs[0].X}");
Console.WriteLine($"Y: {paragraphs[0].Y}");
Console.WriteLine($"Width: {paragraphs[0].Width}");
Console.WriteLine($"Height: {paragraphs[0].Height}");
Console.WriteLine($"Text direction: {paragraphs[0].TextDirection}");
Imports IronOcr
Imports System
Imports IronOcr.OcrResult

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Add image
Private imageInput = New OcrImageInput("sample.jpg")
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Retrieve list of detected paragraphs
Private paragraphs() As Paragraph = ocrResult.Paragraphs

' Output information to console
Console.WriteLine($"Text: {paragraphs(0).Text}")
Console.WriteLine($"X: {paragraphs(0).X}")
Console.WriteLine($"Y: {paragraphs(0).Y}")
Console.WriteLine($"Width: {paragraphs(0).Width}")
Console.WriteLine($"Height: {paragraphs(0).Height}")
Console.WriteLine($"Text direction: {paragraphs(0).TextDirection}")
$vbLabelText   $csharpLabel
Visual Studio 除錯器顯示 OCR 擷取結果,包含來自日文商務文件的座標與文字

如何從 OCR 結果中取得文字內容?

OcrResult 物件以簡潔直觀的方式呈現擷取的文字,讓開發人員能直接使用,或將其整合至其他應用程式元件中。 此層級結構反映了自然文件的組織方式,使您能輕鬆處理不同細粒度層級的內容。

對於需要多語言支援的應用程式,IronOCR 能無縫處理多語言文件,並在所有 125 種支援語言中維持相同的結構化結果格式。

以下程式碼範例透過迴圈PRINT文字以驗證結果。

:path=/static-assets/ocr/content-code-examples/how-to/read-results-output-text.cs
using IronOcr;
using System;
using static IronOcr.OcrResult;

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

// Add image
using var imageInput = new OcrImageInput("sampleText.png");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Retrieve list of detected paragraphs
Paragraph[] paragraphs = ocrResult.Paragraphs;

// Loop through each paragraph in the array
Console.WriteLine("--- All Detected Paragraphs ---");
foreach (Paragraph paragraph in paragraphs)
{
    // Print the text of the current paragraph
    Console.WriteLine(paragraph.Text);

    // Add a blank line for better separation (optional)
    Console.WriteLine();
}
Imports IronOcr
Imports System
Imports IronOcr.OcrResult

' Instantiate IronTesseract
Dim ocrTesseract As New IronTesseract()

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

    ' Retrieve list of detected paragraphs
    Dim paragraphs As Paragraph() = ocrResult.Paragraphs

    ' Loop through each paragraph in the array
    Console.WriteLine("--- All Detected Paragraphs ---")
    For Each paragraph As Paragraph In paragraphs
        ' Print the text of the current paragraph
        Console.WriteLine(paragraph.Text)

        ' Add a blank line for better separation (optional)
        Console.WriteLine()
    Next
End Using
$vbLabelText   $csharpLabel

輸出

顯示 OCR 段落偵測結果的終端機畫面,其中包含關於孫正義與重田康光所萃取的文字

控制台輸出顯示 IronOCR 正以極高精準度逐行擷取段落文字。 該引擎能自動偵測段落邊界,使其非常適合處理包含多個文字區塊的複雜文件。

如何取得偵測到的文字位置座標?

除了擷取的文字外,OcrResult 還提供了詳細的位置資料。 此空間資訊對於需要維持版面配置精確度,或從特定文件區域進行目標文字擷取的應用程式而言至關重要。 座標系統採用以頁面左上角為起點的標準像素測量方式。

若需提升基於座標的操作精準度,可考慮使用 OCR 區域標定功能來鎖定特定區域,或運用電腦視覺功能自動識別文字區域。

以下程式碼示範如何遍歷每個段落,並將其座標(X 和 Y)輸出至主控台。

:path=/static-assets/ocr/content-code-examples/how-to/read-results-output-coordinates.cs
using IronOcr;
using System;
using static IronOcr.OcrResult;

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

// Add image
using var imageInput = new OcrImageInput("sampleText.png");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Retrieve list of detected paragraphs
Paragraph[] paragraphs = ocrResult.Paragraphs;

Console.WriteLine("--- All Detected Coordinates of Paragraphs ---");

// Use a 'for' loop to get an index for each paragraph
for (int i = 0; i < paragraphs.Length; i++)
{
    // Get the current paragraph
    Paragraph paragraph = paragraphs[i];

    // Print the paragraph number, text, and its location
    Console.WriteLine($"X: {paragraph.X}"); // X-coordinate (left edge)
    Console.WriteLine($"Y: {paragraph.Y}"); // Y-coordinate (top edge)

    // Add a blank line for better separation
    Console.WriteLine();
}
Imports IronOcr
Imports System
Imports IronOcr.OcrResult

' Instantiate IronTesseract
Dim ocrTesseract As New IronTesseract()

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

    ' Retrieve list of detected paragraphs
    Dim paragraphs As Paragraph() = ocrResult.Paragraphs

    Console.WriteLine("--- All Detected Coordinates of Paragraphs ---")

    ' Use a 'for' loop to get an index for each paragraph
    For i As Integer = 0 To paragraphs.Length - 1
        ' Get the current paragraph
        Dim paragraph As Paragraph = paragraphs(i)

        ' Print the paragraph number, text, and its location
        Console.WriteLine($"X: {paragraph.X}") ' X-coordinate (left edge)
        Console.WriteLine($"Y: {paragraph.Y}") ' Y-coordinate (top edge)

        ' Add a blank line for better separation
        Console.WriteLine()
    Next
End Using
$vbLabelText   $csharpLabel

輸出

顯示 OCR 偵測到的段落座標(X,Y 值)的終端機輸出:(29,30)、(28,74) 及 (27,362)

輸出結果顯示三組座標,分別對應於三個段落。這些座標可用於繪製邊界框、擷取特定區域,或維持文字元素之間的空間關係。

OCR 結果中還包含哪些其他屬性?

除了文字和文字座標外,IronOCR 還提供其他資訊。 針對每個文字元素(段落、行、單字及個別字元),可提供以下資訊:

  • 文字:作為字串的實際內容。
  • X:以像素為單位,自頁面左邊緣起算的位置。
  • Y:以像素為單位,自頁面頂緣起算的位置。
  • 寬度:以像素為單位的寬度。
  • 高度:以像素為單位的高度。
  • 文字方向:文字的閱讀方向(由左至右或由上至下)。
  • 位置:一個矩形,以像素為單位顯示此文字在頁面上的位置。

這些功能在實作時特別有用:

  • 文字標示與註解系統
  • 自動表單欄位偵測
  • 文件轉換時的版面配置保留
  • 透過空間文本分析進行資料擷取

在除錯與視覺化階段,請使用文字標示功能,以視覺化方式驗證偵測區域的準確性。

段落、行、WORD與字元有何區別?

IronOCR 的階層式文字結構,讓開發人員能根據其特定使用情境,在適當的細節層級進行作業。 了解這些元素之間的差異,有助於為您的應用程式選擇合適的細粒度。

以下是偵測到的段落、行數、WORD及字元的比較。

日本科技企業家孫正義與重田康光的專題人物介紹
文件中以紅色標示,展示日本科技高管孫正義與重田康光的個人簡介
文字標示功能,在關於科技投資的段落中,以紅色方框覆蓋選取的單詞
顯示 OCR 結果中個別字元邊界的字元級文字偵測

每個細分層級皆有其不同用途:

  • 段落s:最適合用於文件結構分析與大量文字擷取
  • :有助於維持閱讀順序並處理表格資料
  • WORD:非常適合搜尋功能與文字分析
  • 字元:非常適合拼寫檢查與精確的文字編輯應用

IronOCR 能否讀取 BarCode 和 QR 碼?

是的,IronOCR 能夠讀取 BARCODE 和 QR 碼。 雖然 IronOCR 的功能可能不如 IronBarcode 那樣強大,但它支援常見的 BARCODE 類型。若要啟用 BARCODE 偵測功能,請將 Configuration.ReadBarCodes 屬性設定為 true。 這項整合功能使 IronOCR 成為處理同時包含文字與 BARCODE 的文件(例如發票、運送標籤或產品目錄)的絕佳選擇。

此外,可從偵測到的BarCode中提取有價值的資訊,包括格式、數值、座標(x, y)、高度、寬度及位置,並以 IronSoftware.Drawing.Rectangle 物件形式呈現。 IronDrawing 中的此 Rectangle 類別可實現文件上的精確定位。

若需處理更進階的BarCode讀取情境,請參閱我們文件中的完整BarCode讀取範例

:path=/static-assets/ocr/content-code-examples/how-to/read-results-barcodes.cs
using IronOcr;
using System;
using static IronOcr.OcrResult;

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

// Enable barcodes detection
ocrTesseract.Configuration.ReadBarCodes = true;

// Add image
using OcrInput ocrInput = new OcrInput();
ocrInput.LoadPdf("sample.pdf");

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

// Output information to console
foreach(var barcode in ocrResult.Barcodes)
{
    Console.WriteLine("Format = " + barcode.Format);
    Console.WriteLine("Value = " + barcode.Value);
    Console.WriteLine("X = " + barcode.X);
    Console.WriteLine("Y = " + barcode.Y);
}
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports System
Imports IronOcr.OcrResult

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Enable barcodes detection
ocrTesseract.Configuration.ReadBarCodes = True

' Add image
Using ocrInput As New OcrInput()
	ocrInput.LoadPdf("sample.pdf")
	
	' Perform OCR
	Dim ocrResult As OcrResult = ocrTesseract.Read(ocrInput)
	
	' Output information to console
	For Each barcode In ocrResult.Barcodes
		Console.WriteLine("Format = " & barcode.Format)
		Console.WriteLine("Value = " & barcode.Value)
		Console.WriteLine("X = " & barcode.X)
		Console.WriteLine("Y = " & barcode.Y)
	Next barcode
	Console.WriteLine(ocrResult.Text)
End Using
$vbLabelText   $csharpLabel

BarCode.Detection的輸出結果會是什麼樣子?

IronOCR 的 BarCode 偵測功能與文字擷取功能無縫整合,提供包含文字內容與 BarCode 資料在內的統一結果。 這項雙重能力對於需要同時提取並關聯這兩類資訊的自動化文件處理工作流程而言,具有極高價值。

顯示 QR 碼與 EAN8 BARCODE 偵測結果的除錯主控台,包含格式、數值及座標

此輸出範例展示了 IronOCR 同時偵測多種 BARCODE 類型的能力,針對每個偵測到的 BARCODE,提供格式識別(例如 QR 碼或 EAN8)、解碼值以及精確的座標資訊。 這套全面性的資料讓開發者能夠建置精細的文件處理應用程式,以高效處理混合內容類型。

常見問題

OcrResult 物件包含哪些資訊?

IronOCR 中的 OcrResult 物件包含已擷取的文字以及詳細的元資料,包括精確的 X/Y 座標、尺寸(寬度和高度)、文字方向(由左至右或由上至下),以及針對每個偵測到的元素所組織的層級結構,包含段落、行、單字和個別字元。

如何快速從 OCR 結果中提取第一個 WORD?

您可以透過 IronOCR 的 Read 方法並存取 Words 集合來擷取第一個單字的文字:`string wordText = new IronTesseract().Read("file.jpg").Words[0].Text;`。這能讓您立即存取 OCR 結果中的個別單字元素。

OCR 結果中包含哪些類型的座標資料?

IronOCR 會為每個偵測到的元素(段落、行、單字及字元)提供精確的 X 和 Y 座標,以及寬度和高度尺寸。可透過 CropRectangle 物件存取此座標資料,從而實現對文字元素的精確位置追蹤。

除了純文字內容外,還能擷取其他元資料嗎?

是的,IronOCR 能從 PDF 和圖像文件中擷取全面的元資料,包括頁面、段落、行、單字、字元,甚至 BarCode。OcrResult 物件可讓您存取每個元素的文字方向、層級結構及空間資訊。

哪些文件類型可進行 OCR 處理?

IronOCR 可處理多種文件類型,包括掃描文件、照片、螢幕截圖、PDF 及圖像檔案。Read 方法在這些格式間運作一致,會返回包含完整元資料的相同結構化 OcrResult 物件。

結果中的擷取文字是如何組織的?

IronOCR 會將擷取的文字組織成符合自然文件結構的層級架構。OcrResult 物件能以不同粒度層級呈現內容——從整頁到單一字元皆可——讓您能輕鬆地在適合應用程式的層級上處理文字。

IronOCR 能否整合至現有應用程式中?

IronOCR 設計上可輕鬆透過 C# 整合至現有應用程式中,讓開發人員能以最少的努力,為其軟體增添 OCR 功能。

使用 IronOCR 進行文件管理有哪些好處?

使用 IronOCR 進行文件管理,可將掃描文件轉換為可搜尋且可編輯的文字,從而簡化工作流程,減少人工資料輸入的需求,並提升文件的可存取性。

IronOCR 如何提升資料準確性?

IronOCR 透過其先進的辨識演算法與影像校正功能來提升資料準確性,確保文字擷取過程既可靠又精確。

IronOCR 是否有提供免費試用版?

是的,Iron Software 提供 IronOCR 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

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

準備開始了嗎?
Nuget 下載 5,896,332 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronOcr
執行範例 觀看您的圖片轉為可搜尋文字。