Sem upload, 100% local, sem conta

Artigo

Melhorar a precisão do OCR: corrija a imagem antes de reconhecer o texto

O OCR é tão bom quanto a imagem que você fornece. Uma digitalização torta, de baixo contraste e com ruído produz texto incompreensível independentemente da qualidade do motor. Aqui está o que realmente faz diferença, na ordem em que deve ser feito, tudo rodando localmente no navegador.

Por que o OCR tem dificuldades com digitalizações reais

Um motor OCR como o Tesseract foi treinado em texto limpo, horizontal e de alto contraste. Ele segmenta uma página em linhas, as linhas em palavras e as palavras em formas de caracteres, depois compara cada forma com seu modelo treinado. As digitalizações reais violam essas suposições: a página está inclinada alguns graus, a iluminação é irregular, a resolução é baixa, e a borda da bandeja do scanner ou a página ao lado adiciona ruído escuro. Cada um desses problemas faz com que o passo de segmentação de linhas e caracteres erre, e uma segmentação errada se propaga em caracteres errados. A solução raramente é um motor diferente: é preparar a imagem para que as suposições do motor se sustentem. Na prática, o pré-processamento melhora a precisão mais do que a escolha do motor OCR.

Diagrama do pipeline de pré-processamento OCR: uma digitalização passa pelas etapas de orientação, correção de inclinação, recorte e escala de cinza antes de chegar ao motor de reconhecimento.

Comece pela resolução: mire em 300 DPI

O Tesseract funciona melhor a cerca de 300 DPI para texto de corpo normal. Abaixo de aproximadamente 200 DPI, os traços de cada glifo se mesclam com os vizinhos e a precisão cai acentuadamente. Se você controla a digitalização, configure o scanner para 300 DPI antes de qualquer outra coisa, pois é a escolha de maior impacto individual. Se você só tem uma imagem de baixa resolução, aumentá-la não inventa detalhes que nunca foram capturados, mas um aumento moderado ainda pode ajudar o motor a separar caracteres que se tocam ao dar mais pixels à segmentação. Texto muito pequeno se beneficia de 400 a 600 DPI; além disso, o arquivo apenas cresce sem nenhum ganho de precisão. Quando a fonte é um PDF, rasterize cada página para uma imagem no DPI alvo primeiro, depois execute o OCR nessa imagem.

Corrija a orientação

Se a página está girada 90, 180 ou 270 graus, o motor lê de lado ou de cabeça para baixo e retorna texto sem sentido. O Tesseract tem um passo de detecção de orientação e script (OSD) que pode estimar a rotação, mas não é confiável em texto esparso, formulários ou páginas dominadas por imagens. Girar a página para a posição vertical você mesmo elimina a incerteza. Este passo não tem perdas e é instantâneo: girar um múltiplo de 90 graus apenas remapeia os pixels existentes para novas posições, sem custo de qualidade nem reamostragem. Faça isso antes de corrigir a inclinação, porque esse passo assume que o texto já está aproximadamente horizontal.

Correção de inclinação: endireite a pequena torção

Até mesmo uma inclinação de 2 a 3 graus, do tipo que resulta de inserir uma página ligeiramente torta, prejudica o OCR: o passo de localização de linhas horizontais divide uma linha de texto em duas, ou mescla duas linhas em uma. A correção de inclinação mede o ângulo dominante das linhas de texto (geralmente por análise de perfil de projeção ou transformada de Hough) e gira a página de volta ao nível. Ao contrário de uma rotação de 90 graus, a correção de inclinação é uma pequena rotação de ângulo arbitrário, portanto reamostrar pixels e adiciona uma quantidade mínima de desfoque. Essa troca quase sempre vale a pena, porque linhas niveladas se segmentam corretamente e o ganho de precisão supera em muito o leve suavizamento. Corrija a inclinação após fixar a orientação e antes de recortar.

Antes e depois da correção de inclinação: uma página de texto inclinada alguns graus à esquerda, endireitada na horizontal à direita para que as linhas fiquem horizontais.

Recorte o texto e elimine o ruído

Tudo que não for o texto que você quer é ruído que o motor pode ler erroneamente: a borda escura da bandeja do scanner, parte da página ao lado, um canto grampeado, um dedo ou um furo de perfuração. Recortar até o bloco de texto remove esses alvos falsos, o que melhora a precisão e acelera o reconhecimento porque o motor tem menos área para analisar. Em um documento de múltiplas colunas, o recorte (ou executar o OCR coluna por coluna) também impede o motor de ler horizontalmente pela margem e intercalar duas colunas em uma única linha incompreensível. Recorte após a correção de inclinação, para que o conteúdo fique alinhado no quadro.

Contraste, escala de cinza e como a binarização realmente funciona

O OCR opera em última instância sobre uma imagem binária: cada pixel é classificado como tinta ou papel. O Tesseract faz isso internamente usando o método de Otsu, que escolhe um único limiar global a partir do histograma da imagem. Isso funciona bem quando a página tem iluminação uniforme e bom contraste, e falha quando uma sombra ou um fundo colorido torna um canto mais escuro do que o limiar espera. Os ganhos confiáveis são converter para escala de cinza, para que uma dominante de cor não confunda o limiar, e uniformizar a iluminação para que a página inteira fique de um lado dele. Aumentar o contraste moderadamente ajuda texto fraco. O que costuma sair mal é a binarização manual forçada: se você aplicar o limiar a preto e branco puro com o valor errado, apaga traços fracos que o próprio passo do motor teria mantido. Deixe o motor binarizar e forneça a ele uma imagem uniforme em escala de cinza como ponto de partida. O Sunasty oferece escala de cinza para PDFs; para ajuste fino de contraste, um editor de desktop ainda é melhor, mas uma iluminação uniforme no momento da digitalização importa mais do que qualquer controle deslizante.

Escolha o idioma certo e verifique o resultado

O Tesseract carrega um arquivo de dados treinado separado por idioma e script. Executar um modelo em inglês sobre texto em francês ou grego produz erros evitáveis, especialmente em caracteres acentuados ou não latinos, então selecione o idioma que corresponde ao documento. Por fim, trate o resultado do OCR como um rascunho, não uma resposta definitiva: o motor não tem como saber se um nome está escrito corretamente ou se um 0 não é um O. Revise números, nomes próprios e tudo que for importante legal ou financeiramente. Para tabelas e layouts de múltiplas colunas, espere ter que corrigir a estrutura manualmente, porque o OCR retorna um fluxo de texto reconhecido, não um layout reconstruído.

Ferramentas neste artigo

Perguntas frequentes

Aumentar a escala de uma digitalização borrada melhora o OCR?

Não muito por si só. Aumentar a escala não pode recuperar detalhes que a digitalização nunca capturou, então uma imagem borrada a 100 DPI continua borrada. Um aumento moderado pode ajudar o motor a separar caracteres que se tocam ao dar mais pixels à segmentação, mas redigitalizar a 300 DPI é muito mais eficaz do que qualquer ampliação.

Devo converter a imagem para preto e branco puro primeiro?

Geralmente não. O Tesseract binariza internamente com o método de Otsu, e um limiar manual forçado com o valor errado apaga traços fracos que o motor teria mantido. Converta para escala de cinza e uniformize a iluminação, depois deixe o motor escolher seu próprio limiar.

Meu texto está de lado. O OCR vai rotacioná-lo automaticamente?

Às vezes. O Tesseract tem um passo de detecção de orientação, mas não é confiável em formulários, texto esparso ou páginas com muitas imagens. Girar a página para a posição vertical 90, 180 ou 270 graus não tem perdas e elimina a incerteza, portanto é a escolha mais segura.

Tudo isso faz upload do meu documento?

Não. A rotação, a correção de inclinação, o recorte, a conversão para escala de cinza e o próprio OCR são executados todos no navegador. O OCR usa uma versão WebAssembly do Tesseract, e os dados linguísticos treinados são baixados uma vez e armazenados em cache. Seu arquivo nunca sai do dispositivo.

Fontes