監査証跡つきのドキュメントOCR
ほとんどのOCRは、信じるしかないテキストを返すだけ。space-ocr は、抽出したすべての値を、検証済みのページ上の位置情報——バウンディングボックス、頂点、マッチ率——とともに返すので、どのフィールドも、その値が読み取られたピクセルまでさかのぼってたどれます。
ドキュメントからデータを抽出するのは、デモで見せるのは簡単でも、信用するのは難しいものです。モデルが請求書を読み取り、total: 2,045 と返してきても、どんな信頼度スコアでも本当には答えてくれない疑問が残ります。それはページに実際に印字されている数字なのか、それともモデルが生成したものなのか? その場限りの照会ならそれで構いません。しかし、経理、保険金支払、コンプライアンス、あるいは監査の対象になりうる業務では、「モデルを信じる」というのは管理体制とは言えません。
監査証跡がこれを解決します。むき出しの値ではなく、すべてのフィールドがページ上の検証済みの位置情報とともに返ってくる——だから人(あるいは別のシステム)が、値を読み取った正確なピクセルへ一足飛びに移動して、それを確認できます。これが、単なる答えと、根拠を示して説明できる答えとの違いです。
実際に見てみる:どの値も元の位置にさかのぼれる
下のフィールドにカーソルを合わせてみてください。レシート上のボックスが、その値を読み取った場所です——そして各フィールドはそれぞれのマッチ率を持っています。

Each value with a box carries a verified on-page location — bbox + 4-point vertices + 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.
「検証済みの位置情報」とは具体的に何か
space-ocr は、抽出したすべての値とともに次の3つを返します。
bbox—{ xmin, ymin, xmax, ymax }で表される軸に沿った矩形。0–1000 normalized のグリッド上で表現され(0,0 = 左上、1000,1000 = 右下)、画像のピクセルサイズに依存しません。vertices— 順序づけられた4つの点{x, y}(左上 → 右上 → 右下 → 左下)で構成される傾きに沿ったボックス。ドキュメントの傾きに追従するので、回転したスマホ写真でもきれいに囲めます。match_ratio— その値の文字のうち、実際にページ上で位置を特定できた割合(0–1)。0.85 以上で確信を持ってマッチしたとみなされ、1.0ならすべての文字が見つかったことを意味します。
位置情報が値と一緒に付いてくるので、結果はブラックボックスではありません。ボックスを描画したり、座標を引用したり、フラグの立ったフィールドをOCRを再実行せずに再確認したりできます。
座標はモデルの言い分を鵜呑みにしたものではありません。 言語モデルが返すのは各値のテキスト——そしてどの単語トークンを使ったかのヒント——だけで、ボックスそのものは決して返しません。エンジンはそのうえで、そのテキストを、ビジョンOCRがページ上で実際に検出したシンボルと文字単位で照合します。だからボックスは、それらの文字が見つかった本物のピクセルに着地し、各値にはマッチ率——その文字のうち実際に位置を特定できた割合——が付きます。モデルのトークンヒントはノイズを含みうる(繰り返し行のあいだで取り違えることもある)ため、列・行の一貫性チェックによって、鵜呑みにせず検証されます。要点は、AIが間違えないということではなく、すべての値がページと照合され、どれだけよく一致したかを示すスコアが付くということです。
値をクリックすれば、そのピクセルにたどり着く
アプリ上では、これがインタラクションになります。任意のセルをクリックすると、元画像上でその値が読み取られた正確なボックスがハイライトされ、拡大したクロップと接続線が表示されます。バッチをざっと検査するのにこれ以上速い方法はありません——ドキュメント全体を見渡すのではなく、視線がそのまま該当箇所に向かいます。
修正もまた監査可能
監査証跡は、機械の出力だけの話ではありません——人が何を変更したかも含みます。セルを編集すると、space-ocr はあなたの修正を元のOCR値とは別に保存します。Original ツールチップが、エンジンが最初に読み取った内容を常に示すので、レビュアーは機械の値と人による上書きの両方を並べて確認できます。
APIにも、すべての値に備わっている
これはUIだけの機能ではありません。POST /ocr/fields は、抽出したすべての値に同じ bbox、vertices、match_ratio、bbox_source を返し、field_bboxes マップがフィールドごとの座標を提供します。GET /view で保存済みのシートを照会すると、ボックスはデフォルトで一緒に付いてきます——ペイロードを軽くしたいときだけ boxes=0 を追加してください。
{
"status": "success",
"data": {
"total": "2,045",
"field_bboxes": {
"total": {
"bbox": { "xmin": 595, "ymin": 974, "xmax": 781, "ymax": 1000 },
"vertices": [
{ "x": 594, "y": 975 }, { "x": 781, "y": 972 },
{ "x": 781, "y": 998 }, { "x": 595, "y": 1000 }
],
"match_ratio": 0.93,
"bbox_source": "vision_symbol_match"
}
}
}
}bbox_source は、各座標がどのように導き出されたかを教えてくれます——vision_symbol_match は通常の文字照合パス(本物の match_ratio を伴います)、token_id は単語トークンのヒントが使われたことを意味し、low_confidence は確認したほうがよい弱いマッチにフラグを立てます。ログに残したり、フィルタリングしたり、レビュアーに提示したりできるメタデータです。
実際に値を検証する手順
- 抽出結果を開くシートを開くか GET /view を呼び出します——各値は bbox、vertices、match_ratio を持っています。
- 値をクリックするセルをクリックすると、その値が読み取られた元画像上の正確な領域がハイライトされます。
- マッチ率を確認するmatch_ratio が 1.0 ならすべての文字の位置が特定できたことを意味し、0.85 未満なら詳しく確認したほうがよい値としてフラグが立ちます。
- 必要なら修正するセルを編集して上書きします——元のOCR値は監査証跡のために Original ツールチップの下に保持されます。