space ocr
ガイド記事料金ドキュメント

領収書・請求書に最適なOCRソフトの選び方

領収書・請求書OCRソフトの選定ガイド。検証可能な精度、明細行の抽出、エクスポート、API、Webhook、監査証跡、そして明朗な料金まで——実際に確認できるライブデモで証明します。

紙の書類を扱うすべての会社が、領収書と請求書を扱っています——そしてどちらも手入力するのは本当に苦痛です。OCRが約束するものは明快です。書類を撮影し、構造化データを受け取り、次の作業へ進む。問題は、ほとんどのOCRツールがそれらしい結果で止まってしまうことです。取引先名と合計金額を渡され、あとはそれを信じるしかありません。個人の経費メモならそれで十分でしょう。しかし買掛金管理や経費の突合、あるいは監査の対象になる業務では、「AIがそう言ったから」という説明は、自分の名前で通せる答えにはなりません。

このガイドは選定チェックリストです。派手なデモではなく、領収書・請求書に最適なOCRソフトを本当に分けるポイント——検証可能な精度、明細行の抽出、きれいなエクスポート、Webhookを備えた本物のAPI、監査証跡、そして予測できる料金——を一つずつ確認し、space-ocrがそれぞれをどう実現しているかを、スクリーンショットではなく実際に確認できるライブデモでお見せします。

まずは証拠から:その場で確認できる実際の抽出結果

機能の話に入る前に、多くのベンダーが見せたがらないものをお見せします。それは、すべての値が、ページ上のどこから読み取られたかを正確に指し示す抽出結果です。下のフィールドにマウスを合わせてみてください——領収書上に表示される枠が、その値が読み取られた場所です。

Receipts with extracted-field bounding boxes
Verified fields
KINSHO · 合計 2,045
ライフ · 合計 4,286

Each value with a box carries a verified on-page location — in data.cells[path], that is box + 4-point quad + evidence.match_ratio — on a 0–1000 normalized grid (0,0 top-left → 1000,1000 bottom-right), the same shape the live API returns. Hover a field to trace it back to the pixels it came from.

領収書・請求書OCRで見るべきポイント

領収書と請求書は、「簡単そうに見えて最も難しい」書類です。レイアウトは取引先ごとにばらばら、合計金額は小計や税額の行に紛れ、明細は折り返し、スマホ写真は傾いて反射が入って届きます。きれいなPDF1枚なら完璧に処理できるツールが、次のしわくちゃの感熱紙レシートで崩れることも珍しくありません。マーケティング文句に惑わされないよう、次の基準を使ってください。

重要な点なぜ重要か弱いツール強いツール
検証可能な精度追跡できない数字は、結局打ち直すしかない値を返す、せいぜい信頼度スコアまで各値を出典座標つきで返す——軸並行のボックスと、紙面の傾きに沿う四点
スコアではなく検討リスト何から確認するかを、誰かが決めなければならないしきい値の設計を利用側に丸投げする要確認のパスを、機械が読める理由コードつきで返す。宣言した数値・日付には決定的な解釈値も付く
明細行請求書も領収書もテーブルであって、平坦なフィールドではない合計だけ拾って明細行を落とすセルごとの位置を持つ明細行を繰り返し抽出する
エクスポートデータはツールの外に出てこそ役に立つコピペか、囲い込まれたビューアのみAPI経由のCSV(Excel/CJK対応)とJSON
API + Webhook本格的な処理量には、クリックではなく自動化が要るUIのみ、または貧弱な同期エンドポイント非同期ジョブと署名付きWebhookを備えたREST API
監査証跡レビュー担当者は何が変わったかを見たいOCR結果を黙って上書きする元の値を人手の修正と並べて保持する
明朗な料金予算管理に不意打ちは禁物何でも「お問い合わせ」公開された1枚あたりの料金と無料枠

この記事の残りでは、各行を順番に取り上げていきます。

検証可能な精度は、信頼度スコアに勝る

信頼度スコアは、モデルが「自信あり」と感じていることを教えてくれます。しかし、total: 2,045 が領収書に実際に印字された数字かどうかは教えてくれません。space-ocr はもっと厳しい問いに答えます。業務データは data.values に返り、そこへのパス(total、line_items[0].unit_price)がそのまま data.cells の項目を指します。

  • box — 0〜1000に正規化されたグリッド上の軸並行矩形 { xmin, ymin, xmax, ymax }(0,0 = 左上、1000,1000 = 右下)。ピクセルへの換算には、実際に読んだ紙面の寸法を持つ data.image を使います。
  • quad — 書類の傾きに沿う順序付きの4点。box と必ず併せて返ります。傾き補正はしないため、斜めのスマホ写真でも枠は紙面どおりに付きます。
  • verified — 判定です。検討理由が付いたセルは false、照合が走って何も立たなければ true、照合する相手が無ければ(明細行のユニオンボックスなど)null になります。
  • review — null か、確認すべき理由を並べた { reasons } のどちらかです。
  • evidence — 判定の裏付けです。文字照合そのものの結果 text_match、値の文字がどれだけ紙面上で見つかったかを表す match_ratio、その座標で OCR が読んだ生の文字 printed_text が入ります。

確認の作業リストは data.review.flagged です。{ path, reasons } の配列で、path は cells のキーと同じ文法なので該当セルをそのまま引けます。位置情報が値とともに付いてくるため、ボックスを描画したり、座標を引用したり、フラグの立ったフィールドを再確認したりするのに、OCRを再実行する必要がありません。これがOCR監査証跡の土台であり、上のデモがモックアップでない理由でもあります。

✓ Verified

座標は、モデルの言い分をそのまま信じて決めているわけではありません。 言語モデルは各フィールドのテキストと、どの単語トークンを使ったかのヒントを返しますが、ボックスそのものは決して返しません。エンジンはそのテキストを、ビジョンOCRがページ上で実際に検出したシンボルと文字単位で照合します。だからこそボックスは、それらの文字が見つかった実際のピクセルに配置され、各値にはどれだけ照合できたかを示す match_ratio が付与されます。モデルのトークンヒントはノイズを含むことがあり(繰り返し行の間で取り違えることがあります)、そのため鵜呑みにするのではなく、列・行の整合性チェックで検証します。要点は、AIが間違えないということではなく、すべての値が領収書と照合され、どれだけ一致したかを示すスコアが付くということです。

合計だけでなく、明細行まで

安価な領収書OCRで最も大きく欠けているのが、テーブルです。総合計を拾うだけなら誰にでもできます。価値があるのは明細行——商品ごとの数量、単価、値引きです。space-ocr はこれらを繰り返し行として抽出し、各セルがそれぞれの位置を保持するため、折り返しや結合された明細行でも追跡できます。

明細行は、1行を children で記述した type: "array" のフィールドとしてリクエストします。明細行モデルのより詳しい解説は請求書からの明細行抽出をご覧ください。

明細行フィールドの定義
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "fields": [
    { "name": "vendor", "type": "string" },
    { "name": "invoice_date", "type": "string" },
    { "name": "total", "type": "string" },
    {
      "name": "line_items",
      "type": "array",
      "children": [
        { "name": "description", "type": "string" },
        { "name": "quantity", "type": "number" },
        { "name": "unit_price", "type": "number" }
      ]
    }
  ]
}

必要なフィールドだけ宣言する——決まっていなければ autoFields

抽出スキーマは fields 配列で渡します。自社のデータベースに実際に入る項目だけを名前と型で並べ、明細行は1行分を children で記述した type: "array" として宣言します。どんな項目が載っているか分からない段階では、代わりに autoFields: true を送ればモデルがスキーマを提案します——返ってきた名前をそのまま固定の宣言に移せば、本番用の呼び出しになります。

宣言は精度の調整つまみではありません。required・pattern・min/max・enum・near・not_near はいずれもモデルには渡らないため、抽出される値は宣言してもしなくても同じです。増えるのは二つです。規則を破った値が理由(missing・pattern_mismatch・out_of_range・near_mismatch・near_conflict)とともに data.review.flagged に載ること、そして number・integer・date を宣言すると values の隣に data.normalized が並ぶことです——同じ読みを決定的に解釈した層なので、同じ紙面なら毎回同じ数値になります。near・not_near は、会社名が2社印字された帳票で正しい方を選ばせる機能ではありません。選び間違いを見えるようにする手立てです。

呼び出しはHTTPリクエスト1回だけ——SDKもPDFの前処理も不要です(エンジンが読むのはラスター画像、つまり写真やスキャンです)。

フィールド宣言と autoFields
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# A. 本番——自社が保存する項目だけを宣言する
curl -s https://api.space-ocr.com/ocr/fields \
  -H "Authorization: Bearer $SPACE_OCR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://example.com/invoice.jpg",
    "imageType": "url",
    "fields": [
      { "name": "issuer",         "type": "string", "near": ["登録番号", "TEL"] },
      { "name": "recipient",      "type": "string", "not_near": ["登録番号", "TEL"] },
      { "name": "invoice_no",     "type": "string", "required": true,
        "pattern": "^[A-Z0-9-]{4,}$" },
      { "name": "invoice_date",   "type": "date" },
      { "name": "payment_method", "type": "string", "enum": ["現金", "振込", "クレジット"] },
      { "name": "total",          "type": "number", "required": true, "min": 0 },
      {
        "name": "line_items",
        "type": "array",
        "children": [
          { "name": "description", "type": "string" },
          { "name": "quantity",    "type": "number" },
          { "name": "unit_price",  "type": "number" }
        ]
      }
    ]
  }'

# B. 探索——スキーマ未定なら提案させる
curl -s https://api.space-ocr.com/ocr/fields \
  -H "Authorization: Bearer $SPACE_OCR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://example.com/invoice.jpg",
    "imageType": "url",
    "autoFields": true
  }'

エクスポートとAPI:データの行き先

抽出も、データがツールに閉じ込められたままでは無価値です。space-ocr はきれいな出口を2つ用意しています。

  • CSV — シートはUTF-8 BOM付きでエクスポートされるため、Excelが日本語・韓国語・中国語のテキストを正しく開きます。配列(明細行)の行はサブ行に展開され、手作業による修正があれば出力ではOCRの値を上書きします。
  • REST経由のJSON — 1件の書類には POST /ocr/fields、画像をそのままシートに投入するには POST /upload、保存済みシートをサーバー側で(where、sort、select、limit で)クエリするには GET /view を使います。OCRを再実行する必要も、再度課金されることもありません。

大量処理の自動化では、/upload はデフォルトで非同期です。ファイルごとにジョブを返し、完了時に Webhook で通知します——スペースごとに1つの署名付き(HMAC-SHA256)エンドポイントで、ocr.completed や ocr.failed といったイベントが届きます。これが、クリックして使うツールと、自分で回るパイプラインの違いです。全体像は請求書データ抽出APIガイドとAPIドキュメントにあります。

領収書や請求書をドロップすると、構造化されたフィールドが返ってきます——それぞれが元画像の上に位置付けられています。

監査証跡:機械が読んだ値 vs. 人が変えた値

最良の領収書・請求書OCRは、自分の出力を記録するだけでなく、修正も記録します。space-ocr でセルを編集すると、あなたの値は元のOCRの値とは別に保存され、元の値のツールチップがエンジンの最初の読み取り結果を常に表示します。レビュー担当者は機械の値と人手の上書きを並べて確認できます——これこそ監査が求めるものです。

どのセルをクリックしても、対応する領域が元画像上で光ります——バッチを抜き取りチェックする最速の方法です。

明朗で予測できる料金

検証可能な精度と誠実な料金は、たいてい同じ姿勢から生まれます。space-ocr は1枚あたり¥10です。クレジットカード不要、月100クレジットの無料枠があり、月額¥8,980のProプランには1,100クレジット、シート数無制限、100GBのストレージが含まれます。フィールド単位の課金もページ単位の追加料金もなく、保存済みシートへのクエリ(GET /view)は無料です。

領収書・請求書を抽出する手順

  1. 画像を送信する
    領収書または請求書を、imageType を「url」または「base64」にして /ocr/fields へPOSTします。エンジンが読むのはラスター画像——スマホ写真やスキャンです。
  2. フィールドを宣言する
    保存したい項目を fields 配列で宣言します。明細行は1行分を children で記述した array フィールドにします。スキーマが固まっていなければ、代わりに autoFields を送って提案させます。
  3. 構造化された結果を読む
    業務データは data.values に、各値の box・quad・verified・review・evidence は data.cells[path] に返ります。座標の基準となる紙面の寸法は data.image にあります。
  4. 検証して修正する
    data.review.flagged を順に処理します。各項目がパスと理由(text_mismatch、missing、out_of_range など)を示します。セルをクリックすれば、それが読み取られた正確な領域がハイライトされ、編集内容は元の値の隣に保存されます。
  5. エクスポートまたはクエリする
    CSV(UTF-8 BOM、明細行は展開済み)をダウンロードするか、保存済みシートを GET /view で where、sort、select を使ってクエリします——OCRの再実行も追加料金もありません。
領収書・請求書に最適なOCRソフトはどれですか?
最良のツールは、テキストを読むだけにとどまりません——明細行を抽出し、きれいなCSVとJSONでエクスポートし、Webhookを備えたREST APIを公開し、修正の監査証跡を保持し、料金を明朗に提示します。space-ocr はそこに検証可能な精度を加えます。すべての値が data.cells[path] に出典座標を伴って返り、data.review.flagged が要確認のパスを理由つきで並べるため、どの数字もそれが読み取られたピクセルまで遡れます。必要なフィールドはご自身で宣言でき、決まっていなければ autoFields でスキーマを提案させることもできます。月100クレジットの無料枠から始められます。
OCRは領収書や請求書から、合計だけでなく明細行も抽出できますか?
できます。space-ocr では、明細行を `type: "array"` のフィールドとしてリクエストし、その children で1行(説明、数量、単価など)を記述します。各セルは line_items[0].unit_price のような添字付きパスで data.cells に載るため、折り返しや結合された明細行でも、ページ上の位置まで追跡できます。
領収書・請求書OCRはスマホ写真でも動きますか?
動きます。エンジンは読み込み時にEXIF回転を適用するため、返される座標は実際に読んだ紙面と一致します。軸並行のボックスに加えて、書類の傾きに沿う順序付きの4点(quad)も返ります。傾き補正はしないので、傾いたり回転したりしたスマホ写真でも枠は紙面どおりに付きます。入力はラスター画像——写真やスキャンです。
領収書・請求書OCRの料金はいくらですか?
space-ocr は1枚あたり¥10です。クレジットカード不要・月100クレジットの無料枠があり、月額¥8,980のProプランには1,100クレジット、シート数無制限、100GBのストレージが含まれます。保存済みデータを GET /view でクエリするのは無料で、フィールド単位やページ単位の追加料金もありません。
大量の領収書・請求書処理を自動化できますか?
できます。POST /upload は画像をそのままシートに投入し、デフォルトで非同期に動作します。ファイルごとにジョブを返し、完了時に ocr.completed や ocr.failed といった署名付き(HMAC-SHA256)Webhookで通知します。Webhookの代わりに GET /jobs/{jobId} をポーリングすることも可能です。

あなた自身の領収書・請求書で、最高のOCRを試す

無料枠——月100クレジット、クレジットカード不要。すべての値が、ページ上の位置とともに返ってきます。

関連