OCR : extraction de texte
Lire le texte dans les images
L’OCR (Optical Character Recognition) est l’un des cas d’usage les plus puissants de la vision Grok. Contrairement aux outils OCR traditionnels qui se contentent d’extraire des caractères, Grok comprend le contexte du texte dans l’image, sa mise en page et sa signification.
OCR classique vs OCR multimodal
Les outils OCR traditionnels (Tesseract, Google Vision OCR, AWS Textract) excellent dans l’extraction brute de caractères. Grok apporte une dimension supplémentaire : il comprend ce que le texte signifie dans le contexte de l’image.
Par exemple, face à une facture scannée, un OCR classique extraira tous les caractères. Grok peut en plus :
- Identifier les champs (numéro de facture, date, montant total)
- Structurer les données dans un format exploitable
- Corriger les erreurs d’OCR grâce au contexte
- Interpréter les tableaux et les mises en page complexes
Extraction basique
Pour une extraction simple du texte visible :
response = client.responses.create(
model="grok-4",
input=[
{
"type": "input_image",
"image_url": url_document,
"detail": "high" # Important pour l'OCR
},
{
"type": "input_text",
"text": "Extrais tout le texte visible dans cette image. Conserve la mise en page autant que possible."
}
],
store=False
)
Le paramètre detail: "high" est essentiel pour l’OCR. En mode low, le modèle peut manquer du texte fin ou mal lire certains caractères.
Extraction structurée de documents
Pour les documents professionnels, demandez une extraction structurée :
def extraire_facture(image_url):
prompt = """Cette image est une facture. Extrais les informations
suivantes en JSON :
- "numero_facture": le numéro de facture
- "date": la date d'émission
- "emetteur": nom et adresse de l'émetteur
- "destinataire": nom et adresse du destinataire
- "lignes": tableau avec colonnes [description, quantite, prix_unitaire, total]
- "sous_total": montant HT
- "tva": montant de la TVA
- "total_ttc": montant TTC
Si un champ n'est pas visible, indique null."""
response = client.responses.create(
model="grok-4",
input=[
{"type": "input_image", "image_url": image_url, "detail": "high"},
{"type": "input_text", "text": prompt}
],
store=False
)
return response.output_text
Extraction de cartes de visite
def extraire_carte_visite(image_url):
prompt = """Extrais les informations de cette carte de visite en JSON :
- "nom": nom complet
- "titre": titre/fonction
- "entreprise": nom de l'entreprise
- "email": adresse email
- "telephone": numéro(s) de téléphone
- "adresse": adresse postale
- "site_web": URL du site web
- "reseaux_sociaux": liens vers les réseaux sociaux"""
response = client.responses.create(
model="grok-4",
input=[
{"type": "input_image", "image_url": image_url, "detail": "high"},
{"type": "input_text", "text": prompt}
],
store=False
)
return response.output_text
Traitement de captures d’écran
Les captures d’écran sont un excellent cas d’usage car elles contiennent souvent du texte dans des mises en page complexes (menus, barres latérales, popups) :
def analyser_screenshot(image_url):
prompt = """Analyse cette capture d'écran et identifie :
1. L'application ou le site web affiché
2. La page ou section visible
3. Les éléments d'interface principaux (boutons, menus, formulaires)
4. Tout texte important affiché
5. Les éventuels messages d'erreur ou notifications"""
response = client.responses.create(
model="grok-4",
input=[
{"type": "input_image", "image_url": image_url, "detail": "high"},
{"type": "input_text", "text": prompt}
],
store=False
)
return response.output_text
Traitement par lots de documents
Pour traiter un volume important de documents, combinez l’OCR Grok avec un pipeline de traitement :
import json
async def pipeline_ocr(documents):
resultats = []
for doc in documents:
# 1. Valider l'image
if not valider_image(doc["chemin"]):
resultats.append({"fichier": doc["chemin"], "erreur": "Image invalide"})
continue
# 2. Encoder en base64
image_url = encoder_base64(doc["chemin"])
# 3. Extraire avec Grok
response = client.responses.create(
model="grok-4",
input=[
{"type": "input_image", "image_url": image_url, "detail": "high"},
{"type": "input_text", "text": doc["prompt"]}
],
store=False
)
# 4. Parser le résultat
try:
data = json.loads(response.output_text)
resultats.append({"fichier": doc["chemin"], "data": data})
except json.JSONDecodeError:
resultats.append({"fichier": doc["chemin"], "texte_brut": response.output_text})
return resultats
Limites de l’OCR Grok
- Texte manuscrit : la reconnaissance est correcte pour une écriture lisible, mais peut échouer sur des écritures cursives ou illisibles
- Langues non latines : la précision varie selon la langue et la police utilisée
- Images de faible qualité : les scans basse résolution ou les photos floues dégradent les résultats
- Texte très petit : même en mode
high, le texte de moins de 8 pixels de haut peut être mal lu
Points clés à retenir
- Utilisez toujours
detail: "high"pour les tâches d’OCR - Demandez une extraction structurée (JSON) pour exploiter les données automatiquement
- Grok va au-delà de l’OCR brut : il comprend le contexte et la mise en page
- Utilisez
store: falsepour les documents sensibles (factures, cartes de visite) - Validez et prétraitez les images pour maximiser la qualité d’extraction