用 C# 建立一個能夠真正提取有用資料的收據 OCR API
手動輸入收據資料是一種枯燥且容易出錯的工作,讓開發者懷疑自己的職業選擇。 收據OCR API通過使用光學字元識別自動從收據圖片中擷取文字,並將其轉換為應用程式實際可使用的結構化資料,從而消除了手動資料輸入的需求。 無論目標是費用管理自動化、會計軟體整合,還是驅動忠誠度計畫,可靠的收據OCR解決方案都是沉重工作的承擔者。
在本文中,我們將演示如何使用IronOCR在C#中建立一個收據OCR API,這是一個完全在本地運行的.NET程式庫,處理本地的收據影像,並且不需要將敏感的收據資料發送給第三方雲端服務。 這意味著不犧牲準確性即可獲得全資料保護。
透過IronOCR免費試用開始,跟著下面的範例一起操作。
收據OCR技術如何運作?

收據OCR(光學字元識別)通過將收據影像上的印刷文字轉換為機器可讀文字,實現收據資料的自動提取。 在背後,AI技術和深度學習模型分析收據的視覺佈局,識別文字區域,並以無與倫比的準確性識別字元,通常在乾淨的掃描中達到99%或更高。
現代的收據OCR API使用機器學習來解析關鍵資訊,如商家名稱、日期、個別行項目、總計和稅額,來自各種收據格式和佈局。 深度學習技術使這些模型可以不斷改進,通過從大型資料集中學習,隨著時間的推移適應新的收據設計和語言。結果是快速、可靠的收據資料提取,可以替換掉各行業中緩慢且容易出錯的手動輸入。
收據掃描技術可以處理多種語言,處理JPG、PNG和PDF等格式的文件,並以標準化格式如結構化JSON輸出結果,使得與現有系統的無縫整合變得簡單。
如何使用C#提取收據資料?
在C#中使用IronOCR僅需幾行程式碼即可從收據中提取資料。 核心工作流程載入收據影像文件,運行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
輸出

IronTesseract類是主要的OCR引擎,為Tesseract 5的受控包裝,消除了本機C++互操作和手動設置的麻煩。設置OcrLanguage.English告訴引擎使用哪個語言模型,儘管IronOCR支持超過125種語言來處理來自世界各地的收據。
OcrInput接受幾乎任何常見格式(JPG、PNG、BMP、TIFF、GIF、WEBP)的收據影像,以及PDF。 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

影像預處理功能
為了提高提取準確性,IronOCR提供了幾個內建過濾器,在OCR過程開始前清理影像。
| 功能 | 目的 |
|---|---|
DeNoise() |
去除掃描文件中常見的小點和數位痕跡。 |
Deskew() |
檢測並校正傾斜或歪斜的影像旋轉。 |
Sharpen() |
增強模糊邊緣,使褪色的文字變得更加清晰。 |
Binarize() |
將影像轉換成黑白以提高對比度。 |
ToGrayScale() |
去除顏色資料以簡化影像供OCR引擎處理。 |
EnhanceResolution() |
放大低DPI的影像以改善字元識別。 |
通過置信度評分驗證資料
除了簡單的文字提取之外,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

此範例使用簡單的正則表達式模式,自動從原始OCR收據文字中提取日期和總計。 日期模式匹配常見的收據日期格式,如03/15/2026,而總計模式則尋找"TOTAL"這個詞後跟一個金額。 對於生產系統,這些模式應調整以吻合遇到的具體收據格式。
要提取行項目資料——單獨的產品名稱、數量和價格,將OCR文字按行分割,並應用識別行項目行的模式。 這種方法非常適合將收據影像轉換為適合JSON格式輸出的結構化資料,費用管理工作流程,以及與會計軟體直接整合。 對於需要跨各種佈局進行更高級的收據解析,考慮結合基於區域的OCR閱讀(使用ContentArea矩形)和IronOCR的文件結構功能,從收據的特定部分提取行項目資料。
開發者對正則表達式的現實檢視
讓我們現實一點:正則表達式是一個"快速而臨時"的入門方法,但它並不是萬無一失的。 現實世界中的收據很混亂。 一個商家可能列印"TOTAL",另一個可能說"Balance Due",第三個可能正好在金額符號上有個咖啡漬。
如果您要將它投入生產,千萬不要只依賴單一模式。 這就是如何讓它變得更強大:
- 使用信心評分:IronOCR為它所讀取的每個單詞提供置信百分比。 如果您的"總計"金額的置信度低於80%,您應該標記出該收據讓人員檢查。
- 驗證資料:不要只相信字串。 嘗試將"總計"解析為小數。 如果失敗,您的OCR可能將"5"錯讀為"S"。
- 位置重要:對於複雜的佈局,使用IronOCR的
Lines,根據其在頁面上的位置找到文字。 如果"總計"總是在右下角,針對那個特定區域可減少來自收據上其他數字的"噪音"。
收據OCR API如何與費用管理系統整合?
當收據OCR API將結構化收據資料直接餵入業務系統時,它變得真正強大。 IronOCR提供了一個對開發者友好的API,可以與任何.NET應用程式無縫整合,無論是ASP.NET Web服務、桌面費用跟蹤器,還是批量處理收據的後台工作者。
API將提取的文字作為OcrResult物件返回,提供對各頁、段落和行的存取。 這使得建立一個能將OCR文字解析成結構化JSON的收據處理管道變得簡單,並驗證資料(包括重複檢測和購買驗證),將其轉發給會計軟體、ERP系統或資料庫。
IronOCR運行在本地的所有OCR處理,無需依賴雲端,免費計畫試用不需要信用卡,並對敏感財務文件具有完全控制。 這種本地優先的方法意味著收據OCR API可以在沒有延遲關注的情況下處理大量的數位收據,並為具有嚴格合規要求的各行業組織提供內在資料保護。 程式庫提供了全面的文件,並透過NuGet與現有系統無縫整合,使得它成為那些看重性能和簡易性的團隊的務實選擇。
對於想要構建完整收據掃描解決方案的開發者,IronOCR還支持條碼和QR碼閱讀,可搜尋PDF生成,以及多頁文件處理,所有這些都在同一程式庫中。
立即開始自動化收據資料提取
使用IronOCR在C#中構建收據OCR API,將手動資料輸入的痛苦替換為快速、準確、自動化的資料提取。 從基本的收據掃描到具有字段級提取的高級收據解析,該程式庫提供了將收據影像轉換為有價值、可操作的結構化資料所需的一切,所有這些都不需要將文件發送到外部。
強大的預處理過濾器、清晰的.NET API、機器學習增強的識別和本地處理相結合,使得IronOCR非常適合費用管理、收據處理和任何需要穩定可擴展地提取收據資料的工作流程。
準備好從您的收據工作流程中消除手動輸入? 探索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使用哪種程式語言?
收據OCR API可以使用C#實現,利用IronOCR的功能來開發有效且可靠的資料提取解決方案。
IronOCR支援本地處理收據圖像嗎?
是的,IronOCR支援本地處理收據圖像,提供安全且高效的方法來提取資料,無需雲端服務。



