LLM multimodal vision en local : analyser des images avec Ollama
Décrire une photo, extraire un tableau d'un screenshot, lire le total d'une facture scannée : depuis 2024 les LLM vision open-weight tiennent la comparaison avec GPT-4o sur ces tâches, et Ollama les expose avec la même simplicité que les modèles texte. Ce guide montre comment installer un LLM vision local avec Ollama, l'appeler depuis Python avec une image base64, et tirer parti de Qwen2.5-VL, Llama 3.2-Vision ou Llama 4 Scout selon votre VRAM.
#Pourquoi un LLM vision en local ?
Envoyer une facture client, un screenshot médical ou un document RH chez OpenAI pose un problème de confidentialité que les directions juridiques refusent de plus en plus. Un LLM vision local répond à ces cas concrets : OCR de pièces comptables, description automatique d'un catalogue produit, modération d'images, accessibilité (alt-text), extraction de données depuis des PDF scannés.
La différence avec un OCR classique (Tesseract, PaddleOCR) : un LLM vision comprend la sémantique. Il sait dire "le numéro de TVA est FR12345678901" alors qu'un OCR vous rend une soupe de caractères que vous devez ensuite parser. Sur des documents structurés, la fiabilité dépasse 95 % en mode "extraction JSON".
#Les modèles vision disponibles dans Ollama
Ollama supporte nativement plusieurs familles vision depuis la version 0.4 (octobre 2024). Voici les options pertinentes en 2026, classées par taille et qualité d'OCR français.
- qwen2.5vl:7b
- Le meilleur compromis qualité/VRAM. Excellente OCR FR, comprend les tableaux et formulaires. ~6 Go VRAM en Q4.
- qwen2.5vl:3b
- Version légère pour 8 Go de VRAM ou Mac M1/M2 16 Go. OCR FR correcte, descriptions un peu moins riches.
- qwen2.5vl:32b
- Pour RTX 3090/4090/5090 : qualité proche de GPT-4o sur l'analyse de documents complexes. ~19 Go VRAM en Q4.
- llama3.2-vision:11b
- Modèle Meta sorti en septembre 2024. Très bon en description générale, moins précis en OCR pure. ~8 Go VRAM.
- llama3.2-vision:90b
- Le palier serveur. Demande 64+ Go de VRAM (multi-GPU ou Mac Studio Ultra). Pour usage pro intensif.
- llama4:scout
- Llama 4 Scout (avril 2025), MoE 17B actifs, 109B total. Architecture mixed expert, contexte 10M tokens. ~64 Go VRAM en Q4.
- llava:7b / llava:13b
- L'ancêtre, encore utile en dépannage. Qualité dépassée par Qwen2.5-VL en 2026.
- moondream:1.8b
- Modèle minuscule (~1,5 Go VRAM) pour Raspberry Pi 5 ou descriptions rapides en masse. Pas d'OCR sérieuse.
#Prérequis matériels
La VRAM nécessaire pour un LLM vision est légèrement supérieure à son équivalent texte, à cause du vision encoder (souvent un ViT) qui reste chargé en mémoire en plus du modèle de langage.
- 8 Go VRAM (RTX 3060 12GB, 4060, M1/M2 16GB)
- qwen2.5vl:3b en Q4, ou llama3.2-vision:11b en quantization Q3.
- 12 Go VRAM (RTX 3060 12GB, 4070, 5070)
- qwen2.5vl:7b confortable, llama3.2-vision:11b en Q4_K_M.
- 16 Go VRAM (RTX 4070 Ti Super, 4080, 5070 Ti)
- Tout ce qui précède + contexte 32k tokens.
- 24 Go VRAM (RTX 3090, 4090, 5090)
- qwen2.5vl:32b en Q4, qualité proche cloud.
- Mac M-series 24-48 Go unifié
- qwen2.5vl:7b ou 32b grâce à la mémoire unifiée. Préférez M3/M4 pour la bande passante.
Ollama doit être en version 0.4 minimum pour les modèles vision modernes. Vérifiez avec ollama --version. Si vous êtes en dessous, mettez à jour avant d'aller plus loin.
#1. Installer un modèle vision
L'installation est identique à un modèle texte : ollama pull télécharge les poids et le vision encoder en une seule commande.
Le téléchargement fait environ 5,5 Go (poids LM en Q4 + encoder ViT). Comptez 2-3 minutes sur fibre. Vérifiez ensuite que le modèle est listé :
#2. Premier test en CLI
Ollama accepte les images directement dans la CLI depuis la version 0.4 : passez le chemin du fichier après votre prompt.
Le modèle charge l'image, l'encode via ViT, et répond en streaming. Sur une RTX 4070, comptez 2-4 secondes pour une description courte, 8-12 secondes pour une analyse détaillée.
#3. API Python avec image base64
Pour intégrer un LLM vision dans une app, Ollama expose son endpoint REST sur http://localhost:11434. L'image se passe soit en chemin (binding Python), soit en base64 (HTTP brut).
Méthode recommandée : la bibliothèque officielle ollama-python. Elle gère l'encodage base64 pour vous et accepte un chemin directement.
Si vous préférez gérer le base64 vous-même (image en mémoire, blob S3, upload via FastAPI), voici la version explicite :
#4. Cas pratique : OCR d'une facture FR
L'extraction structurée depuis un document scanné est le cas d'usage business le plus demandé. Le pattern qui marche le mieux : demander une sortie JSON avec un schéma explicite dans le prompt.
Deux astuces qui changent la fiabilité du tout au tout : passer format='json' (Ollama force alors un JSON valide en sortie) et baisser la température à 0.1 pour limiter les hallucinations sur les montants. Sur 100 factures FR variées, Qwen2.5-VL 7B obtient typiquement 92-96 % d'extraction correcte montant TTC + date + fournisseur.
#Qwen2.5-VL vs Llama 3.2 Vision : que choisir ?
Les deux modèles dominent la scène open-weight vision en 2026. Notre comparatif terrain sur des cas francophones :
- OCR français (factures, contrats)
- Qwen2.5-VL gagne clairement. Llama 3.2-Vision a tendance à "inventer" des chiffres sur les documents flous. Avantage Qwen +15 % de précision.
- Description générale d'image
- Match nul. Llama 3.2-Vision donne des descriptions plus narratives, Qwen2.5-VL plus factuelles. Question de goût.
- Compréhension de tableaux
- Qwen2.5-VL excelle. C'est l'un des seuls modèles 7B qui sait lire un tableau croisé Excel sans le mélanger.
- Captioning multilingue (FR/EN/ES)
- Qwen2.5-VL a été entraîné sur plus de langues. Llama 3.2-Vision est meilleur en anglais pur.
- Latence sur RTX 4070
- Comparables : 2-4 s pour une réponse courte. Llama 3.2-Vision est 10-15 % plus rapide en première inférence (vision encoder plus petit).
- Licence
- Qwen2.5-VL en Apache 2.0 (usage commercial libre). Llama 3.2-Vision en Llama Community License (restrictions au-delà de 700M MAU).
#Dépannage
- "Error: model does not support images"
- Vous appelez un modèle texte. Vérifiez que le tag contient bien vl, vision, llava ou moondream. ollama list doit afficher le bon modèle.
- Le modèle décrit autre chose que l'image
- Le base64 est probablement corrompu ou contient le préfixe data:image. Strippez data:image/png;base64, avant l'appel. Testez d'abord en CLI pour isoler le problème.
- VRAM saturée au chargement
- Le vision encoder s'ajoute aux poids LM. Passez à une quantization plus agressive (q3_K_M) ou réduisez OLLAMA_NUM_CTX à 4096 dans l'env.
- OCR rate les accents français
- Précisez explicitement "Réponds en français en préservant les accents" dans le system prompt. Sinon le modèle latinise parfois (e à la place de é).
- Temps de réponse > 30 s
- Une image 4000x3000 explose le nombre de tokens visuels. Redimensionnez à 1024x1024 max avant envoi : 90 % de la qualité OCR pour 10 % du compute.
#Pour aller plus loin
Vous avez un LLM vision local fonctionnel. Trois directions naturelles pour aller plus loin :
- Intégrer dans une app Python complète
- Le guide Intégrer Ollama dans une application Python via l'API REST détaille FastAPI, streaming, function calling — applicable tel quel aux modèles vision.
- Construire un pipeline d'extraction documentaire
- Le guide Compta : extraction de factures montre l'industrialisation complète (queue de jobs, validation, export ERP) à partir d'un LLM vision local.
- Choisir le GPU adapté à votre charge
- Le guide Choisir son GPU pour l'IA locale couvre les paliers VRAM 12/16/24 Go et leur impact sur les modèles vision 7B/32B.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.