Aller au contenu principal

L'API OCR de Mistral

L’endpoint OCR

L’API OCR de Mistral est accessible via l’endpoint /v1/ocr ou via le SDK Python avec client.ocr.process(). C’est le point d’entrée unique pour toutes les opérations d’extraction documentaire.

Installation et configuration

Commencez par installer le SDK Mistral :

pip install mistralai

Configurez votre client avec votre clé API :

from mistralai import Mistral

client = Mistral(api_key="votre-cle-api")

Vous pouvez également définir la clé via une variable d’environnement :

export MISTRAL_API_KEY="votre-cle-api"
import os
from mistralai import Mistral

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

Paramètres de l’appel OCR

Voici les paramètres disponibles pour client.ocr.process() :

Paramètres obligatoires

  • model : toujours "mistral-ocr-latest"
  • document : le document à traiter (URL, base64 ou fichier uploadé)

Paramètres optionnels

  • table_format : format des tableaux (null, "markdown", "html")
  • include_image_base64 : True pour recevoir les images en base64
  • bbox_annotation_format : schéma d’annotation des bounding boxes
  • document_annotation_format : schéma d’annotation du document entier
  • document_annotation_prompt : instructions haut niveau pour l’annotation

Trois méthodes d’envoi de documents

1. URL publique

La méthode la plus simple pour les documents accessibles en ligne :

ocr_response = client.ocr.process(
    model="mistral-ocr-latest",
    document={
        "type": "document_url",
        "document_url": "https://exemple.com/document.pdf"
    }
)

2. Encodage base64

Pour les documents locaux, encodez-les en base64 :

import base64

with open("mon_document.pdf", "rb") as f:
    document_base64 = base64.b64encode(f.read()).decode("utf-8")

ocr_response = client.ocr.process(
    model="mistral-ocr-latest",
    document={
        "type": "document_base64",
        "document_base64": document_base64
    }
)

3. Upload via l’API Files

Pour les documents volumineux ou réutilisés :

# Upload du fichier
uploaded_file = client.files.upload(
    file=open("mon_document.pdf", "rb"),
    purpose="ocr"
)

# Utilisation du fichier uploadé
ocr_response = client.ocr.process(
    model="mistral-ocr-latest",
    document={
        "type": "file_id",
        "file_id": uploaded_file.id
    }
)

Structure de la réponse

La réponse contient une liste de pages, chacune avec :

for page in ocr_response.pages:
    print(f"Page {page.index}")
    print(f"Contenu : {page.markdown[:200]}...")
    print(f"Images : {len(page.images)} trouvée(s)")
    print(f"En-tête : {page.header}")
    print(f"Pied de page : {page.footer}")
    print(f"Dimensions : {page.dimensions}")

Limites de l’API

Gardez en tête les contraintes suivantes :

  • Taille maximale : 50 Mo par fichier
  • Pages maximales : 1 000 pages par document
  • Formats acceptés : PDF, PNG, JPEG, AVIF, PPTX, DOCX
  • Rate limiting : dépend de votre tier d’abonnement

Gestion des erreurs

Pensez à gérer les erreurs courantes :

from mistralai import Mistral
from mistralai.exceptions import MistralAPIError

client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

try:
    ocr_response = client.ocr.process(
        model="mistral-ocr-latest",
        document={
            "type": "document_url",
            "document_url": "https://exemple.com/document.pdf"
        }
    )
except MistralAPIError as e:
    print(f"Erreur API : {e.status_code} - {e.message}")
except Exception as e:
    print(f"Erreur inattendue : {e}")

Points clés à retenir

  • L’endpoint OCR est client.ocr.process() avec le modèle mistral-ocr-latest
  • Trois méthodes d’envoi : URL publique, base64, fichier uploadé
  • Les paramètres optionnels contrôlent le format des tableaux et l’inclusion des images
  • La réponse est structurée page par page avec Markdown, images et métadonnées
  • Respectez les limites de 50 Mo et 1 000 pages par document