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.
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)
- 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á). - 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.
- Um caractere trocado. Nenhuma leitura automática é infalível com
0eOou1el. Confira sempre à mão o que importa: valor total, datas e números de documento. - 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.
- 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
- Ollama — página oficial de download (versão usada: 0.31.1)
- Ollama — modelo maternion/LightOnOCR-3 e suas versões (0,8B, 1B e 4B)
- LightOn — anúncio do LightOnOCR-3 (começo de outubro de 2026, licença Apache 2.0)
- Hugging Face — ficha oficial do LightOnOCR-3-4B
- GitHub — repositório LightOnOCR (cliente, linha de comando e scripts dos testes de precisão)
- arXiv — artigo do LightOnOCR (base técnica da família de modelos)
- llama.cpp — como usar modelos de OCR (requisitos de máquina)
- GitHub — downloads do llama.cpp
- Hugging Face — arquivos GGUF do LightOnOCR-3-4B
- LightOn — site oficial
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.

