フッターコンテンツにスキップ
IRONOCRの使い方

実際に有用なデータを抽出するレシートOCR API をC#で構築する

領収書データを手入力する作業は、開発者が自分のキャリア選択に疑問を抱くような、退屈でミスが発生しやすい作業だ。 レシートOCR APIは、光学文字認識を用いてレシート画像からテキストを自動的に抽出し、アプリケーションが実際に使用できる構造化データに変換することで、手動によるデータ入力を不要にします。 経費管理の自動化、会計ソフトウェアとの連携、あるいはロイヤルティプログラムの推進など、目的が何であれ、堅牢なレシートOCRソリューションがその重責を担います。

この記事では、完全にオンプレミスで動作し、レシート画像をローカルで処理し、機密性の高いレシートデータをサードパーティのクラウドサービスに送信する必要のない.NETライブラリであるIronOCRを使用して、C#でレシートOCR APIを構築する方法を説明します。 つまり、正確性を損なうことなく、完全なデータ保護を実現するということです。

IronOCRの無料トライアルをご利用いただき、以下の例に沿って操作してみてください

レシートのOCR技術はどのように機能するのですか?

実際に有用なデータを抽出するC#のレシートOCR APIを構築する:画像1 - レシートOCR APIの出力例

レシートOCR(光学文字認識)は、レシート画像に印刷された文字を機械が読み取れる文字に変換することで、レシートからのデータ抽出を自動化します。 内部的には、AI技術とディープラーニングモデルがレシートの視覚的なレイアウトを分析し、テキスト領域を特定し、比類のない精度で文字を認識します。多くの場合、鮮明なスキャン画像では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() 低解像度画像を高解像度化して、文字認識精度を向上させます。

信頼度スコアを用いたデータの検証

単純なテキスト抽出に加えて、OcrResultConfidence プロパティは、出力の信頼性を示すパーセンテージ スコアを返します。

大量のデータを処理する自動領収書処理パイプラインにとって、このスコアは非常に貴重です。 この機能により、システムはしきい値を設定できます。例えば、 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.Blocks または Lines を使用して、ページ上の位置に基づいてテキストを検索します。 "合計"が常に右下隅にある場合、その特定の領域をターゲットにすることで、レシート上の他の数字による"ノイズ"を減らすことができます。

レシートOCR APIは、経費管理システムとどのように連携するのですか?

レシートOCR APIは、構造化されたレシートデータをビジネスシステムに直接取り込むことで、真に強力なツールとなる。 IronOCRは、開発者にとって使いやすいAPIを提供しており、 ASP.NETウェブサービス、デスクトップ経費トラッカー、バッチ処理で領収書を処理するバックグラウンドワーカーなど、あらゆる.NETアプリケーションとシームレスに統合できます。

APIは抽出されたテキストをOcrResultオブジェクトとして返します。このオブジェクトにより、個々のページ、段落、行にアクセスできます。 これにより、OCRテキストを構造化されたJSONに解析し、データを検証(重複検出や購入検証を含む)し、会計ソフトウェア、ERPシステム、またはデータベースに転送するレシート処理パイプラインを簡単に構築できます。

IronOCRはすべてのOCR処理をローカルで実行するため、クラウドへの依存はなく、無料プランのトライアルにクレジットカードは不要で、機密性の高い財務文書を完全に制御できます。 このローカルファーストのアプローチにより、レシートOCR APIは遅延を気にすることなく大量のデジタルレシートを処理でき、厳格なコンプライアンス要件を持つ様々な業界の組織に対して、本質的なデータ保護を提供します。 このライブラリは包括的なドキュメントを提供し、 NuGetを介して既存のシステムとシームレスに統合できるため、パフォーマンスとシンプルさの両方を重視するチームにとって実用的な選択肢となります。

完全なレシートスキャンソリューションの構築を目指す開発者向けに、 IronOCRはバーコードとQRコードの読み取り検索可能なPDFの生成複数ページの文書処理もすべて同じライブラリ内でサポートしています。

今すぐレシートデータ抽出の自動化を始めましょう

IronOCRを使用してC#でレシートOCR APIを構築することで、手作業によるデータ入力の手間を省き、高速かつ正確な自動データ抽出を実現できます。 基本的なレシートのスキャンから、フィールドレベルの抽出による高度なレシート解析まで、このライブラリは、レシート画像を価値のある実用的な構造化データに変換するために必要なすべてを提供します。しかも、文書を社外に送信する必要はありません。

強力な前処理フィルター、使いやすい.NET API、機械学習による高度な認識機能、そしてローカル処理機能の組み合わせにより、 IronOCRは経費管理、領収書処理、そして領収書からデータを確実かつ大規模に抽出する必要のあるあらゆるワークフローに最適です。

領収書のワークフローから手作業による入力をなくす準備はできていますか? IronOCRのライセンスオプションを検討して、チームに最適なプランを見つけるか、無料トライアルでその効果を直接体験してみてください

Install-Package IronOcr
Kannaopat Udonpant
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、Kannapatは北海道大学で環境資源の博士号を修了しました。博士号を追求する間に、彼はバイオプロダクションエンジニアリング学科の一部である車両ロボティクスラボラトリーのメンバーになりました。2022年には、C#のスキルを活用してIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。Kannapatは、IronPDFの多くのコードを執筆している開発者から直接学んでいるため、この仕事を大切にしています。同僚から学びながら、Iron Softwareでの働く社会的側面も楽しんでいます。コードやドキュメントを書いていない時は、KannapatはPS5でゲームをしたり、『The Last of Us』を再視聴したりしていることが多いです。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね