OCR de documentos de identidade com LLM: como dosar certeza e custo quando o documento está feio

OCR de documentos de identidade com LLM: como dosar certeza e custo quando o documento está feio

Damien Maume
Damien Maume
7 min
AI
OCR de documentos de identidade com LLM: como dosar certeza e custo quando o documento está feio

Em resumo

RG/CNI borrada, passaporte mal escaneado, reflexos na MRZ: 90% dos pipelines de OCR clássicos quebram nisso. Relato de experiência sobre a qualificação de imagens de identidade, a calibração do pipeline em cascata e o ferramental de um agente que itera sem estourar a fatura.

Uma RG/CNI fotografada de qualquer jeito num estacionamento, um passaporte escaneado a 72 dpi, um título de residência com um reflexo bem no meio da MRZ. É o dia a dia de um onboarding de KYC, de uma jornada de seguro ou de uma verificação de elegibilidade. E é isso que faz 90% dos pipelines de OCR clássicos quebrarem.

Os LLMs multimodais mudaram o jogo. Dá para mandar a imagem direto: eles leem, entendem a estrutura do documento. Mas a armadilha está em outro lugar: são caros, podem alucinar um número que não existe, e uma chamada de 5.000 tokens em 80.000 documentos por dia dói no bolso.

A pergunta de verdade já não é "será que o LLM sabe ler?". É: quanto eu gasto para qual confiança? É assim que a gente ataca o problema em produção.

Qualificar antes de aplicar o OCR

O primeiro erro que a gente vê nos clientes: jogar todas as imagens no LLM esperando o milagre. Má ideia. De 30% a 40% dos documentos são inutilizáveis antes mesmo de tentar a leitura: foto cortada, documento fora do quadro, borrão de movimento, superfície refletora. Não vale a pena pagar para um GPT-4 confirmar isso.

Por isso a gente coloca uma etapa de qualificação antes. Não é um LLM: são modelos leves, locais, rápidos, que produzem um score em quatro dimensões:

  • Presença do documento: detecção de objeto (YOLO, EfficientDet). Sem documento = rejeita na hora.
  • Nitidez: variância do Laplaciano na zona detectada. Abaixo de um limiar empírico calibrado por tipo de documento, pede uma nova foto.
  • Geometria: ângulo da captura, reenquadramento, presença dos quatro cantos. Se for corrigível, endireita. Senão, rejeita.
  • Exposição: histograma. Escuro demais, superexposto, reflexo: tenta uma normalização. Se continuar ilegível, devolve ao usuário.

Essa etapa custa um trocado em CPU. Ela economiza 30% do orçamento de LLM já na primeira semana em produção. E, principalmente, deixa o resto do pipeline partir de um input limpo.

A calibração em várias fases

Com a imagem qualificada, a gente não parte para a leitura de uma vez só. As fases se encadeiam, da mais barata para a mais cara. Em cada etapa, a decisão é: dá para parar aqui ou eu escalo?

O pipeline funciona em cascata: qualificação → recorte/endireitamento → OCR clássico (Tesseract/Doctr) → se a confiança for ≥ 0,85, validação. Senão → LLM multimodal nas zonas fracas → se a confiança for ≥ 0,85, validação. Senão → loop agêntico com ferramentas. Cada etapa é um ponto de saída possível.

Pipeline de OCR em cascata, cada etapa é um ponto de saída possível

O OCR clássico continua excelente em 70% a 80% dos documentos limpos. Tesseract numa RG/CNI bem enquadrada funciona, é de graça, é instantâneo. O LLM só serve para o resto, isto é, os casos em que a leitura padrão falha ou devolve uma confiança baixa.

A calibração é o trabalho mais importante do pipeline. Ela nunca termina:

  • Limiares de confiança: a gente ajusta por tipo de documento. Um passaporte biométrico não se trata como um título de residência de 1998.
  • Regiões de interesse: a gente mapeia as zonas (sobrenome, nome, MRZ, data) para poder voltar a elas no nível do pixel.
  • Ground truth: a gente rotula uma amostra real e mede a precisão por campo. Sem isso, a calibração é no escuro.

Dar ferramentas ao agente, não uma missão vaga

Quando a gente passa para o LLM, não diz a ele: "lê tudo para mim". É a pior estratégia: ele vai alucinar, consumir demais, e não fica rastro nenhum do que aconteceu. No lugar disso, a gente entrega uma caixa de ferramentas precisa e deixa ele escolher a sequência.

Ferramenta O que ela faz Custo relativo
crop_zone(x, y, w, h) Extrai uma zona precisa para uma releitura direcionada muito baixo
enhance(operation) Desfoque, contraste, remoção de reflexo, binarização baixo
read_mrz() Faz o parse da MRZ com um parser dedicado + checksum normalizado muito baixo
lookup_pattern(field, regex) Busca um campo por padrão (ex.: formato de data FR) muito baixo
check_consistency(field, value) Cruza um campo com outro (idade ↔ data de nascimento) baixo
score_confidence(field) Pede ao modelo que avalie a própria certeza médio
escalate_human() Levanta a mão, saída de emergência assumida alto (humano)

O agente entra em loop: lê, avalia a própria confiança, chama uma ferramenta, relê. Se depois de N iterações não atinge o limiar, escala. Cada chamada de ferramenta fica registrada. No fim do run, fica um diário completo: imagem, etapas, tools usados, tokens consumidos, confiança final.

Sequência de chamadas de ferramentas: o agente lê, avalia, chama, relê

Estratégia: razão certeza / consumo

É aqui que tudo se decide. Sem uma estratégia explícita, o agente sai do controle: chama as ferramentas de novo, pede releituras, e você descobre a fatura no fim do mês. Por isso a gente coloca regras duras.

Orçamento por documento. Cada imagem tem um teto: X tokens, Y chamadas de ferramenta, Z segundos. Passou disso, corta e escala para um humano. Nos pipelines atuais, a calibração fica em geral em torno de 4.000 tokens e 6 chamadas de ferramenta por documento complexo. É arbitrário. O que importa é o teto existir.

Roteamento inteligente na entrada. A gente evita mandar cada imagem para o LLM. Um classificador leve (resolução, score de qualidade, tipo de documento) decide: rota direta para o OCR clássico nos casos simples, escala para o LLM nos casos degradados. 80% das imagens nunca precisam do LLM.

Cache em vários níveis. Hash da imagem para nunca reprocessar o mesmo documento. Cache das MRZs já parseadas. Cache dos templates de layout por país. O cache não reduz o custo de uma chamada: ele elimina a chamada.

Validação cruzada sistemática. A MRZ contém sobrenome, nome, data de nascimento e número do documento. A gente cruza com o que foi lido no corpo do documento. Se bater, confiança máxima. Senão, escala. Esse cruzamento simples ganhou 12 pontos de precisão num projeto recente, sem acrescentar uma única chamada de LLM.

Medição contínua. A gente acompanha duas métricas lado a lado: taxa de validação automática (quantos documentos saem sem intervenção humana) e custo médio por documento validado. Se uma sobe e a outra não desce, a calibração foi para o lado errado.

A armadilha clássica: confiar no "score de confiança" que o próprio LLM devolve. Ele é simpático, mas não é confiável. Sempre cruzar com uma medida externa: coerência da MRZ, formato esperado, faixa de valores plausíveis. O score autodeclarado é um sinal, não uma verdade.

O que fica depois de várias implantações

O LLM não substitui o OCR clássico. Ele completa. Tesseract e Doctr continuam imbatíveis num documento limpo. O LLM só é valioso nos casos degradados, ambíguos ou multilíngues. Construir o pipeline nessa direção, e não na inversa, divide a fatura por 5 a 10.

A rastreabilidade é a condição da confiança. Cada decisão do pipeline tem que ser logada: imagem, etapas, tools, tokens, saída, confiança. Sem isso, você não consegue debugar um caso de cliente, nem melhorar o sistema de forma contínua, nem passar numa auditoria de RGPD. O rastro não é uma opção. É uma camada do produto.

Não se calibra na fase experimental. Calibra-se em produção. Os limiares, os orçamentos, as zonas de interesse: tudo isso se mexe com os dados reais. Os números que a gente põe no início são hipóteses. Depois de 4 a 6 semanas em produção, eles foram divididos por dois ou dobrados. É normal. É a calibração que faz o sistema, não o código inicial.

Um último ponto que se subestima com frequência: o loop de feedback humano. Quando um agente escala para um operador, a correção volta. Essa correção entra num dataset de melhoria. A cada 2 semanas, a gente retoma os casos escalados e ajusta: novo limiar, nova ferramenta, novo prompt. Sem esse loop, o sistema estagna. Com ele, a taxa de escalada cai de 5 a 10 pontos por mês nos primeiros trimestres.

Se você tem um pipeline de OCR que consome demais, que alucina ou que pede intervenção humana demais, é bem capaz que a gente já tenha resolvido o seu caso. A gente industrializa esse tipo de sistema em seguradoras, bancos e operadoras desde 2023. Primeiro caso em produção em 6 a 8 semanas, preço fechado, resultado garantido.

Continue a explorar

Veja outros artigos de AI Agents no universo AI

Artigos recomendados

Este tema interessa a você?

Nossos especialistas podem aprofundar este tema numa conversa dedicada. Marque um horário para falar sobre isso.

Falar com um especialista →