OCRZero

Référence de l’API Xiaomi-OCR-0

Créez une clé sur la page des clés API et envoyez-la comme jeton Bearer dans l’en-tête Authorization. Clés API

POST /api/v1/ocr

  • mode: page (une image en Markdown), pdf (chaque page du PDF en Markdown, 20 pages max.), kie (champs en JSON), vqa (question vers réponse courte).
  • file: data URL en base64 : PNG, JPEG ou WebP jusqu’à 10 Mo ; PDF jusqu’à 25 Mo en mode pdf.
  • fields: liste facultative de noms de champs pour kie.
  • question: obligatoire pour vqa.

Facturation

1 crédit = 1 page. Un PDF utilise 1 crédit par page ; une image utilise 1 crédit pour l’OCR de page, l’extraction de champs ou une question. Les pages en échec sont remboursées dans la même réponse, indiquées dans credits.refunded et l’en-tête X-OCRZero-Credits-Refunded. Voir les tarifs

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 : champs de facture en 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 en 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"])

Réponse

{
  "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
}

Les tableaux sont renvoyés en HTML dans le Markdown et les formules en LaTeX, convertis avec le post-traitement officiel de Xiaomi-OCR-0.

Erreurs

  • 401 clé API manquante ou invalide.
  • 402 crédits insuffisants pour les pages de la requête.
  • 413 fichier trop volumineux ; 422 requête invalide ou fichier illisible.
  • 429 limite de débit atteinte ; 502/503 serveur du modèle indisponible. Les crédits sont rendus.

Xiaomi-OCR-0 est open source sous licence Apache-2.0. OCRZero est indépendant et non affilié à Xiaomi.