Pular para o conteúdo principal

Mistral OCR 3: Um guia completo com o Mistral AI Studio e Python

Aprenda a extrair dados textuais de documentos e imagens usando o modelo OCR mais recente e avançado da Mistral, o Mistral OCR 3.
Atualizado 7 de jan. de 2026  · 9 min lido

O mais recente modelo OCR da Mistral, o Mistral OCR 3, consegue extrair texto e imagens incorporadas de vários tipos de documentos com uma precisão incrível.

Neste artigo, vou te ensinar como aproveitar ao máximo o Mistral OCR 3 usando tanto o AI Studio quanto a API com Python. Vamos criar um pequeno aplicativo que transforma uma foto de um menu em um site interativo.

Captura de tela mostrando que o Mistral OCR 3 consegue reconhecer texto escrito à mão com muita precisão.

Se você quiser saber mais sobre como usar APIs pra criar ferramentas com inteligência artificial, recomendo dar uma olhada no curso curso Trabalhando com a API OpenAI

O que é o Mistral OCR?

OCR significa Reconhecimento Ótico de Caracteres e serve pra transformar documentos em texto. Por exemplo, ele pode transformar uma foto de uma nota escrita à mão em texto ou uma tabela em um PDF em uma tabela de texto de verdade que dá pra pesquisar e editar.

O Mistral OCR 3 é o mais recente modelo de compreensão de documentos da Mistral AI, oferecendo precisão e eficiência de ponta para documentos do mundo real. Ele extrai texto e imagens incorporadas com alta fidelidade e mantém a estrutura por meio da saída markdown com reconstrução de tabelas baseada em HTML, com JSON estruturado opcional.

O Mistral OCR 3 supera todos os concorrentes em vários testes de desempenho:

Resultados do benchmark do Mistral OCR 3.

Comparado com o Mistral OCR 2, ele consegue uma taxa de acerto geral de 74% em formulários, documentos digitalizados, tabelas complexas e manuscritos, com ganhos significativos em digitalizações de baixa qualidade e layouts densos.

Mistral OCR 2 vs Mistral OCR 3

Para saber mais sobre OCR e o modelo anterior da Mistral, dá uma olhada neste artigo: Mistral OCR: Um guia com exemplos práticos.

Usando o Mistral OCR 3 no Mistral AI Studio

Vamos ver como configurar o Mistral OCR 3 com o AI Studio. 

Configuração da conta

O Mistral OCR 3 está disponível para uso no seu estúdio de IA. Essa é a maneira mais fácil de experimentar, porque tem uma interface bem fácil de usar.

Quando a gente se inscreve, primeiro a gente é solicitado a criar uma organização:

Criando uma organização Mistral

No começo, o Mistral OCR 3 vai estar bloqueado, e a gente precisa escolher um plano pra desbloquear:

Captura de tela mostrando que é preciso um plano para desbloquear o Mistral OCR.

Dá pra escolher um plano grátis, que permite usar o Mistral OCR 3, mas eles vão coletar dados de uso pra melhorar os serviços deles. Ou, a gente pode colocar os dados do cartão de crédito e ser cobrado por uso.

Não tem taxa de assinatura, mas a gente paga US$ 2 ou US$ 1 por cada 1.000 páginas, dependendo se usamos ou não solicitações em lote.

Detalhes dos preços do Mistral OCR 3.

Analisando nosso primeiro documento

Depois que a conta estiver pronta, a gente pode testar o Mistral OCR 3 acessando a aba “Document AI” no AI Studio.

Interface do playground OCR.

Pra começar, a gente carrega o documento ou imagem que a gente quer fazer o OCR. No meu caso, escrevi um texto e fiz uma tabela em um pedaço de papel e enviei. Minha caligrafia é bem ruim, então fiquei curioso pra ver se o Mistral OCR 3 conseguiria entender.

Escolhendo as opções de OCR.

Quando o arquivo é selecionado, aparecem opções sobre como ele deve ser processado. Neste primeiro exemplo, deixei as opções padrão e simplesmente cliquei no botão “Executar” no canto superior direito.

E aí está o resultado:

Resultado da execução do OCR com a minha caligrafia.

O resultado é bem legal, mas não é perfeito:

  • A primeira frase tem dois erros: “homd” em vez de “hand” e “tarnible” em vez de “terrible”.
  • A tabela está boa no geral, mas não conseguiu identificar corretamente os nomes das colunas. O nome da tabela “OCR Benchmark Multilingual Chinese” e a coluna “Resultado” foram unidos.
  • Fiquei impressionado com a forma como ele lidava com os erros que eu corrigia manualmente. Mas, se eu estivesse usando isso pra analisar minhas anotações, preferiria que elas fossem identificadas e deixadas de fora.
  • Por fim, escrevi uma frase em chinês tradicional e ele conseguiu reconhecer a maior parte dela. Tem um caractere “好” que foi analisado como dois caracteres separados, “女” e “子”, as vírgulas foram reconhecidas como letras “g” e também tem um erro no final.

Explorando as opções de análise

Uma das funcionalidades legais do Mistral OCR 3 é poder definir uma estrutura JSON pra analisar os dados. Isso é super útil pra analisar tabelas, porque a gente pode especificar os nomes das colunas e seus tipos de dados pra conseguir as linhas como um dicionário JSON.

Vamos tentar analisar a tabela do exemplo anterior de novo, especificando um esquema JSON.

Exemplo de tabela escrita à mão.

Para fornecer um esquema JSON, precisamos selecionar o esquema JSON em vez do modo texto antes de executar o OCR.

Escolhendo um esquema JSON.

Em seguida, fornecemos um esquema com código ou usando a interface de usuário “Visual Builder”. Eu recomendo a segunda opção, porque é mais simples quando já estamos usando o modelo manualmente.

Ao adicionar um campo, a gente especifica:

  • O nome
  • A descrição
  • O tipo de dados
  • Se o campo é obrigatório ou não

Adicionando um campo JSON.

Nesse caso, eu especifiquei dois campos, um para o nome do modelo e outro para o resultado do benchmark:

Exemplo de um esquema JSON com dois campos.

Agora podemos clicar em “Executar” e ver os resultados. Infelizmente, esse exemplo não deu certo. Nos resultados, a única coisa que apareceu foi o esquema que eu forneci, não os dados reais.

Resultado da análise JSON.

Achei que talvez tivesse usado incorretamente, então, para ter certeza, tirei uma captura de tela de uma tabela de exemplo da Wikipedia) e tentei de novo.

Tabela de amostra tirada da Wikipedia.

Especifiquei quatro colunas, deixando a última como opcional:

Esquema JSON para a tabela de exemplo da Wikipédia.

Desta vez funcionou bem. Parece que, quando a análise falha, o resultado JSON é só o esquema que foi fornecido. Isso também quer dizer que o Mistral OCR 3 não conseguiu analisar minha tabela escrita à mão como JSON, mesmo que conseguisse renderizá-la como texto.

Exemplo de resultado da análise JSON.

Usando o Mistral OCR 3 com Python

Nesta seção, vamos ver como usar o Python para interagir com a API do Mistral OCR 3. Isso dá muito mais flexibilidade, porque a gente pode, por exemplo, juntar o resultado com outros modelos de IA para processar os dados extraídos.

Quando a gente carrega um arquivo no AI Studio, tem um botão “Código” ao lado do botão “Executar”. Ao clicar aqui, dá pra ver qual código seria necessário pra fazer essa operação usando a API.

O botão de código nos permite ver o código necessário para gerar o OCR.

Aqui vai um exemplo:

Vendo o código necessário para fazer o OCR.

Mas, o código Python que te deram não está totalmente certo. Por exemplo, define uma função chamada encode_file, mas depois chama uma função chamada encode. São pequenas inconsistências, mas fazem com que o código não funcione logo de cara.

Mas não se preocupe, vamos explicar em detalhes como usar a API. Pra saber mais sobre a API, a gente recomenda dar uma olhada a documentação oficial.

Configuração da API

A primeira coisa que precisamos fazer é criar uma chave API na aba “Chaves API” e copiar essa chave para um novo arquivo chamado .env localizado na mesma pasta que o script Python.

Depois, a gente instala as dependências necessárias:

pip install mistralai python-dotenv

Fazendo OCR numa imagem

Aqui tá um script Python que carrega uma imagem JPEG local, faz OCR nela e salva o resultado num arquivo markdown:

import sys
import base64
import os
from mistralai import Mistral
from dotenv import load_dotenv

# Load the API key from the .env file
load_dotenv()

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

# Load a file as base 64
def encode_file(file_path):
    with open(file_path, "rb") as pdf_file:
        return base64.b64encode(pdf_file.read()).decode('utf-8')

# Perform OCR on and image
def process_image_ocr(file_path):
    base64_file = encode_file(file_path)
    ocr_response = client.ocr.process(
        model="mistral-ocr-latest",
        document={
            "type": "image_url",
            "image_url": f"data:image/jpeg;base64,{base64_file}" 
        },
        include_image_base64=True
    )
    for index, page in enumerate(ocr_response.pages):
        with open(f"page{index}.md", "wt") as f:
            f.write(page.markdown)

if __name__ == "__main__":
    # Load the input file from the arguments
    file_path = sys.argv[1]
    process_image_ocr(file_path)

Fazendo OCR em um PDF

Quando a entrada é um PDF em vez de uma imagem, a única coisa que muda é o valor fornecido no campo “ document ”. Para uma imagem JPEG, usamos:

document={
  "type": "image_url",
   "image_url": f"data:image/jpeg;base64,{base64_file}" 
},

Para um PDF, usamos:

document={
  "type": "document_url",
  "document_url": f"data:application/pdf;base64,{base64_file}" 
},

Aqui está uma função completa que podemos usar para processar um PDF:

def process_pdf_ocr(file_path):
    base64_file = encode_file(file_path)
    ocr_response = client.ocr.process(
        model="mistral-ocr-latest",
        document={
            "type": "document_url",
            "document_url": f"data:application/pdf;base64,{base64_file}" 
        },
        include_image_base64=True
    )
    process_pages(ocr_response)

Fazendo uma versão genérica

Ter duas funções diferentes para processar arquivos PDF e JPEG é meio chato e também não é a melhor prática, já que tem muito código em comum entre as duas.

Pra evitar isso, a gente criou uma função nova e melhorada que usa o pacote mimetypes pra tentar identificar o tipo do arquivo fornecido e construir a solicitação da API de acordo com isso. Também atualizamos o código para salvar as imagens identificadas no documento.

Aqui está a versão final:

import sys
import os
import base64
import mimetypes
import datauri
from mistralai import Mistral
from dotenv import load_dotenv
# Load the API key from the .env file
load_dotenv()
# Initialize the Mistral client
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
# List the supported image types
SUPPORTED_IMAGE_TYPES = {
    "image/jpeg",
    "image/png",
    "image/webp",
    "image/tiff",
}
PDF_MIME = "application/pdf"
# Load a file as base 64
def encode_file(file_path: str) -> str:
    with open(file_path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")
# Build the document payload depending on the type of data contained in the file
def build_document_payload(file_path: str) -> dict:
    mime_type, _ = mimetypes.guess_type(file_path)
    if not mime_type:
        raise ValueError(f"Could not determine MIME type for {file_path}")
base64_file = encode_file(file_path)
if mime_type == PDF_MIME:
        return {
            "type": "document_url",
            "document_url": f"data:{mime_type};base64,{base64_file}",
        }
if mime_type in SUPPORTED_IMAGE_TYPES:
        return {
            "type": "image_url",
            "image_url": f"data:{mime_type};base64,{base64_file}",
        }
raise ValueError(f"Unsupported file type: {mime_type}")
# Generic function to process OCR on a file
def process_ocr(file_path: str, output_filename: str = "output.md"):
    document = build_document_payload(file_path)
    ocr_response = client.ocr.process(
        model="mistral-ocr-latest",
        document=document,
        include_image_base64=True,
    )
    process_pages(ocr_response, output_filename)
# Save an image to a local file
def save_image(image):
    parsed = datauri.parse(image.image_base64)
    with open(image.id, "wb") as f:
        f.write(parsed.data)
# Process all pages from the OCR response
def process_pages(ocr_response, output_filename: str):
    with open(output_filename, "wt") as f:
        for page in ocr_response.pages:
            f.write(page.markdown)
            for image in page.images:
                save_image(image)
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python ocr.py <file>")
        sys.exit(1)
process_ocr(sys.argv[1])

Pra usar essa versão, você precisa do pacote datauri pra salvar a imagem identificada pelo Mistral OCR 3, que pode ser instalado usando:

pip install datauri

Fornecendo um esquema JSON

A gente viu acima que o Mistral OCR 3 permite usar um esquema JSON pra analisar os dados. Esse recurso também está disponível quando você usa a API.

Para isso, precisamos fornecer o esquema JSON no parâmetro document_annotation_format ao fazer a solicitação. Abaixo está um exemplo de um esquema JSON para as duas colunas model e result, que correspondem à tabela de exemplo escrita à mão.

Exemplo de tabela escrita à mão.

document_annotation_format={
    "name": "response_schema",
    "schemaDefinition": {
        "properties": {
            "model": {
                "type": "string",
	         "description": "The name of the model"
             },
             "result": {
	         "type": "number",
	         "description": "The benchmark result"
	     }
         },
         "required": [
             "model"
         ]
    }
}

A estrutura é sempre a mesma. Precisamos adicionar uma entrada para cada coluna no campo “ properties ”, incluindo informações sobre o tipo de dados e uma descrição para ajudar o modelo a identificar os dados.

Depois, listamos todos os campos obrigatórios no campo “ required ”.

Pra usar junto com o código, o jeito mais fácil é guardar o esquema num arquivo JSON e carregá-lo usando o pacote json.

Ideias para projetos do Mistral OCR 3

Uma das principais vantagens de usar o Mistral OCR 3 com a API é a possibilidade de fazer coisas em cima dele. Nesta seção, a gente apresenta algumas ideias de projetos para você desenvolver.

Aplicativo para controlar gastos

A gente aprendeu como fazer OCR numa imagem. A gente pode usar isso pra criar um aplicativo que tira uma foto de um recibo de compras e, em seguida, usa o Mistral OCR 3 pra processar os dados da imagem e extrair um dicionário JSON listando os itens do recibo e seus preços.

Essas despesas podem então ser automaticamente categorizadas e adicionadas a um banco de dados, permitindo que o usuário acompanhe seus gastos.

Leitor de áudio de documentos

A gente pode juntar o Mistral OCR 3 com uma IA de conversão de texto em voz para criar um leitor de áudio de documentos. O usuário pode escolher um PDF de texto e mandar pro Mistral OCR 3 pra ser processado. Depois, o texto que sai é mandado para um modelo de IA de conversão de texto em fala, tipo o OpenAI Audio API ou o Eleven Labs.

Como o Mistral OCR 3 também funciona com imagens, ele pode ser usado com fotos, permitindo que os usuários tirem uma foto de um documento e o ouçam em qualquer lugar.

Pra saber mais sobre conversão de texto em fala, recomendo um dos seguintes recursos:

Conclusão

O Mistral OCR 3 é uma ferramenta prática e eficiente para transformar documentos reais em texto utilizável e dados estruturados, seja você fazendo experiências no AI Studio ou integrando via Python.

Ele funciona super bem em páginas digitalizadas, formulários e tabelas, mantém o layout com marcações e imagens e dá suporte ao esquema JSON quando você precisa de estrutura. Mas, como vimos, uma caligrafia confusa e cabeçalhos ambíguos ainda podem atrapalhar, e as análises de esquema com falha simplesmente devolvem o esquema.

A API é bem simples depois que você resolve algumas pequenas inconsistências, e um manipulador de arquivos genérico, junto com o salvamento de imagens, facilita a integração em pequenos aplicativos ou pipelines. Se você está apenas experimentando, o Studio é o caminho mais rápido. Para uso em produção, pense no modelo de custo, use lotes sempre que possível e adicione validação para casos extremos.

A partir daí, você pode iterar; ajustar esquemas, combinar resultados com outros modelos e criar utilitários específicos, como analisadores de recibos ou leitores de áudio, deixando o modelo fazer o trabalho pesado enquanto você cuida da confiabilidade e da experiência do usuário.

Perguntas frequentes sobre o Mistral OCR 3

Quanto custa o Mistral OCR 3?

O Mistral OCR 3 funciona com um modelo de pagamento por página, em vez de um modelo por token (comum em LLMs).

  • API padrão: $2 por 1.000 páginas.
  • API em lote: US$ 1 por 1.000 páginas (ótimo pra tarefas com muito volume que não precisam de processamento imediato).
  • Nível gratuito: Não tem taxa de assinatura pra acessar o modelo no plano “Gratuito”, mas os dados de uso nesse nível podem ser usados pela Mistral pra treinar seus modelos. Para manter os dados privados, você precisa escolher um plano pago.

Quais formatos de arquivo e idiomas são compatíveis?

O Mistral OCR 3 é multilingue por padrão e consegue lidar com scripts complexos além do inglês.

  • Formatos de arquivo: Ele suporta principalmente PDFs e formatos de imagem comuns, como JPEG, PNG, TIFF, WEBP e AVIF. A documentação também menciona o suporte para formatos de documento como DOCX e PPTX através da entrada document_url.
  • Idiomas: Ele já vem com suporte para mais de 35 idiomas, incluindo idiomas baseados no alfabeto latino (inglês, francês, espanhol), cirílico, árabe, hindi e chinês (tradicional e simplificado).

Como o Mistral OCR 3 se compara a modelos de linguagem grande (LLMs) como o GPT-4o?

Enquanto os LLMs Vision gerais (como o GPT-4o) podem “ler” imagens, o Mistral OCR 3 é um modelo especializado, otimizado especificamente para a análise de documentos.

  • Estrutura vs. Conteúdo: O Mistral OCR 3 é ótimo pra manter a estrutura do layout, converter tabelas complexas direto em HTML/Markdown e extrair imagens incorporadas separadamente. Os LLMs de visão muitas vezes têm dificuldade em manter a geometria rigorosa das tabelas ou apresentam alucinações ao analisar planilhas densas.
  • Eficiência de custos: Para o processamento puro de documentos (por exemplo, analisar 10.000 faturas), o Mistral OCR 3 geralmente é bem mais barato porque você paga por página, enquanto os Vision LLMs cobram por token (tokens de imagem de entrada + tokens de texto de saída), o que pode ficar caro rapidinho para textos densos.

O Mistral OCR 3 consegue lidar com escrita à mão?

Sim, mas com algumas restrições. Ele conseguiu uma taxa de acerto de 74% em relação ao modelo anterior em testes de reconhecimento de escrita à mão e consegue lidar com anotações em letra cursiva e mistas (por exemplo, rabiscos em um formulário impresso). Mas, como você viu nos seus testes, ele ainda pode ter dificuldade com caligrafia muito bagunçada ou texto riscado, às vezes interpretando mal as correções manuais ou achando que são texto ativo.

E se a extração JSON não der certo?

Uma das características únicas do Mistral OCR 3 é o OCR estruturado, onde você pode definir um esquema JSON (como nomes de colunas e tipos de dados). Se o modelo não conseguir mapear o conteúdo do documento para o seu esquema rígido, por exemplo, devido a cabeçalhos ambíguos ou colunas mescladas, ele geralmente volta a retornar a definição do esquema em si ou uma análise de texto padrão, em vez de criar dados falsos. Esse comportamento “à prova de falhas” ajuda a evitar que aplicativos a jusante processem dados inválidos silenciosamente.


François Aubry's photo
Author
François Aubry
LinkedIn
Engenheiro de pilha completa e fundador da CheapGPT. Ensinar sempre foi minha paixão. Desde meus primeiros dias como estudante, eu buscava ansiosamente oportunidades para dar aulas particulares e ajudar outros alunos. Essa paixão me levou a fazer um doutorado, onde também atuei como assistente de ensino para apoiar meus esforços acadêmicos. Durante esses anos, encontrei imensa satisfação no ambiente tradicional da sala de aula, promovendo conexões e facilitando o aprendizado. Entretanto, com o advento das plataformas de aprendizagem on-line, reconheci o potencial transformador da educação digital. Na verdade, participei ativamente do desenvolvimento de uma dessas plataformas em nossa universidade. Estou profundamente comprometido com a integração dos princípios tradicionais de ensino com metodologias digitais inovadoras. Minha paixão é criar cursos que não sejam apenas envolventes e informativos, mas também acessíveis aos alunos nesta era digital.
Tópicos

Cursos mais populares do DataCamp

Curso

Trabalhar com a API da OpenAI

3 h
97.8K
Comece a criar aplicativos com IA usando a API da OpenAI e conheça a tecnologia por trás de aplicativos de IA populares, como o ChatGPT.
Ver detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow