Imagem para texto (OCR): como funciona e como tirar um texto limpo
OCR, reconhecimento óptico de caracteres, transforma a imagem de um texto em texto que dá para copiar, buscar e editar. É ele que lê o print de uma mensagem de erro, a foto de uma carta ou um contrato escaneado. A maioria dos erros vem da imagem, não do programa, então alguns minutos cuidando da foto costumam poupar mais tempo do que corrigir o resultado.
Como o OCR lê uma imagem
O Tesseract, o motor de código aberto por trás da maioria das ferramentas de OCR gratuitas, trabalha em três etapas. Primeiro passa a imagem para preto e branco, decidindo para cada pixel se é tinta ou papel. Depois encontra os blocos, as colunas e as linhas de texto. Por fim, desde a versão 4.00, uma rede neural lê cada linha inteira de uma vez, e não letra por letra, e os dados do idioma a ajudam a escolher entre formas parecidas.
Cada etapa pode falhar do seu jeito: uma sombra na página estraga o preto e branco, uma foto torta estraga as linhas e o idioma errado estraga as letras.
O que mais faz diferença
- Resolução: a documentação do Tesseract diz que ele funciona melhor com imagens de pelo menos 300 dpi. Para escanear, escolha 300 dpi; numa foto, faça a página ocupar o quadro todo.
- Linhas retas: numa página torta o motor encontra as linhas muito pior. Fotografe a página de frente, ou gire a imagem até as linhas ficarem na horizontal.
- Luz uniforme e contraste: texto escuro sobre fundo claro e liso. Sombras, reflexos e papel irregular fazem letras sumirem na etapa do preto e branco.
- Uma margem pequena: recorte a imagem no texto, mas deixe uma borda branca estreita, de uns 10 pixels. Texto encostado na borda é mal lido, e as bordas escuras de um escaneamento podem ser lidas como letras.
- O idioma certo: ele diz ao motor que letras e acentos esperar. Um texto em português lido como inglês perde o ç e o ã.
- Um tipo de texto por vez: texto impresso numa só fonte é o que se lê melhor. Letra à mão, fontes decorativas e texto sobre fotos são os piores.
Problemas comuns e o que fazer
| O que você vê | O que fazer |
|---|---|
| Letras faltando ou quebradas | Tire a foto com luz uniforme, sem sombras; aumente o contraste ou escaneie a 300 dpi |
| Linhas misturadas ou fora de ordem | Endireite a imagem; para notas fiscais e tabelas, leia linha por linha |
| Sinais sem sentido nas bordas | Corte as bordas escuras do scanner, deixando uma margem branca estreita |
| Acentos perdidos | Escolha o idioma do texto antes de ler |
| Texto claro em fundo escuro mal lido | Inverta as cores antes: o motor espera texto escuro em fundo claro |
| 0 e O, 1 e l, 5 e S trocados | Confira no olho códigos, valores e nomes: não há palavras que ajudem o motor a adivinhar |
Erros em números são os mais graves, porque nada no texto os denuncia. Compare sempre valores, datas e números de referência com a imagem.
Prints, fotos e escaneamentos
Um print de tela é o caso fácil: nítido, reto e com luz uniforme. O único problema é o texto pequeno das interfaces, que a ferramenta do nTools amplia antes de ler. Uma foto de página traz os casos difíceis: perspectiva, sombras, desfoque e fundo carregado. Um escaneamento em scanner de mesa a 300 dpi é a melhor fonte para documentos longos.
PDF escaneado
Um PDF feito de um escaneamento é um conjunto de imagens: não dá para selecionar o texto, uma busca não acha nada e um leitor de tela não tem o que ler. As diretrizes de acessibilidade do W3C (WCAG) tratam esse PDF como imagens de texto e recomendam passar OCR nele e depois conferir o texto reconhecido e a ordem de leitura. Se você consegue selecionar o texto de um PDF, ele já é texto, e copiar é mais preciso que qualquer OCR.
O PDF para Word lê as páginas escaneadas com OCR e gera um documento editável; você também pode transformar as páginas em imagens e lê-las no Imagem para texto.
Para onde vai a imagem
Muitos serviços de OCR enviam a imagem para um servidor. O Tesseract também pode rodar dentro do navegador, compilado para WebAssembly: é assim que a ferramenta do nTools funciona, então a imagem e o texto ficam no seu aparelho. O navegador só baixa o motor e os dados do idioma escolhido.
Perguntas frequentes
O OCR consegue ler letra à mão?
Mal. O Tesseract é treinado com texto impresso; letra de forma bem caprichada às vezes funciona, a letra comum não. Letra à mão precisa de motores treinados especialmente para isso.
Qual a precisão do OCR?
Numa página impressa limpa escaneada a 300 dpi, quase todo caractere sai certo. Fotos, texto pequeno e fontes diferentes trazem mais erros. A confiança que a ferramenta mostra é uma estimativa do próprio motor, um sinal de alerta, não uma garantia.
Por que 0 e O, ou 1 e l, são trocados?
As formas são quase iguais em muitas fontes. Em palavras comuns os dados do idioma ajudam a escolher; em códigos, números de série e senhas não, então confira esses caractere por caractere.
Quais idiomas ele lê?
O Tesseract tem dados para mais de 100 idiomas. A ferramenta do nTools oferece inglês, espanhol, francês, alemão, italiano e português; escolha o idioma antes de ler, porque ele muda as letras que o motor espera.
O OCR mantém tabelas e formatação?
Não. O resultado é texto simples com quebras de linha. Tabelas são um ponto fraco conhecido do Tesseract: leia linha por linha, para cada linha ficar junta, e refaça as colunas depois.
Referências
- Tesseract documentation — Improving the quality of the output
- Tesseract documentation — Neural nets in Tesseract 4.00
- Tesseract.js — Pure JavaScript OCR for more than 100 languages
- W3C — WCAG 2.2 technique PDF7: performing OCR on a scanned PDF document
- W3C — Understanding WCAG 2.2: Images of Text (1.4.5)
Guias relacionados
- Endereços IP explicados: IPv4, IPv6 e as faixas reservadas
- Sub-redes e CIDR explicados: prefixos, máscaras e hosts utilizáveis
- Registros DNS explicados: A, AAAA, CNAME, MX, TXT e NS
- Um site está fora do ar ou é só com você? Como verificar, passo a passo
- Códigos de status HTTP e erros da Cloudflare: o que significam 403, 404, 429, 500, 503 e 521
- Timestamps Unix e fusos horários explicados
- Contagem de datas: dias entre datas, anos bissextos e semanas ISO
- Fusos horários e horário de verão: reuniões entre cidades
- Formatos de imagem explicados: JPEG, PNG, WebP, AVIF e HEIC
- O tamanho de uma imagem explicado: pixels, DPI, peso e qualidade
- Fotos de celular explicadas: HEIC, metadados EXIF e sua privacidade
- Força de senhas explicada: comprimento, entropia e frases-senha
- Funções de hash explicadas: SHA-256, checksums e hash de senhas
- JSON Web Tokens explicados: claims, assinaturas e validação segura
- Chaves de API explicadas: tamanho, formato, armazenamento e rotação
- UUIDs explicados: v4, v7 e como escolher a versão certa
- QR codes explicados: capacidade, correção de erros e tamanho de impressão
- Porcentagens e IVA explicados: somar, tirar e acumular
- Erros comuns em JSON e como corrigi-los
- Arquivos CSV explicados: separadores, aspas, codificação e Excel
- Codificações de texto explicadas: UTF-8, Base64 e codificação de URL
- Expressões regulares: classes, quantificadores e grupos
- MB ou MiB, Mbps ou MB/s: tamanho de arquivos e velocidade
- Expressões cron explicadas: campos, passos e fusos horários
- Parâmetros UTM explicados: marcar links para a análise de tráfego
- Ponto de equilíbrio, margem e ROAS: os números de um pequeno negócio
- Preço de freelancer explicado: valor da hora, diária e horas faturáveis
- RPM e CPM do YouTube explicados: quanto um criador ganha de verdade
- Contar caracteres: SMS, X, títulos do YouTube e emojis
- Contraste de cores explicado: razões WCAG, texto legível e formatos de cor
- Edição de PDFs no navegador: o que se mantém ao juntar, dividir e converter