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

鵜呑みにしなくていいAI OCR

space-ocr はモデルで書類を構造化し、各値をページ上で OCR が検出した文字と照合します。data.cells[path] に box・quad・verified・review が入り、確認すべき項目は data.review.flagged に並びます。

AI OCR は、散らかった書類への答えのように聞こえます。領収書や請求書をモデルに渡せば、きれいな構造化フィールドが返ってくる、と。問題は、モデルが間違ったときに何が起きるかです。言語モデルは、実際にページから読み取ったかどうかにかかわらず、自信ありげに整った値を返します。そしてほとんどのツールは、その違いを見分ける手段を渡さないまま値を渡してきます。

space-ocr は役割を分けます。構造化はマルチモーダルモデルが担いますが、モデルは座標を作りません。座標の出所は、ページを読む OCR パスだけです。抽出された値は、その OCR が検出した文字と一字ずつ突き合わされます。返るデータも同じように分かれています。業務データは宣言したスキーマのまま data.values に、同じパスの box・quad・判定 verified・review の理由・裏づけの evidence は data.cells[path] に入ります。内部でどの OCR やモデルの実装が動くかは変わりうる実装の詳細で、固定しているのはレスポンスの構造です。

AI の出力を、検証済みで見る

下のフィールドにマウスを合わせてみてください——領収書上のボックスは、その値がページ上で実際に見つかった場所であって、モデルが主張した場所ではありません。ここにある値・ボックス・検証表示はすべて、実際の解析結果から読み込んだもので、モックアップではありません。

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.

3 つの形、同じ契約
同じ 1 ページを、宣言したフィールドとして(`POST /ocr/fields`)、レイアウトを保った Markdown として(`POST /ocr/markdown`)、読み順を整えたプレーンテキストとして(`POST /ocr/text`)受け取れます。どれも `data.values`・`data.cells`・`data.review`・`data.image` という同じ封筒で返るので、確認画面は一つで足ります。Markdown は要素を既定で含み、`/ocr/text` でブロック単位の cells を得るには `includeBlocks: true` を指定します。
座標はモデルが作らない
値はモデルが返し、座標は OCR パスとその文字照合が作ります。どの機構がボックスを決めたかは `evidence.source` に残り、`/ocr/fields` では `evidence.printed_text` がその座標に印字されていた文字をそのまま返すので、値との突合をご自身で行えます。
すべての値をパスで参照
`data.cells` のキー(`total`、`items[0].amount` など)は `data.review.flagged` と同じパス文法です。`box` は 0〜1000 正規化グリッド上の軸平行矩形、`quad` はページの傾きに沿う 4 点で、ピクセル換算の基準面は `data.image` の幅と高さです。
フィールドを宣言、またはモデルに提案させる
`name`・`type`・`children` を持つ `fields` を渡すか、`autoFields` を立ててモデルに構造を提案させます。`required`・`pattern`・`min`/`max`・`enum`・`near` といった宣言はモデルには渡らず、抽出後に照合されます。違反しても値は書き換わらず、`review` の理由として現れます。スカラー型を宣言すると、決定論的に解析した値が `data.normalized` の別レイヤーに付きます。
監査証跡:元の値と編集後
抽出はモデルを通るため、実行ごとに完全に同じとは限りません。記録として残す価値があるのはレスポンス JSON です。アプリでセルを直すと、その編集は元の OCR 値を上書きせず隣に保存されるので、モデルが何を読み、人が何を直したかが両方残ります。
明細行は行ごとに照合
`array` フィールドでは行ごとにパスが振られ(`items[0].amount`)、行そのものにも統合ボックスが付きます。同じ値が並ぶ列はモデルのトークンヒントが最も当てにならない場所なので、エンジンは列と行の整合に寄せ、`ambiguous_occurrence` のような理由を立てます。
言語設定なし
日本語・韓国語・中国語・英語を一つのエンジンで、混在も含めて扱います。公開 API に言語パラメータはなく、書類ごとの設定も必要ありません。

space-ocr での AI OCR の仕組み

POST /ocr/fields に画像を送ります(imageType は url か base64)。まず OCR パスがページを読み、これが座標の唯一の出所です。マルチモーダルモデルは宣言したスキーマに沿って書類を読み、値だけを返します。その値を検出済みの文字と一字ずつ照合した結果が、data.cells[path] の box・quad・evidence になります。

verified は文字スコアではなく判定です。理由の種類を問わず review が立てば false、照合が走って何も立たなければ true、照合する対象がなければ null になります。文字の一致そのものは evidence.text_match にあります。そのため verified: false と text_match: true が同時に立つのは矛盾ではなく、「文字は合っていたが、宣言した規則が捕まえた」という正常な組み合わせです。

こうして黙って通り過ぎる不一致が表に出ますが、すべての誤りを捕まえると約束するものではありません。モデルと OCR パスは独立していても、同じ誤読で一致することはあり得ます。座標は値の出所を示す証拠であって、値が正しいことの証明ではないので、業務側の検算は残してください。

スキーマを書く必要はありません。fields を宣言するか、autoFields を立ててモデルに構造を提案させます。Web アプリは PDF をページごとに画像化してから読み、公開 API はラスター画像を直接受け取ります。

フィールドを宣言する——値は位置と検証つきで返る
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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/receipt.jpg",
    "imageType": "url",
    "fields": [
      { "name": "store_name", "type": "string", "required": true },
      { "name": "date", "type": "date", "required": true },
      { "name": "total", "type": "number", "required": true, "min": 0 },
      {
        "name": "items",
        "type": "array",
        "children": [
          { "name": "name", "type": "string" },
          { "name": "amount", "type": "number" }
        ]
      }
    ]
  }'

検証できるAI OCRを動かす手順

  1. 書類を送る
    画像を /ocr/fields に送ります(imageType は url か base64)。アプリでは PDF をドロップでき、各ページが先に画像化されます。公開 API はラスター画像を受け取ります。
  2. スキーマを宣言する
    name・type・children を持つ fields を渡すか、autoFields を立ててモデルに構造を提案させます。規則が要る箇所には required・pattern・min・max・enum・near を添えます。
  3. 検証済みの結果を読む
    業務データは data.values、box・quad・verified・review・evidence は data.cells[path]、宣言したスカラー型の解析値は data.normalized、ピクセル換算の基準面は data.image にあります。
  4. 確認キューを処理する
    data.review.flagged を回し、reasons[0] を代表理由として扱い、そのセルの box または quad をページに重ねて、値の出所を確認できるようにします。
  5. 保存して照会する
    POST /create と POST /upload で結果をシートに残し、GET /view の where・sort・select・limit で読み返します。この読み出しは課金されず、OCR も再実行されません。

シンプルで予測できる料金

1 クレジット = 1 ページ処理 = ¥10(税込)。毎月 100 クレジットは無料で、カード登録は不要です。失敗時は課金なし。保存済みデータの読み出し(GET /space・GET /view・GET /jobs)は無料です。定額プランは月間クレジット数・シート数・ストレージを追加します。

Free
¥0
  • 100 クレジット/月
  • 3 シート
  • 1 GB ストレージ
無料 — カード不要
Starter
¥3,980/月
  • 500 クレジット/月
  • 15 シート
  • 10 GB ストレージ
無料で始める
おすすめ
Pro
¥8,980/月
  • 1,100 クレジット/月
  • シート無制限
  • 100 GB ストレージ
無料で始める
JSONを返すだけのモデルと、このAI OCRは何が違いますか?
構造化はモデルがしますが、最終判断はさせません。業務データは data.values に返り、data.cells[path] にはその値が見つかった box と quad、判定 verified、review の理由、裏づけの evidence が入ります。人が見るべきパスは data.review.flagged に並ぶので、モデルの出力をそのまま受け取るのではなく確認できます。
座標はAIが返すのですか?
いいえ。モデルが返すのは値だけです。座標は、ページを読む OCR パスと、その検出文字に対する一字ずつの照合から生まれます。どの機構がボックスを決めたかは evidence.source に残り、/ocr/fields では evidence.printed_text がその座標に印字されていた文字を返します。
ある値を信じてよいか、どう判断しますか?
固定のスコアではなく data.review.flagged を読みます。各項目には path と、代表が先頭に来る reasons 配列があり、確認件数は flagged.length そのものです。そのパスで data.cells[path] を開けば、判定・座標・evidence が確認できます。evidence.match_ratio は文字の被覆率を示す裏づけであって、合否を決める基準ではありません。
AIにフィールドを提案させられますか?
はい。autoFields を立てるとモデルが書類のスキーマを提案します。自分で fields を宣言することもでき、明細行には children を持つ array フィールドを使います。required・pattern・min・max・enum・near といった宣言はモデルには渡らず抽出後に照合されるので、抽出値を変えるのではなく review の理由と座標のアンカーを増やします。
AIの出力を直すと、元の値はどうなりますか?
アプリでの編集は、元の OCR 値を上書きせずその隣に保存されるので、モデルの読み取りと人の修正が両方記録に残ります。抽出はモデルを通るため実行ごとに同じとは限らず、監査のために残す価値があるのはレスポンス JSON です。決定論的なのは座標の照合と normalized の解析です。
料金はいくらですか?
1 クレジット = 1 ページ処理 = ¥10(税込)で、毎月 100 クレジットの無料枠があり、カード登録は不要です。失敗時は課金されません。GET /space・GET /view・GET /jobs での読み出しは無料です。定額プラン(Starter と Pro)は月間クレジット数・シート数・ストレージを追加します——上の料金表をご覧ください。

AIを書類に使う、でも盲信しない

無料枠——月 100 クレジット、クレジットカード不要。すべての値が、座標と検証判定、そしてその裏づけとともに返ります。

関連