如何在 C# 中使用 OCR 閱讀條形碼和 QR 碼

如何使用 IronOCR 在 C## 中讀取條碼和 QR 碼。

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

IronOCR 可透過在設定中設定 ReadBarCodes = true 來讀取 C# 中的條碼和 QR 碼。 此單一設定可從 PDF 和影像中自動擷取條碼值,並同時識別一般文字,支援超過 20 種條碼格式,包括 QR code、Code 128 和 Data Matrix。

快速入門:立即從 PDF 讀取條碼

只需一個設定即可啟用條碼偵測,並使用 IronOCR 掃描 PDF。 以下程式碼顯示如何開啟條碼讀取、處理 PDF 並擷取解碼值。

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

  1. 使用 NuGet 套件管理器安裝 IronOCR

    PM > Install-Package IronOcr

  2. 複製並運行這段程式碼。

    var result = new IronOcr.IronTesseract() { Configuration = new IronOcr.TesseractConfiguration { ReadBarCodes = true } }.Read(new IronOcr.OcrPdfInput("document.pdf"));
    foreach(var bc in result.Barcodes) Console.WriteLine(bc.Value);
  3. 部署到您的生產環境進行測試

    立即開始在您的專案中使用 IronOCR,免費試用!
    arrow pointer


如何從 PDF 文件讀取 BarCode?

建立一個 IronTesseract 物件來執行閱讀。 將 ReadBarCodes 屬性設定為 true,以啟用條碼偵測。 使用 OcrPdfInput 建構器來匯入 PDF 文件。 使用 Read 方法對匯入的 PDF 執行 OCR。

以下是使用此 PDF 文件的範例:

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

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

// Enable barcode reading
ocrTesseract.Configuration.ReadBarCodes = true;

// Add PDF
using var imageInput = new OcrPdfInput("pdfWithBarcodes.pdf");

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

// Output detected barcodes and text values
Console.WriteLine("Extracted text:");
Console.WriteLine(ocrResult.Text);
Console.WriteLine("Extracted barcodes:");
foreach (var barcode in ocrResult.Barcodes)
{
    Console.WriteLine(barcode.Value);
}
Imports IronOcr
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Enable barcode reading
ocrTesseract.Configuration.ReadBarCodes = True

' Add PDF
Dim imageInput = New OcrPdfInput("pdfWithBarcodes.pdf")

' Perform OCR
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output detected barcodes and text values
Console.WriteLine("Extracted text:")
Console.WriteLine(ocrResult.Text)
Console.WriteLine("Extracted barcodes:")
For Each barcode In ocrResult.Barcodes
	Console.WriteLine(barcode.Value)
Next barcode
$vbLabelText   $csharpLabel
IronOCR偵錯輸出顯示了從包含企業簡介的PDF檔案中提取的文字和三個條碼(A、B、C)。

多個 BarCode 值會出現在條碼下方,並包含在擷取的文字中。

為什麼 IronOCR 可同時擷取文字和 BarCode 值?

IronOCR 的雙重擷取功能可提供全面的文件分析。 在處理同時包含文字和 BarCode 的文件時,程式庫會執行 標準 OCR 文字擷取,同時解碼條碼符號。 這種統一的方法可省去多重處理過程或獨立的程式庫。

文字萃取會擷取人類可讀的元素,而 BarCode 偵測則會識別並解碼機器可讀的資料。 這對發票、運送標籤或庫存報告等文件有利,這些文件中的 BarCode 值與列印的文字相關聯。 OcrResult class 將這些輸出分開 - 透過 Text 屬性存取文字,並透過 Barcodes 集合存取條碼資料。

支援哪些 BarCode 格式?

IronOCR 支援 20 種以上的 BarCode 格式:

1D BarCode:

  • Code 128、Code 39、Code 93
  • EAN-13、EAN-8
  • UPC-A、UPC-E 科達巴爾
  • ITF (交錯 2 of 5)
  • MSI 普萊西

2D BarCode:

  • QR 代碼
  • 資料矩陣
  • PDF417
  • 阿茲台克代碼
  • MaxiCode

對於專門的應用程式,例如讀取 MICR 支票或處理身份文件,IronOCR 的 BarCode 功能可補足其文字擷取功能。

何時我應該使用 OCR 來讀取條碼,而不是專用的條碼程式庫?

選擇 IronOCR 的整合式 BarCode 閱讀時:

1.混合內容處理:文件同時包含文字和 BarCode (出貨標籤、發票或 掃描文件) 2.單一程式庫偏好:您希望盡量減少依賴性,並使用單一解決方案 3.PDF 處理:您已經在使用 IronOCR 進行 PDF OCR 文字擷取。 4.複雜的文件佈局:文件在文字區域或表格中嵌入了 BarCode

使用專用的 BarCode 程式庫時:

  • 處理高容量的純 BarCode 影像
  • 要求實時掃描 BarCode(反應時間 < 50ms)
  • 處理損壞或低品質的 BarCode,需要專門的演算法
  • 利用攝影機最佳化實作行動條碼掃描

如何從文件讀取 QR 碼?

<! -- 螢幕截圖示範如何從文件讀取 qr 代碼? 在 IronPDF --> <!--說明:顯示逐步過程的截圖 -->

就像條碼讀取一樣,將 ReadBarCodes 屬性設定為 true。 除了檔案路徑之外,不需要其他程式碼變更。 使用 QR 碼處理此 PDF 文件:

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

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

// Enable barcode reading
ocrTesseract.Configuration.ReadBarCodes = true;

// Add PDF
using var imageInput = new OcrPdfInput("pdfWithQrCodes.pdf");

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

// Output detected barcodes and text values
Console.WriteLine("Extracted text:");
Console.WriteLine(ocrResult.Text);
Console.WriteLine("Extracted barcodes:");
foreach (var barcode in ocrResult.Barcodes)
{
    Console.WriteLine(barcode.Value);
}
Imports IronOcr
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Enable barcode reading
ocrTesseract.Configuration.ReadBarCodes = True

' Add PDF
Dim imageInput = New OcrPdfInput("pdfWithQrCodes.pdf")

' Perform OCR
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output detected barcodes and text values
Console.WriteLine("Extracted text:")
Console.WriteLine(ocrResult.Text)
Console.WriteLine("Extracted barcodes:")
For Each barcode In ocrResult.Barcodes
	Console.WriteLine(barcode.Value)
Next barcode
$vbLabelText   $csharpLabel
Visual Studio 中的 IronOCR 輸出,顯示從文件中提取的文字和成功解碼的 QR 代碼 A、B 和 C

為什麼相同的配置對 BarCode 和 QR Code 都有效?

IronOCR 的統一條碼檢測引擎對所有機器可讀碼一視同仁。 The ReadBarCodes configuration activates a comprehensive symbology detector that recognizes both 1D (linear barcodes) and 2D (QR codes, Data Matrix) formats without requiring format-specific settings. 此設計可簡化實作並降低配置複雜度。

偵測演算法會自動

  • 根據模式識別識別符號類型
  • 應用適當的解碼演算法
  • 可處理方向與尺寸的變化
  • 無論是何種 BarCode 類型,都能以一致的格式傳回結果

此方法反映了 Computer Vision models 的工作方式 - 在多種格式上進行訓練,以提供通用的偵測能力。

使用 OCR 讀取 QR 碼時有哪些常見問題?

處理 QR 代碼時常見的挑戰包括

1.解決問題:PDF 中的 QR 代碼可能會被降低取樣率,使其低於最小模組大小。請使用 DPI 設定,以確保有足夠的解析度 (建議最低 300 DPI)。

2.影像品質:掃描的 QR 碼經常出現模糊、雜訊或失真的情況。 套用影像修正篩選器以提高清晰度:

// Apply filters to improve QR code readability
ocrTesseract.Configuration.ReadBarCodes = true;
var input = new OcrImageInput("qr-code-scan.jpg");
input.DeNoise();
input.Sharpen();
input.EnhanceResolution();

var result = ocrTesseract.Read(input);
// Apply filters to improve QR code readability
ocrTesseract.Configuration.ReadBarCodes = true;
var input = new OcrImageInput("qr-code-scan.jpg");
input.DeNoise();
input.Sharpen();
input.EnhanceResolution();

var result = ocrTesseract.Read(input);
' Apply filters to improve QR code readability
ocrTesseract.Configuration.ReadBarCodes = True
Dim input As New OcrImageInput("qr-code-scan.jpg")
input.DeNoise()
input.Sharpen()
input.EnhanceResolution()

Dim result = ocrTesseract.Read(input)
$vbLabelText   $csharpLabel

3.方位問題:有角度的 QR 碼可能無法正確解碼。 啟用頁面旋轉偵測以處理錯位的文件。

4.混合內容干擾:文字或圖形重疊 QR 代碼可能會阻止偵測。 必要時使用 rop regions 來隔離 QR 碼區域。

如何提高 QR 碼識別準確度?

使用這些技術優化 QR 碼識別:

1.預先處理圖片:使用 Filter Wizard 來確定最佳的增強設定:

// Enhanced QR code reading with preprocessing
var ocrTesseract = new IronTesseract();
ocrTesseract.Configuration.ReadBarCodes = true;

// Configure for better QR detection
var input = new OcrImageInput("document-with-qr.pdf");
input.TargetDPI = 300; // Ensure sufficient resolution
input.Binarize(); // Convert to black and white
input.DeNoise(); // Remove image artifacts

var result = ocrTesseract.Read(input);
// Enhanced QR code reading with preprocessing
var ocrTesseract = new IronTesseract();
ocrTesseract.Configuration.ReadBarCodes = true;

// Configure for better QR detection
var input = new OcrImageInput("document-with-qr.pdf");
input.TargetDPI = 300; // Ensure sufficient resolution
input.Binarize(); // Convert to black and white
input.DeNoise(); // Remove image artifacts

var result = ocrTesseract.Read(input);
Imports IronTesseract

' Enhanced QR code reading with preprocessing
Dim ocrTesseract = New IronTesseract()
ocrTesseract.Configuration.ReadBarCodes = True

' Configure for better QR detection
Dim input = New OcrImageInput("document-with-qr.pdf")
input.TargetDPI = 300 ' Ensure sufficient resolution
input.Binarize() ' Convert to black and white
input.DeNoise() ' Remove image artifacts

Dim result = ocrTesseract.Read(input)
$vbLabelText   $csharpLabel

2.處理多頁面:適用於多頁文件,其中包含橫跨多頁的 QR 代碼:

// Process multi-page documents efficiently
using var pdfInput = new OcrPdfInput("multi-page-qr-document.pdf");
pdfInput.TargetDPI = 300;

var results = ocrTesseract.Read(pdfInput);
foreach (var page in results.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    foreach (var barcode in page.Barcodes)
    {
        Console.WriteLine($"  QR Code: {barcode.Value}");
        Console.WriteLine($"  Location: X={barcode.X}, Y={barcode.Y}");
    }
}
// Process multi-page documents efficiently
using var pdfInput = new OcrPdfInput("multi-page-qr-document.pdf");
pdfInput.TargetDPI = 300;

var results = ocrTesseract.Read(pdfInput);
foreach (var page in results.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    foreach (var barcode in page.Barcodes)
    {
        Console.WriteLine($"  QR Code: {barcode.Value}");
        Console.WriteLine($"  Location: X={barcode.X}, Y={barcode.Y}");
    }
}
Imports System

' Process multi-page documents efficiently
Using pdfInput As New OcrPdfInput("multi-page-qr-document.pdf")
    pdfInput.TargetDPI = 300

    Dim results = ocrTesseract.Read(pdfInput)
    For Each page In results.Pages
        Console.WriteLine($"Page {page.PageNumber}:")
        For Each barcode In page.Barcodes
            Console.WriteLine($"  QR Code: {barcode.Value}")
            Console.WriteLine($"  Location: X={barcode.X}, Y={barcode.Y}")
        Next
    Next
End Using
$vbLabelText   $csharpLabel

3.同步處理:若要在處理多個文件時獲得更好的效能,請使用 async 方法

// Asynchronous QR code reading
var result = await ocrTesseract.ReadAsync(imageInput);
// Asynchronous QR code reading
var result = await ocrTesseract.ReadAsync(imageInput);
' Asynchronous QR code reading
Dim result = Await ocrTesseract.ReadAsync(imageInput)
$vbLabelText   $csharpLabel

4.Debug 識別問題:啟用 result highlighting 可視化 IronOCR 檢測到的內容:

result.SaveAsHighlightedImage("qr-detection-debug.png");
result.SaveAsHighlightedImage("qr-detection-debug.png");
result.SaveAsHighlightedImage("qr-detection-debug.png")
$vbLabelText   $csharpLabel

大型條碼處理的效能最佳化

在處理數以千計帶有 BarCode 和 QR 代碼的文件時,請執行這些最佳化策略:

1.多執行緒:利用多執行緒處理來同時處理多個文件:

// Process multiple documents in parallel
var documents = new[] { "doc1.pdf", "doc2.pdf", "doc3.pdf" };
var results = documents.AsParallel().Select(doc =>
{
    var tesseract = new IronTesseract();
    tesseract.Configuration.ReadBarCodes = true;
    return tesseract.Read(new OcrPdfInput(doc));
}).ToList();
// Process multiple documents in parallel
var documents = new[] { "doc1.pdf", "doc2.pdf", "doc3.pdf" };
var results = documents.AsParallel().Select(doc =>
{
    var tesseract = new IronTesseract();
    tesseract.Configuration.ReadBarCodes = true;
    return tesseract.Read(new OcrPdfInput(doc));
}).ToList();
' Process multiple documents in parallel
Dim documents = {"doc1.pdf", "doc2.pdf", "doc3.pdf"}
Dim results = documents.AsParallel().Select(Function(doc)
    Dim tesseract = New IronTesseract()
    tesseract.Configuration.ReadBarCodes = True
    Return tesseract.Read(New OcrPdfInput(doc))
End Function).ToList()
$vbLabelText   $csharpLabel

2.記憶體管理:使用 abort tokens 來處理長時間執行的作業:

// Implement cancellation for large batch processing
using var cts = new CancellationTokenSource();
ocrTesseract.Configuration.CancellationToken = cts.Token;

// Cancel if processing takes too long
cts.CancelAfter(TimeSpan.FromMinutes(5));
// Implement cancellation for large batch processing
using var cts = new CancellationTokenSource();
ocrTesseract.Configuration.CancellationToken = cts.Token;

// Cancel if processing takes too long
cts.CancelAfter(TimeSpan.FromMinutes(5));
' Implement cancellation for large batch processing
Using cts As New CancellationTokenSource()
    ocrTesseract.Configuration.CancellationToken = cts.Token

    ' Cancel if processing takes too long
    cts.CancelAfter(TimeSpan.FromMinutes(5))
End Using
$vbLabelText   $csharpLabel

3.結果匯出:將結果儲存為可搜尋的 PDFs,以維護文字和 BarCode 資料:

// Export results with embedded barcode values
result.SaveAsSearchablePdf("output-with-barcodes.pdf");
// Export results with embedded barcode values
result.SaveAsSearchablePdf("output-with-barcodes.pdf");
' Export results with embedded barcode values
result.SaveAsSearchablePdf("output-with-barcodes.pdf")
$vbLabelText   $csharpLabel

與商業應用程式整合

IronOCR for .NET 的 BarCode 功能可與現有的 .NET 應用程式無縫整合。 常見的整合情境包括

  • 庫存管理:從出貨艙單中擷取產品編號
  • 文件存檔:透過內嵌的 BarCode 識別碼索引掃描的文件
  • 發票處理:將條碼 SKU 與 財務文件中的明細項目相搭配
  • 醫療記錄:在醫療表格旁邊處理病患腕帶 BarCode

對於處理大量條碼和 QR 代碼的生產應用程式,請考慮實施 進度追蹤,以監控處理狀態,並根據真實世界的指標優化效能。

常見問題解答

如何在 C# 應用程式中啟用 BarCode 讀取功能?

使用 IronOCR,透過在 TesseractConfiguration 中設定 ReadBarCodes = true 來啟用條碼讀取功能。這個單一設定可啟動 PDF 和影像中條碼值的自動擷取,並同時支援超過 20 種條碼格式的一般文字辨識。

我可以從同一份文件中同時讀取文字和 BarCode 嗎?

是的,IronOCR 執行雙重擷取 - 它透過標準 OCR 擷取人類可讀的文字,同時解碼機器可讀的 BarCode。OcrResult 類將這些輸出分開,文字可透過 Text 屬性存取,條碼資料則透過 BarCode 集合存取。

可以檢測哪些 BarCode 格式?

IronOCR 支援超過 20 種條碼格式,包括一維條碼(Code 128、Code 39、Code 93、EAN-13、EAN-8、UPC-A、UPC-E、Codabar、ITF、MSI、Plessey)和二維條碼(QR Code、Data Matrix 等)。

如何從 PDF 文件中提取 BarCode?

建立一個 IronTesseract 物件,將 ReadBarCodes 設為 true,使用 OcrPdfInput 構建器匯入您的 PDF,然後使用 Read 方法。IronOCR 將執行 OCR 並擷取所有偵測到的 BarCode 值,您可以透過 result.Barcodes 套件存取這些值。

文字 OCR 和 BarCode 讀取是否需要獨立的程式庫?

不,IronOCR 的統一方法不需要多重處理通道或獨立的程式庫。它可執行標準的 OCR 文字擷取,同時在單一作業中解碼 BarCode 符號。

Curtis Chau
技術撰稿人

Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。

準備好開始了嗎?
Nuget 下載 5,384,824 | 版本: 2026.2 剛剛發布