使用 IRONOCR

在 C# 中 OCR 超市收據(開發者教程)

Kannaopat Udonpant
坎納帕特·烏頓潘
2024年12月15日
分享:

收據在當今繁忙的世界中被期望使用。 無論是在超市購買雜貨還是在餐廳用餐,擁有收據有助於了解花費金額,並可以根據此制定預算。 同時,當雜貨店使用收據掃描器掃描收據時,他們可以洞察其產品的銷售情況,並可以根據銷售預測進行規劃。

然而,收據通常很難閱讀,有時候人們不確定總計是多少。 此外,如果有人想管理預算,手動輸入所有收據的數據是很累人的,尤其是考慮到人們可以購買的商品數量。 丟失收據可能意味著你突然不確定為何本月的預算超支。

針對此問題,預算和財務應用程式已轉向利用OCR(光學字符識別)技術來幫助客戶輕鬆跟蹤所有收據,通過掃描將其轉換為數位收據。 這樣一來,可以減少輸入收據時的人為錯誤,同時讓客戶自動化數據輸入、追踪開支,並深入了解購買行為。

OCR技術使用機器學習演算法來識別文字或數字區域,從收據和數字圖像中提取數據。 然而,它並非沒有缺陷。 如果圖像有大量的數位雜訊,比如模糊和污損,返回的數據往往會變得不正確或混亂。 因此,選擇一個可靠的函式庫,使開發人員能夠調試和優化讀取收據的方法是至關重要的。

IronOCR 是其中一個庫。 它提供專門的方法來讀取收據,同時為想要在擷取數據之前過濾圖像的開發者提供自訂功能。 它甚至允許開發人員調試和測試數據是否準確。

本文可能會討論 IronOCR 如何處理和過濾超市收據以確保數據準確性的實際案例。

IronOCR:一個 C# 光學字符識別庫

以 C# 處理超市收據 OCR(開發者教程):圖 1 - IronOCR:C# OCR 庫

IronOCR 是一個 C# 庫,在其底層使用了定制版本的 Tesseract OCR 引擎。 該程式庫提供簡單易用的方法和靈活的功能,以滿足所有與OCR相關的需求。 除了標準技術之外,IronOCR允許開發者充分利用並自訂Tesseract的客製化版本,以完成所有相關任務。 有助於超市收據的一些關鍵方面:

  1. 跨平台相容性:IronOCR 完全相容於多種 .NET 平台,包括 .NET 8、7、6 和 5,以及 .NET Framework 4.6.2 及以上版本。 它無縫支援所有操作系統,包括 Windows、macOS、Azure 和 Linux,因此跨相容性不是問題。

  2. 靈活性和可擴展性:該程式庫的靈活性體現在其能夠處理各種OCR輸入格式,包括流行的圖像格式如jpg、png和gif。 它還可以無縫整合 C# 的原生 "System.Drawings.Objects",使整合到現有代碼庫變得輕而易舉。

  3. 易於使用和廣泛支持:IronOCR 擁有完善的文檔,並提供強大的 API 和涵蓋所有功能的教程。 此外,開發人員可以依賴每週五天 24 小時的支援獲得任何協助。

  4. 多語言:IronOCR 支援高達 125 種語言及自訂語言,是一款非常多樣化的國際文件處理工具。 它擅長識別產品名稱和價格,非常適合辨識收據。

使用 IronOCR 讀取超市收據

授權金鑰

請記住,IronOCR 需要授權金鑰才能運作。 您可以透過訪問此連結獲得免費試用的金鑰。

//Replace the license key variable with the trial key you obtained
IronOCr.License.LicenseKey = "REPLACE-WITH-YOUR-KEY";
//Replace the license key variable with the trial key you obtained
IronOCr.License.LicenseKey = "REPLACE-WITH-YOUR-KEY";
'Replace the license key variable with the trial key you obtained
IronOCr.License.LicenseKey = "REPLACE-WITH-YOUR-KEY"
$vbLabelText   $csharpLabel

收到試用金鑰後,將此變數設置在您的專案中。

程式碼範例

假設一個情況,一位開發人員開發了移動應用程式,允許客戶用手機掃描他們的收據,根據總購買金額獲得額外積分。

下面的程式碼展示了 IronOCR 如何處理超市收據,並使用 OCR API 提取所有相關數據,例如產品名稱、項目、價格和任何名稱。

輸入圖像

C#中的OCR超市收據(開發者教程):圖2 - 示例超市收據

實施收據光學字符識別 (OCR)

using IronOcr;
#region
IronOcr.License.LicenseKey = "YOUR-KEY";
#endregion
// Instantiate OCR engine
var ocr = new IronTesseract();
using var inputPhoto = new OcrInput();
inputPhoto.LoadImage("supermarketexample.jpg");
// Perform OCR
OcrResult result = ocr.Read(inputPhoto);
string text = result.Text;
Console.WriteLine(text);
using IronOcr;
#region
IronOcr.License.LicenseKey = "YOUR-KEY";
#endregion
// Instantiate OCR engine
var ocr = new IronTesseract();
using var inputPhoto = new OcrInput();
inputPhoto.LoadImage("supermarketexample.jpg");
// Perform OCR
OcrResult result = ocr.Read(inputPhoto);
string text = result.Text;
Console.WriteLine(text);
Imports IronOcr
#Region ""
IronOcr.License.LicenseKey = "YOUR-KEY"
'#End Region
' Instantiate OCR engine
Dim ocr = New IronTesseract()
Dim inputPhoto = New OcrInput()
inputPhoto.LoadImage("supermarketexample.jpg")
' Perform OCR
Dim result As OcrResult = ocr.Read(inputPhoto)
Dim text As String = result.Text
Console.WriteLine(text)
$vbLabelText   $csharpLabel
  1. 我們首先將 `IronOcr` 模組匯入到程式碼範例中。

  2. 然後,我們實例化 OCR 引擎並創建一個新的 IronTesseract 變量。

  3. 接著,我們創建一個新的`OcrInput`並載入圖像。 在此範例中,我們將`文件路徑`提供給變數。 雖然收據格式有多種形式,但該方法可以處理所有流行的格式。

  4. 然後我們使用`Read`方法來讀取圖像。

  5. 然後我們將結果打印到控制台輸出。

控制台輸出:收據數據

C# 中的超市收據 OCR(開發者教程):圖 3 - 控制台輸出

請注意,上述控制台輸出會將產品和單行項目打印在同一行中。該方法在頁面分割模式下運行,忽略在收據中充當分隔符的行塊。

偵錯和可靠性測試

上方的收據是一張精緻的圖像,它不代表客戶隨意拍攝的收據照片。 在處理實際案例時,我們必須驗證提取數據的置信度,以確保數據被視為無效的閾值,以確保應用程式的一致性。

IronOCR 具有一個內建屬性稱為 `confidence`,讓開發者可以驗證提取資料的準確性。

OcrResult result = ocr.Read(inputPhoto);
string text = result.Text;
Console.WriteLine(text);
Console.WriteLine(result.Confidence);
OcrResult result = ocr.Read(inputPhoto);
string text = result.Text;
Console.WriteLine(text);
Console.WriteLine(result.Confidence);
Dim result As OcrResult = ocr.Read(inputPhoto)
Dim text As String = result.Text
Console.WriteLine(text)
Console.WriteLine(result.Confidence)
$vbLabelText   $csharpLabel

此代碼與上述代碼相同。 主要的區別在於它還會打印出信心水平。

C# 中的超市收據 OCR(開發者教程):圖 4

在 `OcrResult` 中的 `Confidence` 屬性是一個關鍵的浮點數,代表 OCR 的統計準確性信心。 此值是所有字符的平均值。 較低的值表示潛在問題,例如護照影像模糊或附加資訊。 最高的信心水平以1表示,而最低的信心水平以0表示。值越高,我們就越可以安全地假定提取的數據是準確且精確的。

如您所見,即使是庫存圖像,信心水平也只有 75。在現實生活場景中,由於數位噪點,信心可能會更低。

去除噪声和過濾器

如上所示,除了拒絕低可信度的數據外,IronOCR 也允許開發人員在將數據作為圖像輸入之前清除和過濾噪音,以確保數據提取的高準確性。 在使用重複的超市收據之前,我們可以進行一些配置。

inputPhoto.DeNoise();
inputPhoto.ToGrayScale();
inputPhoto.DeNoise();
inputPhoto.ToGrayScale();
inputPhoto.DeNoise()
inputPhoto.ToGrayScale()
$vbLabelText   $csharpLabel

第一種方法「DeNoise」將 alpha 通道變為白色,這可能會提高照片的準確性,因為數字照片通常有大量的噪聲。

第二個方法,“ToGrayScale”,雖然不完全是提高準確性的方法,但確實透過將每個像素色調轉換為灰階來幫助批次處理收據的效率。

除了這些方法外,開發者應該使用 IronOCR 測試和微調可用的設置,以根據從超市收據中提取數據的所需標準進行過濾。

結論

使用C#進行超市收據的OCR(開發者教程):圖5 - IronOCR

隨著自動化技術的發展,Receipt OCR 是一項強大的技術,可以幫助企業從收據數據中提取有價值的見解。 它也是個人用來幫助預算支出並個人化識別感興趣領域的強大工具。 不僅如此,OCR技術還可以通過檢查收據上的交易號碼來加強防篡改或更改收據的預防功能。

因此,選擇合適的收據OCR解決方案對於準確性、速度和可擴展性是至關重要且虛擬的。 IronOCR 包含這些功能,且容易與現有平台整合,為開發人員在收據掃描方面提供優勢。

如果開發人員有興趣,可以使用IronOCR的試用許可證

Kannaopat Udonpant
坎納帕特·烏頓潘
軟體工程師
在成為軟體工程師之前,Kannapat 在日本北海道大學完成了環境資源博士學位。在攻讀學位期間,Kannapat 也成為了車輛機器人實驗室的成員,該實驗室隸屬於生物生產工程學系。2022 年,他利用自己的 C# 技能,加入了 Iron Software 的工程團隊,專注於 IronPDF 的開發。Kannapat 珍視這份工作,因為他可以直接向負責撰寫大部分 IronPDF 程式碼的開發人員學習。除了同儕學習外,Kannapat 還享受在 Iron Software 工作的社交方面。當他不在撰寫程式碼或文件時,Kannapat 通常會在 PS5 上玩遊戲或重看《最後生還者》。
< 上一頁
在 C# 中進行 OCR 發票處理(開發者教程)
下一個 >
護照 OCR SDK(開發者教程)