Construindo um pipeline completo de inteligência documental com docTR: da detecção de texto à geração de PDFs pesquisáveis
Um tutorial técnico recente apresenta uma abordagem abrangente para construir um pipeline completo de reconhecimento óptico de caracteres, conhecido pela sigla OCR, utilizando a biblioteca docTR, desenvolvida pela Mindee. O conteúdo vai além da simples extração de texto em imagens e demonstra como combinar detecção, reconhecimento, análise de layout, extração estruturada de informações e exportação de resultados em múltiplos formatos.
A docTR é uma biblioteca de código aberto baseada em aprendizado profundo, escrita em Python, que realiza OCR por meio de um pipeline em duas etapas: primeiro identifica onde está o texto em uma imagem por meio de um modelo de detecção e, em seguida, converte cada região em texto legível por meio de um modelo de reconhecimento. O tutorial parte da configuração do ambiente, instalando as dependências e identificando se há uma GPU disponível para acelerar o processamento, e segue até etapas avançadas de implantação.
Na fase inicial, o material mostra como gerar documentos sintéticos realistas, no caso faturas com logotipo, dados do destinatário, tabela de itens e valores totais, aplicando degradações que simulam digitalizações e fotos feitas por celular, como inclinação, ruído e compressão JPEG. Esses arquivos são então carregados por meio do componente DocumentFile, que aceita tanto imagens quanto PDFs e permite ajustar a escala de processamento.
A parte central do tutorial se dedica à comparação de arquiteturas de detecção e reconhecimento. Os autores avaliam combinações como db_mobilenet_v3_large com crnn_mobilenet_v3_small, mais leves, e db_resnet50 com crnn_vgg16_bn ou parseq, mais robustas. O resultado mostra que as variantes baseadas em MobileNet costumam ser de cinco a dez vezes mais rápidas, perdendo poucos pontos de acurácia em documentos limpos, enquanto modelos como o parseq se destacam em textos ruidosos, manuscritos ou curvos.
O pipeline padrão retorna os resultados em uma estrutura hierárquica chamada Document, composta por páginas, blocos, linhas e palavras, cada uma com geometria relativa e pontuações de confiança. O tutorial detalha como interpretar essas coordenadas, que são normalizadas entre zero e um e precisam ser multiplicadas pela largura e altura da imagem para serem convertidas em pixels. Também demonstra como visualizar as caixas delimitadoras colorindo-as conforme o nível de confiança do reconhecimento, o que ajuda a identificar rapidamente palavras problemáticas.
Uma estratégia interessante apresentada é a chamada "reconhecimento em duas passadas", que consiste em usar um modelo rápido na primeira passagem e, apenas nas palavras com confiança abaixo de um limiar, como 0,85, reaplicar um reconhecedor mais robusto, como o parseq. Isso permite equilibrar velocidade e qualidade sem gastar processamento adicional em palavras já bem reconhecidas.
O material também aborda o ajuste fino dos limiares de detecção. Aumentar o limiar reduz o número de caixas geradas, útil para documentos digitais nítidos, enquanto diminuí-lo ajuda a detectar textos apagados, como carimbos e impressões em carbono, ao custo de gerar mais caixas espúrias que precisam ser filtradas posteriormente. Para refinar esse processo, o tutorial introduz ganchos personalizados, conhecidos como hooks, que permitem filtrar caixas muito pequenas ou adicionar um pequeno padding antes do reconhecimento, melhorando a acurácia sem alterar os modelos.
Outro ponto importante é o tratamento de documentos rotacionados ou inclinados. O tutorial compara quatro estratégias: assumir páginas retas, que é a mais rápida mas falha a partir de cerca de cinco graus de inclinação; retornar polígonos de quatro pontos; endireitar a página antes do reconhecimento; e converter polígonos em caixas retangulares após a detecção. Cada abordagem tem trade-offs de velocidade e precisão.
Quando o objetivo vai além de simplesmente ler o texto, o tutorial mostra como ativar a detecção de layout, que identifica regiões como títulos, parágrafos, tabelas, cabeçalhos e rodapés. Essa informação estrutural permite rotear cada região para o tratamento adequado, por exemplo, enviar tabelas para um parser de tabelas e descartar rodapés antes de alimentar um modelo de linguagem. A funcionalidade de KIE, sigla em inglês para Extração de Informações-Chave, vai além e devolve os campos já classificados, como número da fatura, data e valor total, sem depender de expressões regulares.
A etapa de exportação é bastante detalhada. O pipeline pode gerar texto puro, JSON estruturado com toda a hierarquia de páginas e palavras, hOCR, que é um formato baseado em HTML com coordenadas de cada palavra, além de uma imagem sintetizada que redesenha o texto dentro das caixas detectadas, funcionando como uma verificação visual da qualidade da transcrição. O destaque final é a geração de um PDF pesquisável, criado sobrepondo uma camada invisível de texto sobre a imagem original do documento escaneado, o que permite selecionar e buscar o texto sem alterar a aparência visual.
O tutorial encerra com recomendações práticas de desempenho, como ajustar o tamanho dos lotes para detecção e reconhecimento separadamente, usar precisão de meia onde for seguro, desabilitar classificadores de orientação quando o tipo de documento é conhecido e ajustar a escala do PDF conforme o tamanho do texto. Também discute opções de fine-tuning para adaptar os modelos a alfabetos ou layouts específicos, além de caminhos de implantação via FastAPI, Docker, Streamlit e Hugging Face Spaces, mostrando como o pipeline pode evoluir de um exemplo básico para uma solução de inteligência documental pronta para produção.