Aller au contenu principal

Vision : analyser des images avec Grok

La comprehension d’images avec Chat Completions

Les modeles Grok (a partir de grok-4) integrent des capacites de vision qui permettent d’analyser, decrire et raisonner sur des images. Cette fonctionnalite s’utilise via le format tableau du champ content, en combinant des objets text et image_url.

Les cas d’usage sont nombreux : extraction de texte depuis des documents scannes (OCR), analyse de graphiques, description d’interfaces utilisateur, comparaison visuelle, ou encore interpretation de schemas techniques.

Envoyer une image via URL

La maniere la plus simple est de fournir l’URL publique de l’image :

from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("XAI_API_KEY"),
    base_url="https://api.x.ai/v1"
)

response = client.chat.completions.create(
    model="grok-4.20-reasoning",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Decris ce que tu vois sur cette image."},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://example.com/photo-architecture.jpg",
                        "detail": "high"
                    }
                }
            ]
        }
    ]
)

print(response.choices[0].message.content)

L’image est telechargee par les serveurs xAI au moment de la requete. Elle doit etre accessible publiquement.

Envoyer une image en base64

Pour les images locales ou privees, utilisez l’encodage base64 :

import base64

def encode_image(image_path: str) -> str:
    with open(image_path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")

image_data = encode_image("capture-ecran.png")

response = client.chat.completions.create(
    model="grok-4.20-reasoning",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Quel est le texte visible sur cette capture ?"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/png;base64,{image_data}"
                    }
                }
            ]
        }
    ]
)

Le format de l’URL est data:image/{format};base64,{donnees} ou {format} est jpeg, jpg ou png.

Niveaux de detail : auto, low et high

Le parametre detail controle la resolution a laquelle le modele analyse l’image :

detail: “low”

{
  "type": "image_url",
  "image_url": {
    "url": "https://example.com/icone.png",
    "detail": "low"
  }
}

L’image est reduite a une resolution basse avant l’analyse. C’est le mode le plus rapide et le moins couteux en tokens. Utilisez-le pour des images simples : icones, logos, schemas basiques.

detail: “high”

{
  "type": "image_url",
  "image_url": {
    "url": "https://example.com/document-scan.jpg",
    "detail": "high"
  }
}

L’image est analysee a haute resolution. Le modele peut lire du texte petit, identifier des details fins et analyser des zones specifiques. C’est le mode recommande pour les documents, les captures d’ecran et les photographies detaillees.

detail: “auto”

Le modele choisit automatiquement le niveau de detail en fonction de la taille et de la complexite de l’image. C’est la valeur par defaut si vous omettez le parametre.

Analyser plusieurs images

Vous pouvez envoyer plusieurs images dans un seul message pour des taches de comparaison ou d’analyse croisee :

response = client.chat.completions.create(
    model="grok-4.20-reasoning",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Compare ces deux versions du design. Quelles sont les differences ?"},
                {"type": "image_url", "image_url": {"url": "https://example.com/v1.png", "detail": "high"}},
                {"type": "image_url", "image_url": {"url": "https://example.com/v2.png", "detail": "high"}}
            ]
        }
    ]
)

Il n’y a pas de limite sur le nombre d’images par requete, mais chaque image consomme des tokens supplementaires.

Contraintes techniques

Gardez en tete ces limites lors de l’utilisation de la vision :

  • Taille maximale : 20 MiB par image
  • Formats supportes : JPG, JPEG et PNG uniquement
  • Modeles compatibles : grok-4 et superieur (les modeles plus anciens ne supportent pas la vision)
  • Tokens : les images consomment des tokens qui s’ajoutent au cout textuel de la requete

Points cles a retenir

  • La vision s’utilise via le format tableau du champ content avec des objets image_url
  • Les images peuvent etre envoyees par URL publique ou encodees en base64
  • Trois niveaux de detail : auto (defaut), low (rapide/economique) et high (detaille)
  • Taille maximale de 20 MiB par image, formats JPG et PNG uniquement
  • Plusieurs images peuvent etre envoyees dans un seul message pour des comparaisons