Intermediário 12 minVisão

LLM multimodal com visão rodando localmente: analisar imagens com Ollama

Descrever uma foto, extrair uma tabela de uma captura de tela, ler o total de uma fatura digitalizada: desde 2024, os LLMs de visão com pesos abertos se comparam ao GPT-4o nessas tarefas, e o Ollama os disponibiliza com a mesma simplicidade que os modelos de texto. Este guia mostra como instalar um LLM de visão local com o Ollama, chamá-lo a partir do Python com uma imagem em base64 e aproveitar Qwen 3.5, Gemma 4 ou Qwen 3.8 de acordo com sua VRAM.

Por Mohamed Meguedmi·Atualização 2026-08-27·Testado no Windows, macOS e Linux

#Por que usar um LLM de visão localmente?

Enviar uma fatura de cliente, uma captura de tela médica ou um documento de RH para a OpenAI cria um problema de confidencialidade que os departamentos jurídicos se recusam cada vez mais a aceitar. Um LLM de visão local atende a esses casos concretos: OCR de documentos contábeis, descrição automática de um catálogo de produtos, moderação de imagens, acessibilidade (texto alternativo), extração de dados de PDFs escaneados.

A diferença em relação a um OCR clássico (Tesseract, PaddleOCR): um LLM com visão entende a semântica. Ele sabe dizer "o número de IVA é FR12345678901" enquanto um OCR retorna uma mistura de caracteres que você precisa analisar posteriormente. Em documentos estruturados, a confiabilidade ultrapassa 95 % no modo "extração JSON".

i
O que visão significa aqui
Um LLM 'multimodal de visão' aceita imagens de entrada além do texto. Ele não gera imagens (para isso, veja Stable Diffusion). Você dá uma imagem mais uma pergunta, ele responde em texto.

#Os modelos de visão disponíveis em Ollama

O kit IA Local

Seu ChatGPT privado e gratuito na sua máquina em 1 hora — LM Studio, Ollama, Open WebUI, seus documentos, sem nuvem.

  • Espaço online vitalício
  • PDF + arquivos
  • Atualizações vitalícias

Ollama suporta nativamente várias famílias de modelos de visão desde a versão 0.4 (outubro de 2024), e a geração de 2026 mudou o cenário: a visão agora está integrada à tag padrão de Qwen 3.5 e Gemma 4, sem necessidade de uma variante -vl separada. Estas são as opções relevantes em 2026, classificadas por tamanho e qualidade do OCR em francês.

qwen3.5:9b
O melhor equilíbrio entre qualidade e VRAM em 2026. Excelente OCR em francês, compreende tabelas e formulários, contexto de 256k tokens, licença Apache 2.0. Aproximadamente 6,6 GB de pesos em Q4.
qwen3.5:4b
Versão leve para 4-6 GB de VRAM ou Mac M1/M2 16 GB. Mesma família multimodal Qwen 3.5, reconhecimento de texto em francês correto, descrições um pouco menos ricas. ~3,4 GB.
qwen3.8:27b
Para RTX 3090/4090/5090 (24 GB): qualidade semelhante à do GPT-4o na análise de documentos complexos. Visão, contexto 262k, Apache 2.0. ~18 GB de pesos em Q4.
gemma4:12b
A alternativa do Google (Gemma 4, abril de 2026), multimodal e agora sob a licença Apache 2.0. Muito boa em descrições gerais, um pouco menos eficaz em OCR puro. ~7,6 GB.
gemma4:26b
Gemma 4 26B-A4B, MoE multimodal. A opção topo de linha para uso profissional intensivo: ~19 GB de pesos, roda com 24 GB de VRAM ou em um Mac Studio com memória unificada.
gemma4:e2b-it-qat
Gemma 4 E2B quantizado com QAT (~4,3 GB). Opção compacta para pouca VRAM ou edge, sob licença Apache 2.0.
qwen3.5:2b
Qwen 3.5 2B multimodal (~1,9 GB, contexto 256k). Para Raspberry Pi 5 ou descrições rápidas em massa. Sem OCR sério em documentos complexos.
llava:7b / llava:13b
O antecessor histórico de 2023. Não implantar mais: sua qualidade já foi amplamente superada por Qwen 3.5 e Gemma 4 em 2026.
→
Recomendação padrão
Se você tiver 8 GB de VRAM ou mais, comece com qwen3.5:9b. É o melhor equilíbrio entre qualidade e tamanho para o francês em 2026, a visão está incluída na tag padrão e a comunidade Ollama documenta bem seus casos de uso.

#Pré-requisitos de hardware

A VRAM necessária para um LLM de visão é ligeiramente superior à de seu equivalente de texto, devido ao encoder de visão (geralmente um ViT), que permanece carregado na memória além do modelo de linguagem.

8 GB de VRAM (RTX 3060 12GB, 4060, M1/M2 16GB)
qwen3.5:4b com folga, ou qwen3.5:9b (6,6 GB), que cabe por pouco em Q4.
12 GB VRAM (RTX 3060 12GB, 4070, 5070)
qwen3.5:9b confortável, gemma4:12b em Q4_K_M.
16 GB de VRAM (RTX 4070 Ti Super, 4080, 5070 Ti)
Tudo o que foi dito acima + contexto de 32k tokens, ou qwen3.5:9b-q8_0 para a qualidade máxima da faixa.
24 GB de VRAM (RTX 3090, 4090, 5090)
qwen3.8:27b (~18 GB) ou gemma4:26b, com qualidade próxima à dos modelos na nuvem.
Mac com chip da série M e 24–48 GB de memória unificada
qwen3.5:9b ou qwen3.8:27b graças à memória unificada. Prefira M3/M4 pela largura de banda.

Ollama deve estar na versão 0.4 ou superior para modelos de visão modernos. Verifique com o ollama --version. Se estiver abaixo, atualize antes de continuar.

#1. Instalar um modelo de visão

A instalação é igual a um modelo de texto: ollama pull tbaixa os pesos e o encoder de visão em uma única comando.

Terminal — instalar Qwen 3.5 9B
ollama pull qwen3.5:9b

O download tem aproximadamente 6,6 GB (pesos do LM em Q4 + codificador ViT). Conte com 2 a 3 minutos em uma conexão de fibra óptica. Em seguida, verifique se o modelo está listado:

Terminal
ollama list

# NAME            ID            SIZE      MODIFIED
# qwen3.5:9b      abc123...     6.6 GB    2 minutes ago
!
A visão está na tag padrão
Boa notícia desde Qwen 3.5 e Gemma 4: a visão está integrada à tag padrão (qwen3.5:9b, gemma4:12b). Acabou a armadilha da geração anterior, em que era necessária uma tag -vl separada (qwen2.5vl vs qwen2.5). Basta verificar se você baixou um modelo multimodal recente e não um modelo de texto antigo.

#2. Primeiro teste via CLI

Ollama aceita imagens diretamente na CLI a partir da versão 0.4: passe o caminho do arquivo após seu prompt.

Descrever uma imagem em francês
ollama run qwen3.5:9b "Décris cette image en 3 phrases en français." ./photo.jpg

O modelo carrega a imagem, a codifica via ViT e responde em streaming. Em uma RTX 4070, considere 2 a 4 segundos para uma descrição curta, 8 a 12 segundos para uma análise detalhada.

Saída típica
L'image montre un chat tigré assis sur un rebord de fenêtre en bois clair.
Le pelage présente des rayures grises et noires caractéristiques d'un tabby.
À l'arrière-plan, on devine un jardin flou avec de la végétation verte.
→
Várias imagens de uma vez
Você pode passar vários caminhos de arquivo: ollama run qwen3.5:9b "Compare ces deux images" photo1.jpg photo2.jpg. Útil para comparação visual ou eliminação de duplicatas.

#3. API em Python com imagem em base64

Para integrar um LLM com visão em um app, Ollama expõe seu endpoint REST em http://localhost:11434. A imagem é passada pelo caminho do arquivo (binding Python) ou em base64 (HTTP direto).

Método recomendado: a biblioteca oficial ollama-python. Ela gerencia a codificação base64 para você e aceita um caminho diretamente.

Instalação
pip install ollama pillow
vision_local.py — chamada simples
import ollama

response = ollama.chat(
    model='qwen3.5:9b',
    messages=[{
        'role': 'user',
        'content': 'Quel est le texte visible sur cette image ? Réponds en français.',
        'images': ['./screenshot.png'],
    }],
)

print(response['message']['content'])

Se você preferir gerenciar o base64 sozinho (imagem em memória, blob S3, upload via FastAPI), aqui está a versão explícita:

Com base64 explícito
import base64
import requests

with open('facture.png', 'rb') as f:
    img_b64 = base64.b64encode(f.read()).decode('utf-8')

response = requests.post(
    'http://localhost:11434/api/chat',
    json={
        'model': 'qwen3.5:9b',
        'messages': [{
            'role': 'user',
            'content': 'Décris cette image.',
            'images': [img_b64],
        }],
        'stream': False,
    },
    timeout=120,
)

print(response.json()['message']['content'])
i
Formato base64 esperado
Ollama aceita o base64 bruto, sem prefixo data:image/png;base64,. Se você recuperar a imagem a partir de um navegador, lembre-se de remover esse prefixo antes da chamada.

#4. Caso prático: OCR de uma fatura FR

A extração estruturada a partir de um documento digitalizado é o uso comercial mais solicitado. O padrão que funciona melhor: pedir uma saída em JSON com um esquema explícito no prompt.

ocr_facture.py
import ollama
import json

SYSTEM = '''Tu es un assistant d'extraction de données comptables.
Tu réponds UNIQUEMENT en JSON valide, sans markdown, sans commentaire.'''

PROMPT = '''Extrais les informations de cette facture française au format JSON :
{
  "fournisseur": str,
  "siret": str ou null,
  "numero_facture": str,
  "date": "YYYY-MM-DD",
  "montant_ht": float,
  "tva": float,
  "montant_ttc": float,
  "lignes": [{"description": str, "quantite": float, "prix_unitaire": float}]
}'''

response = ollama.chat(
    model='qwen3.5:9b',
    messages=[
        {'role': 'system', 'content': SYSTEM},
        {'role': 'user', 'content': PROMPT, 'images': ['./facture.png']},
    ],
    format='json',
    options={'temperature': 0.1},
)

data = json.loads(response['message']['content'])
print(f"Fournisseur : {data['fournisseur']}")
print(f"Montant TTC : {data['montant_ttc']} €")

Dois truques que transformam completamente a confiabilidade: usar format='json' (o Ollama então força uma saída JSON válida) e reduzir a temperatura para 0,1 para limitar as alucinações sobre os valores. Em 100 faturas francesas variadas, o Qwen 3.5 9B normalmente consegue de 92% a 96% de extração correta do valor total com impostos + data + fornecedor.

!
Sempre validar os montantes
Mesmo com 96% de precisão, você terá 4 erros por 100 faturas. Em produção, valide sempre que montant_ht + tva ≈ montant_ttc e sinalize as divergências para revisão humana. Um LLM não é um contador registrado.

#Qwen 3.5 vs Gemma 4: qual escolher?

As duas famílias dominam o cenário dos modelos de visão com pesos abertos em 2026. Nosso comparativo prático com casos em francês, entre qwen3.5:9b e gemma4:12b:

OCR em francês (faturas, contratos)
Qwen 3.5 vence claramente. Gemma 4 tende a "inventar" números em documentos desfocados. Vantagem do Qwen: +15% de precisão.
Descrição geral de imagem
Empate. Gemma 4 produz descrições mais narrativas, Qwen 3.5, mais factuais. Questão de gosto.
Compreensão de tabelas
Qwen 3.5 se destaca. É um dos poucos modelos desse porte que sabe ler uma tabela dinâmica do Excel sem confundir seus dados.
Geração de legendas multilíngues (FR/EN/ES)
Qwen 3.5 foi treinado em mais idiomas. Gemma 4 é um pouco melhor quando se trata apenas de inglês.
Latência na RTX 4070
Semelhantes: 2 a 4 segundos para uma resposta curta. Gemma 4 12B é 10 a 15% mais rápido na primeira inferência (codificador de visão mais leve).
Licença
Ambos estão sob a licença Apache 2.0 (uso comercial livre): Gemma 4 passou para a licença Apache 2.0 em abril de 2026, alinhando Google ao Qwen. Nenhuma restrição MAU a monitorar.
→
Veredito prático
Para 90% dos casos de uso em francês (OCR, extração, descrição), Qwen 3.5 9B é a escolha padrão. Gemma 4 12B continua relevante se você já estiver no ecossistema Google/Gemma (fine-tuning, implantação) ou para gerar descrições de imagens em inglês voltadas ao público geral. Precisa da melhor qualidade na análise de documentos com 24 GB? Mude para qwen3.8:27b.

#Solução de problemas

"Error: model does not support images"
Você está chamando um modelo de texto. Verifique se você baixou um modelo multimodal recente (qwen3.5, gemma4 ou o antigo llava). O comando ollama list deve exibir o modelo correto.
O modelo descreve algo diferente da imagem
O base64 provavelmente está corrompido ou contém o prefixo data:image. Remova data:image/png;base64, antes da chamada. Teste primeiro via CLI para isolar o problema.
VRAM saturada ao carregar
O codificador visual se soma aos pesos do LM. Mude para uma quantização mais agressiva (q3_K_M) ou reduza OLLAMA_NUM_CTX para 4096 nas variáveis de ambiente.
O OCR falha no reconhecimento dos acentos franceses
Especifique explicitamente "Responda em francês preservando os acentos" no prompt de sistema. Caso contrário, o modelo às vezes remove os acentos (e no lugar de é).
Tempo de resposta > 30 s
Uma imagem de 4000x3000 aumenta drasticamente o número de tokens visuais. Redimensione para no máximo 1024x1024 antes de enviar: 90% da qualidade de OCR com 10% do processamento.
Redimensionar antes da inferência
from PIL import Image

img = Image.open('facture_4k.png')
img.thumbnail((1024, 1024), Image.LANCZOS)
img.save('facture_resized.png', optimize=True)

#Para se aprofundar

Você tem um LLM de visão local funcionando. Três caminhos naturais para ir além:

Integrar em uma aplicação Python completa
O guia Integrar Ollama em uma aplicação Python via API REST detalha FastAPI, streaming, chamadas de função — aplicável diretamente aos modelos de visão.
Construir um pipeline de extração documental
O guia Contabilidade: extração de faturas mostra a industrialização completa (fila de tarefas, validação, exportação para ERP) a partir de um LLM de visão local.
Escolher o GPU adequado para sua carga
O guia Escolher sua GPU para IA local aborda os níveis de VRAM de 12/16/24 GB e seu impacto nos modelos de visão de 4B/9B/27B.
Este guia ajudou você?

Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.