OCRZero

Xiaomi-OCR-0 API リファレンス

API キーのページでキーを作成し、Authorization ヘッダーに Bearer トークンとして付けて送信します。 API キー

POST /api/v1/ocr

  • mode: page (画像 1 枚を Markdown に), pdf (PDF の各ページを Markdown に、最大 20 ページ), kie (項目を JSON に), vqa (質問に短く回答).
  • file: base64 の data URL:PNG・JPEG・WebP は最大 10 MB、pdf モードの PDF は最大 25 MB。
  • fields: kie 用の項目名リスト(任意)。
  • question: vqa では必須。

課金

1 クレジット = 1 ページ。PDF は 1 ページにつき 1 クレジット、画像はページ OCR・項目抽出・質問のいずれも 1 クレジットです。失敗したページは同じレスポンスで返却され、credits.refunded と X-OCRZero-Credits-Refunded ヘッダーに表示されます。 料金を見る

cURL

curl --fail-with-body https://ocrzero.com/api/v1/ocr \
  -H "Authorization: Bearer $OCRZERO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode":"page","file":"data:image/png;base64,'"$(base64 < page.png | tr -d '\n')"'"}'

Python:請求書の項目を JSON に

import base64, os, requests

with open("invoice.jpg", "rb") as f:
    data = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()

r = requests.post("https://ocrzero.com/api/v1/ocr",
    headers={"Authorization": f"Bearer {os.environ['OCRZERO_API_KEY']}"},
    json={"mode": "kie", "file": data, "fields": ["invoice_number", "total_amount"]})
r.raise_for_status()
print(r.json()["json"])

Python:PDF を Markdown に

import base64, os, requests

with open("report.pdf", "rb") as f:
    data = "data:application/pdf;base64," + base64.b64encode(f.read()).decode()

r = requests.post("https://ocrzero.com/api/v1/ocr",
    headers={"Authorization": f"Bearer {os.environ['OCRZERO_API_KEY']}"},
    json={"mode": "pdf", "file": data}, timeout=600)
r.raise_for_status()
body = r.json()
print(body["credits"], body["failedPages"])
open("report.md", "w").write(body["markdown"])

レスポンス

{
  "object": "ocr.result",
  "model": "xiaomi-ocr-0",
  "id": "4b7c…",
  "mode": "pdf",
  "markdown": "<!-- page 1 -->\n\n# Annual report …",
  "pages": 12,
  "totalPages": 12,
  "failedPages": [],
  "credits": { "charged": 12, "refunded": 0 },
  "usage": { "prompt_tokens": 25824, "completion_tokens": 9310, "total_tokens": 35134 },
  "latency_ms": 18450
}

表は Markdown 内の HTML、数式は LaTeX で返り、公式の Xiaomi-OCR-0 後処理で変換されます。

エラー

  • 401 API キーがないか無効です。
  • 402 リクエストのページ数に対してクレジットが不足しています。
  • 413 ファイルが大きすぎます。 422 リクエストが無効か、ファイルを読み込めません。
  • 429 レート制限中です。 502/503 モデルサーバーが利用できません。クレジットは返却されます。

Xiaomi-OCR-0 は Apache-2.0 のオープンソースです。OCRZero は独立したサービスで、Xiaomi とは提携していません。