Você fotografa o recibo do mercado, a conta de luz ou aquele contrato de duas páginas — e o texto aparece no computador, pronto para copiar, editar ou colar numa planilha. Sem aplicativo pago e, o mais importante: sem mandar o documento para nenhum serviço na nuvem. A leitura acontece dentro da sua própria máquina.

Essa leitura automática de imagem se chama OCR (reconhecimento óptico de caracteres): o programa "olha" a foto e escreve o que está nela. É a mesma ideia que o caixa do banco usa para ler o seu boleto — só que rodando no seu computador, de graça e sem prazo de validade.

O leitor de documentos em ação: um cupom de mercado vira tabela, linha por linha.

Dois casos práticos (para o que serve no dia a dia)

  • O cupom do mercado. A foto do cupom volta como uma lista de itens com os preços e o total. Colando na planilha, você compara a compra do mês com a do mês passado e descobre o que puxou a conta para cima. É o exemplo que aparece no vídeo acima.
  • Contrato, receita e boleto. Em vez de redigitar um parágrafo inteiro, você copia só o trecho que interessa e guarda no seu documento de texto. Funciona para contrato de plano, apólice de seguro, receita médica, etiqueta de encomenda e aquela nota fiscal amassada que você precisa declarar.

Antes de começar

  • um computador comum (Windows, Mac ou Linux) com cerca de 4 GB livres em disco;
  • a foto do documento;
  • uns 20 minutos — o download do modelo é a parte mais demorada.

Se o computador for modesto, tudo bem: na página do modelo existem versões menores (1B e 0,8B) que pedem menos da máquina. Este passo a passo usa a versão mais precisa, a 4B.

Passo 1 — Instalar o Ollama

O Ollama 0.31.1 (versão testada em outubro de 2026) é o programa que baixa e roda modelos de IA no seu computador. Há instalador para Windows e para Mac e um comando para Linux, tudo na página oficial de download.

Depois de instalar, abra o terminal (no Windows, o "Prompt de Comando") e confira se ele respondeu:

ollama --version

Aparecendo o número da versão, o motor está no lugar.

Passo 2 — Baixar o leitor de documentos

O leitor que usamos é o LightOnOCR-3, da LightOn, publicado no começo de outubro de 2026 sob licença Apache 2.0 — livre inclusive para uso comercial. Ele foi feito para ler página inteira: recibo, formulário, boleto, tabela, contrato e até manuscrito, devolvendo o texto já organizado (tabela continua sendo tabela).

ollama pull maternion/LightOnOCR-3:4b

São cerca de 3,4 GB, baixados uma única vez. Essa é uma conversão comunitária feita a partir dos pesos oficiais publicados pela LightOn no Hugging Face.

Passo 3 — Fotografar direito (é aqui que quase todo mundo erra)

  • papel reto no quadro, sem inclinação e sem dobra;
  • foto tirada de cima, evitando a sombra do seu corpo;
  • a folha inteira dentro da foto: se a coluna da direita ficar de fora, os preços somem. Aconteceu no nosso próprio teste — o cupom voltou sem os valores;
  • imagem grande: mire em uns 2.000 pixels no lado maior, porque o modelo foi treinado com páginas digitalizadas em 400 DPI;
  • boa luz, sem reflexo de flash e sem dedo tampando o texto.

Passo 4 — Pedir a leitura

O caminho mais curto é pelo próprio terminal. Supondo que a foto esteja no seu computador, basta apontar o arquivo:

ollama run maternion/LightOnOCR-3:4b --think=false "leia este documento C:\Users\voce\foto-do-cupom.jpg"

No Mac e no Linux o caminho aparece sem as barras invertidas (/home/voce/foto-do-cupom.jpg). O modelo foi treinado para receber só a foto, sem instruções — a frase serve para o Ollama anexar a imagem, e funciona: no nosso teste ele devolveu o cupom inteiro em texto.

Se você prefere algo mais "de programa", dá para automatizar em poucas linhas. Crie o arquivo ler_documento.py na mesma pasta da foto:

"""Le a foto de um documento e devolve o texto que esta nela.

O modelo roda no SEU computador, com o Ollama. A foto nao vai para a nuvem.
"""
import base64
import json
import os
import urllib.request

DOCUMENTO = os.environ.get("DOCUMENTO", "documento.png")  # troque pela sua foto
SERVIDOR = os.environ.get("OCR_SERVIDOR", "http://127.0.0.1:11434")
MODELO = os.environ.get("OCR_MODELO", "maternion/LightOnOCR-3:4b")


def ler_documento(caminho):
    with open(caminho, "rb") as arquivo:
        imagem = base64.b64encode(arquivo.read()).decode("utf-8")
    corpo = json.dumps({
        "model": MODELO,
        "stream": False,
        "think": False,   # sem o modo de pensar: com ele, a resposta volta vazia
        "messages": [{"role": "user", "content": "", "images": [imagem]}],
    }).encode("utf-8")
    pedido = urllib.request.Request(
        SERVIDOR + "/api/chat", data=corpo,
        headers={"Content-Type": "application/json"})
    with urllib.request.urlopen(pedido, timeout=300) as resposta:
        return json.load(resposta)["message"]["content"]


def main():
    if not os.path.exists(DOCUMENTO):
        print("Nao achei a foto", DOCUMENTO, "- o caminho esta certo?")
        return
    try:
        texto = ler_documento(DOCUMENTO)
    except Exception as erro:
        print("Nao consegui falar com o servidor:", erro)
        print("Confira o Ollama, com:  ollama pull", MODELO)
        return
    print("--- texto que estava na foto ---")
    print(texto.strip())


if __name__ == "__main__":
    main()

Rode assim, apontando para a sua foto:

python3 ler_documento.py

O que sai do outro lado (nosso teste com um cupom de mercado, resumido):

# MERCADO SÃO JORGE

## CUPOM FISCAL

12/10/2026 19:42

| Item | Descrição                 | Valor |
| ---- | ------------------------- | ----- |
| 1    | ARROZ TIO JOÃO 5KG        | 32,90 |
| 2    | FEIJÃO CAMIL 1KG          | 18,98 |
| 1    | CAFÉ TORRADO 500G         | 18,75 |
| 3    | LEITE INTEGRAL 1L         | 17,97 |
| 1    | DETERGENTE 500ML          |  4,29 |
| 1    | PAPEL HIGIÊNICO 12 ROL    | 24,90 |
| 1    | SABONETE GLICERINADO      |  3,49 |

**TOTAL** 121,28
PAGAMENTO: PIX

Sete itens e o total, todos corretos — conferimos contra o cupom de papel, e a soma bate (121,28).

Passo 5 — Usar o texto

Cole a tabela no Excel ou no Google Planilhas e ela entra já dividida em colunas; jogue o texto num documento, mande por e-mail ou use a busca do computador para achar um trecho. E repare no detalhe que faz diferença em documento sensível: a foto nunca saiu da sua máquina — não há conta para criar, cota para respeitar nem arquivo guardado no servidor de outra empresa.

Os erros mais comuns (e como sair deles)

  1. Resposta vazia. É o erro número um com esse modelo. Ele vem de uma família de modelos que "pensa antes de responder" e, com o modo de pensar ligado, gasta a resposta inteira pensando: o campo do texto volta vazio, e só o campo do raciocínio vem preenchido. Medimos os dois jeitos: com o pensamento desligado, o cupom volta inteiro (1.195 caracteres, com o total certo); ligado, o texto volta com zero caracteres. Desligue o modo pensar — no terminal, com --think=false; no programinha, com a linha "think": False (já está lá).
  2. Faltam valores na tabela. Quase sempre é foto cortada, torta ou pequena, não falha do programa. Enquadre a folha inteira, aumente a resolução e refaça a foto.
  3. Um caractere trocado. Nenhuma leitura automática é infalível com 0 e O ou 1 e l. Confira sempre à mão o que importa: valor total, datas e números de documento.
  4. Pedir resumo em vez de leitura. Este modelo só transcreve; ele não conversa. Pedir "resuma este contrato" devolve coisa sem sentido — copie o texto que ele leu e leve para um assistente comum se quiser um resumo.
  5. Tabela em formato de tabela. Se você queria texto corrido, é só apagar as barras verticais; se queria planilha, é só colar.

Alternativa para quem gosta de mexer

Se você prefere o caminho dos arquivos, o mesmo modelo roda no llama.cpp com os arquivos GGUF quantizados (bem menores). Só conte com mais trabalho: compilar, baixar dois arquivos e subir um servidor. O time do llama.cpp tem um guia próprio para modelos de OCR, que rodam até em placa de vídeo de 4 GB e, em alguns casos, só no processador. Para quem quer só usar, o caminho do Ollama acima é o menor esforço.

Referências

Medição da CheriffAI (15 de outubro de 2026): leitura completa de um cupom de mercado em português, com sete itens e total corretos, e o teste do modo pensar ligado devolvendo resposta vazia — os dois resultados reproduzidos neste post.