跳過到頁腳內容
使用 IRONOCR

用 C# 建立一個能夠真正提取有用資料的收據 OCR API

手動輸入收據資料是一種繁瑣且容易出錯的工作,這會讓開發人員質疑自己的職業選擇。 收據 OCR API 利用光學字元辨識技術自動從收據圖像中提取文本,並將其轉換為應用程式實際可以使用的結構化數據,從而消除手動數據輸入。 無論是費用管理自動化、會計軟體集成,還是為會員忠誠度計劃提供支持,可靠的收據 OCR 解決方案都能輕鬆應對繁重的工作。

在本文中,我們將示範如何使用 IronOCR(一個完全在本地運行的 .NET 庫,可在本地處理收據圖像,無需將敏感的收據資料傳送到第三方雲端服務)在 C# 中建立收據 OCR API。 這意味著在不犧牲準確性的前提下,實現全面的資料保護。

立即開始免費試用 IronOCR ,並跟隨以下範例進行操作。

收據OCR技術的工作原理是什麼?

用 C# 建立一個真正能提取有用資料的收據 OCR API:圖 1 - 收據 OCR API 輸出範例

收據 OCR(光學字元辨識)透過將收據影像上的列印文字轉換為機器可讀文本,自動從收據中提取資料。 在底層,人工智慧技術和深度學習模型分析收據的視覺佈局,識別文字區域,並以無與倫比的準確度識別字符,在清晰的掃描件上通常能達到 99% 或更高的準確率。

現代收據 OCR API 使用機器學習技術從各種收據格式和佈局中解析關鍵訊息,例如商家名稱、日期、各個項目、總計和稅額。 深度學習技術使這些模型能夠透過學習大型資料集不斷改進,並隨著時間的推移適應新的收據設計和語言。最終實現了快速、可靠的收據資料提取,從而取代了各行各業緩慢且容易出錯的手動輸入。

收據掃描技術可以處理多種語言,處理 JPG、PNG 和 PDF 等格式的文檔,並以結構化 JSON 等標準化格式提供結果,從而輕鬆與現有系統無縫整合。

如何使用 C# 提取收據資料?

使用 IronOCR,在 C# 中從收據中提取資料只需要幾行程式碼。 核心工作流程載入收據圖像文件,運行 OCR 引擎,並返回提取的完整文字。

using IronOcr;
// Initialize the OCR engine for receipt scanning
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
// Load the receipt image for data extraction
using var input = new OcrInput();
input.LoadImage("receipt.jpg");
// Extract text from the receipt
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
// Initialize the OCR engine for receipt scanning
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
// Load the receipt image for data extraction
using var input = new OcrInput();
input.LoadImage("receipt.jpg");
// Extract text from the receipt
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

' Initialize the OCR engine for receipt scanning
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English

' Load the receipt image for data extraction
Using input As New OcrInput()
    input.LoadImage("receipt.jpg")
    ' Extract text from the receipt
    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

輸出

用 C# 建立一個真正能提取有用資料的收據 OCR API:圖 2 - IronOCR 讀取收據輸出

IronTesseract 類別是主要的 OCR 引擎,它是 Tesseract 5 的一個託管封裝,免去了原生 C++ 互通和手動設定的麻煩。設定 OcrLanguage.English 可以告訴引擎使用哪種語言模型,不過IronOCR 支援超過 125 種語言,可用於處理來自世界各地的收據。

OcrInput 接受幾乎所有常見格式(JPG、PNG、BMP、TIFF、GIF、WEBP)以及 PDF 格式的收據圖片。 Read 方法執行實際的 OCR,並返回一個 OcrResult 對象,這是一個豐富的文檔對像模型,不僅包含純文本,還包含對段落、行、單詞和單個字符的結構化訪問以及置信度分數。 這非常適合需要提取細粒度資料的收據解析工作流程。

影像預處理如何減少收據掃描中的錯誤?

現實生活中的收據圖片很少是完美的。 紙張褶皺、光線不足和輕微旋轉都會引入噪聲,導致資料提取過程中出現錯誤。 在執行 OCR 之前對影像進行預處理可以顯著提高準確率,並有助於減少可能損壞收據資料的錯誤。

using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("receipt.jpg");
// Preprocess the receipt image to improve OCR accuracy
input.DeNoise();    // Remove digital noise from the scanned receipt
input.Deskew();     // Straighten a tilted or rotated receipt capture
input.Sharpen();    // Enhance text clarity for better recognition
OcrResult result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("receipt.jpg");
// Preprocess the receipt image to improve OCR accuracy
input.DeNoise();    // Remove digital noise from the scanned receipt
input.Deskew();     // Straighten a tilted or rotated receipt capture
input.Sharpen();    // Enhance text clarity for better recognition
OcrResult result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Console.WriteLine(result.Text);
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("receipt.jpg")
    ' Preprocess the receipt image to improve OCR accuracy
    input.DeNoise()    ' Remove digital noise from the scanned receipt
    input.Deskew()     ' Straighten a tilted or rotated receipt capture
    input.Sharpen()    ' Enhance text clarity for better recognition
    Dim result As OcrResult = ocr.Read(input)
    Console.WriteLine($"Confidence: {result.Confidence}%")
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

用 C# 建立一個能夠真正提取有用資料的收據 OCR API:圖 3 - 收據影像品質差的範例輸出

影像預處理功能

為了提高提取精度,IronOCR 提供了幾個內建濾鏡,用於在 OCR 過程開始之前清理影像。

功能 目的
DeNoise() 去除掃描文件中常見的斑點和數位瑕疵。
Deskew() 偵測並校正歪斜或傾斜影像的旋轉。
Sharpen() 增強模糊邊緣,使褪色的文字更清晰易讀。
Binarize() 將影像轉換為黑白影像以增加對比度。
ToGrayScale() 移除顏色數據,以簡化影像,以便於 OCR 引擎識別。
EnhanceResolution() 將低 DPI 影像放大,以提高字元辨識率。

利用置信度評分驗證數據

除了簡單的文字擷取之外,Confidence 屬性在 OcrResult 上傳回百分比分數,指示輸出的可靠性。

對於處理大量資料的自動化收據處理流程而言,該評分非常有價值。 它允許系統設定閾值——例如,自動處理高於90% 的任何結果,同時標記置信度低的結果以進行手動審核。 這樣既能保證數據質量,又無需人工檢查每一張收據。

如何從 OCR 文字中解析出特定的收據欄位?

從 OCR 引擎獲取原始文字是一個很好的開始,但這只是個開始。 如果你要建立一個費用報告或一個具有即時處理的會計工具,你需要的不僅僅是"一團"文本,而是具體的數據字段,例如日期、商家名稱和最終總額。

IronOCR 完成讀取影像的繁重工作後,我們就可以在收據 API 中使用標準的 C# 邏輯和正規表示式 (Regex) 來提取我們正在尋找的特定欄位。

using IronOcr;
using System.Text.RegularExpressions;

var ocr = new IronTesseract();
using var input = new OcrInput("receipt.jpg");
input.DeNoise();
OcrResult result = ocr.Read(input);
string ocrText = result.Text;

// Parse the date from receipt data
var dateMatch = Regex.Match(ocrText, @"\d{1,2}/\d{1,2}/\d{2,4}");
string receiptDate = dateMatch.Success ? dateMatch.Value : "Not found";

// Parse the total amount
var totalMatch = Regex.Match(ocrText, @"(?i)total[\s:$]*(\d+\.\d{2})");
string total = totalMatch.Success ? totalMatch.Groups[1].Value : "Not found";

Console.WriteLine($"Date: {receiptDate}");
Console.WriteLine($"Total: ${total}");
using IronOcr;
using System.Text.RegularExpressions;

var ocr = new IronTesseract();
using var input = new OcrInput("receipt.jpg");
input.DeNoise();
OcrResult result = ocr.Read(input);
string ocrText = result.Text;

// Parse the date from receipt data
var dateMatch = Regex.Match(ocrText, @"\d{1,2}/\d{1,2}/\d{2,4}");
string receiptDate = dateMatch.Success ? dateMatch.Value : "Not found";

// Parse the total amount
var totalMatch = Regex.Match(ocrText, @"(?i)total[\s:$]*(\d+\.\d{2})");
string total = totalMatch.Success ? totalMatch.Groups[1].Value : "Not found";

Console.WriteLine($"Date: {receiptDate}");
Console.WriteLine($"Total: ${total}");
Imports IronOcr
Imports System.Text.RegularExpressions

Dim ocr As New IronTesseract()
Using input As New OcrInput("receipt.jpg")
    input.DeNoise()
    Dim result As OcrResult = ocr.Read(input)
    Dim ocrText As String = result.Text

    ' Parse the date from receipt data
    Dim dateMatch As Match = Regex.Match(ocrText, "\d{1,2}/\d{1,2}/\d{2,4}")
    Dim receiptDate As String = If(dateMatch.Success, dateMatch.Value, "Not found")

    ' Parse the total amount
    Dim totalMatch As Match = Regex.Match(ocrText, "(?i)total[\s:$]*(\d+\.\d{2})")
    Dim total As String = If(totalMatch.Success, totalMatch.Groups(1).Value, "Not found")

    Console.WriteLine($"Date: {receiptDate}")
    Console.WriteLine($"Total: ${total}")
End Using
$vbLabelText   $csharpLabel

用 C# 建立一個能夠真正提取有用資料的收據 OCR API:圖 4 - 使用 IronOCR 和簡單正規表示式模式的範例輸出

本範例使用簡單的正規表示式模式從原始 OCR 收據文字中自動提取日期和總額。 日期模式與常見的收據日期格式(如 03/15/2026)相匹配,而總額模式則查找"TOTAL"字樣,後面跟著美元金額。 對於生產系統,應調整這些模式以符合遇到的特定收據格式。

若要擷取行項目資料(單一產品名稱、數量和價格),請按行拆分 OCR 文本,並套用識別行項目行的模式。 這種方法非常適合將收據圖像轉換為適合 JSON 格式輸出、費用管理工作流程以及與會計軟體直接整合的結構化資料。 對於跨各種佈局的更高級的收據解析,可以考慮將基於區域的 OCR 讀取(使用 ContentArea 矩形)與 IronOCR 的文檔結構功能相結合,從收據的特定部分提取行項目資料。

開發者對正規表示式的現實檢驗

說實話:正規表示式是一種"快速簡單"的入門方法,但它並非萬無一失。 現實生活中的收據很混亂。 有的商家可能會印上"總計",有的可能會印上"應付餘額",還有的可能會在美元符號上留下咖啡漬。

如果要將此功能投入生產環境,不要只依賴單一模式。 以下是如何使其更穩健的方法:

*使用置信度分數:* IronOCR 會給出它讀取的每個單字的置信度百分比。 如果您對"總計"金額的置信度低於 80%,則應將該收據標記出來,以便手動進行複核。 驗證資料:**不要僅僅相信字串。 嘗試將"總計"解析成小數。 如果識別失敗,可能是您的 OCR 識別器將"5"誤讀為"S"。 *位置很重要:對於複雜的佈局,請使用 IronOCR 的 OcrResult.BlocksLines 按其在頁面上的位置查找文字。 如果"總計"始終位於右下角,則針對該特定區域進行操作可以減少收據上其他數字造成的"幹擾"。

收據 OCR API 如何與費用管理系統整合?

當收據 OCR API 將結構化的收據資料直接匯入業務系統時,它才能真正發揮強大的作用。 IronOCR 提供了一個對開發者友好的 API,可以與任何 .NET 應用程式無縫集成,無論是 ASP.NET Web 服務、桌面費用追蹤器,還是批量處理收據的後台工作程序。

API 傳回提取的文字作為 OcrResult 對象,該對象提供對單一頁面、段落和行的存取。 這樣就可以輕鬆建立收據處理流程,該流程將 OCR 文字解析為結構化的 JSON,驗證資料(包括重複檢測和購買驗證),並將其轉發到會計軟體、ERP 系統或資料庫。

IronOCR 的所有 OCR 處理都在本地運行,無需依賴雲,免費試用計劃無需信用卡,並可完全控制敏感的財務文件。 這種本地優先的方法意味著收據 OCR API 可以處理大量的數位收據而無需擔心延遲問題,並為各個行業中具有嚴格合規要求的組織提供固有的資料保護。 該庫提供全面的文檔,並透過 NuGet 與現有系統無縫集成,對於既重視效能又注重簡易性的團隊來說,這是一個務實的選擇。

對於希望建立完整收據掃描解決方案的開發人員來說,IronOCR 還支援條碼和二維碼讀取可搜尋 PDF 產生以及多頁文件處理,所有這些都在同一個庫中。

立即開始自動化收據資料擷取

使用 IronOCR 在 C# 中建立收據 OCR API,可以消除手動資料輸入的痛苦,並以快速、準確、自動化的資料提取取代。 從基本的收據掃描到具有字段級提取功能的高級收據解析,該庫提供了將收據圖像轉換為有價值、可操作的結構化資料所需的一切,所有這些都無需將文檔發送到外部。

IronOCR 結合了強大的預處理過濾器、簡潔的 .NET API、機器學習增強的識別和本地處理功能,非常適合費用管理、收據處理以及任何需要可靠且大規模地從收據中提取資料的工作流程。

準備好從收據工作流程中徹底消除手動輸入了嗎? 探索 IronOCR 授權選項,找到適合您團隊的方案,或先進行免費試用,親眼見證效果。

Install-Package IronOcr

常見問題解答

什麼是收據 OCR API?

收據 OCR API 是一種利用光學字元辨識技術從收據影像中提取文字並將其轉換為結構化資料的工具,從而無需手動輸入資料。

IronOCR 可用於收據資料擷取嗎?

IronOCR 利用其先進的 OCR 功能,為從收據影像中提取結構化資料提供了強大的解決方案,使整個過程流暢且準確。

在 C# 中使用收據 OCR API 有哪些好處?

在 C# 中使用收據 OCR API 可以簡化從收據中提取資料的過程,減少與手動輸入相關的錯誤,並提高費用管理和會計等應用程式的效率。

IronOCR能否與會計軟體整合?

是的,IronOCR 可以與會計軟體集成,自動提取和處理收據數據,從而提高工作流程效率和準確性。

IronOCR 是否適用於費用管理自動化?

IronOCR 非常適合費用管理自動化,因為它能夠有效地提取和處理收據數據,從而減少手動數據輸入所需的時間和精力。

IronOCR如何處理不同的收據格式?

IronOCR 旨在識別和處理各種收據格式,無論收據的佈局或設計如何,都能確保準確提取資料。

IronOCR 能夠準確地提取收據上的文本,原因是什麼?

IronOCR 使用先進的光學字元辨識演算法,即使是從複雜的收據圖像中提取文本,也能確保高精度。

IronOCR 可以用於會員忠誠度計畫應用嗎?

是的,IronOCR 可以用於支援忠誠度計劃應用程序,透過準確提取和處理收據資料來追蹤購買和獎勵。

用於實作收據 OCR API 的程式語言是什麼?

可以使用 C# 實作收據 OCR API,利用 IronOCR 的功能來開發高效可靠的資料擷取解決方案。

IronOCR是否支援本地處理收據影像?

是的,IronOCR 支援對收據影像進行本地處理,提供了一種安全且高效的資料擷取方式,無需使用雲端服務。

Kannaopat Udonpant
軟體工程師
在成為軟件工程師之前,Kannapat 從日本北海道大學完成了環境資源博士學位。在追逐學位期间,Kannapat 還成為了生產工程系一部份——汽車机器人實验室的成員。2022 年,他利用他的 C# 技能加入 Iron Software 的工程團隊, 專注於 IronPDF。Kannapat 珍惜他的工作,因為他直接向编写大部分 IronPDF 使用的代碼的開發者学习。除了同行学习,Kannapat 还喜欢在 Iron Software 工作的社交十环。当他不编写代碼或文檔時,Kannapat 通常在他的 PS5 上打游戏或重看《The Last of Us》。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我