Resumo
O OCR (reconhecimento óptico de caracteres) transforma pixels que parecem letras em texto de verdade. Numa foto nítida ou captura de tela de texto impresso, ele é quase perfeito; em letra manuscrita, fontes decorativas ou uma foto borrada de um cardápio, é quase inútil. O mecanismo deste site é o Tesseract, rodando no navegador com doze pacotes de idioma; a imagem fica no seu aparelho. A maioria dos resultados ruins vem da imagem, não do mecanismo, e dá para corrigir antes de apertar o botão.
Como o mecanismo funciona
O Tesseract nasceu na Hewlett-Packard em 1985, teve o código aberto em 2005 e é mantido pelo Google desde 2006. A versão 4 (2018) substituiu o classificador que lia caractere por caractere por uma rede neural LSTM que lê uma linha inteira de uma vez, e é por isso que ela lida com letras encostadas e fontes proporcionais que o mecanismo antigo não conseguia. O fluxo é este: encontrar as regiões de texto na página, dividi-las em linhas, passar cada linha pela rede e deixar um modelo de idioma (um dicionário e estatísticas de sequências de letras) decidir entre formas parecidas (l, 1, I; 0, O). Esse último passo é o motivo de escolher o idioma certo fazer diferença: um modelo de inglês lendo alemão vai “corrigir” straße para strasse ou coisa pior.
No navegador, o mecanismo é compilado para WebAssembly (cerca de 4 MB) e cada pacote de idioma tem 0,7–3 MB, baixado no primeiro uso e guardado em cache. Os pacotes de chinês e japonês são os grandes, porque há milhares de caracteres para conhecer.
O que define o resultado
Resolução. O Tesseract quer letras com cerca de 30 pixels de altura; abaixo de 20, a rede começa a chutar. Uma foto de celular de uma página serve; uma miniatura de 400 pixels de largura, não. Se você precisa fazer OCR de uma imagem pequena, amplie 2× antes: isso não acrescenta informação, mas dá espaço para o localizador de linhas trabalhar.
Contraste e uniformidade. Preto sobre branco, com iluminação uniforme. Uma foto de uma página sob uma luminária de mesa tem o centro claro e os cantos cinzentos; o mecanismo binariza a imagem com um único limiar e um lado da página desaparece. Fotografe com luz uniforme ou use um scanner.
Alinhamento. O mecanismo corrige alguns graus de inclinação. Uma página fotografada em ângulo é um trapézio, e as linhas convergem; gire e corte até o bloco de texto antes do OCR. O corte também elimina a borda da mesa, o seu polegar e a outra página, e cada um desses elementos produz uma linha de lixo.
Layout. Texto corrido em uma coluna é fácil. Duas colunas costumam ser detectadas. Tabelas, formulários, texto contornando imagens e legendas na margem saem numa ordem escolhida pelo mecanismo, e colunas de números perdem o alinhamento. Numa tabela, faça OCR das células de que você precisa em vez da página inteira.
Fonte. Fontes comuns de livro e de tela: excelente. Fontes condensadas, rebuscadas, cursivas ou só de contorno: fraco. Um texto composto numa fonte que os dados de treinamento nunca viram é lido forma por forma, e as correções do modelo de idioma pioram o resultado em vez de melhorá-lo.
Letra manuscrita. Na prática, sem suporte. O Tesseract foi treinado com texto impresso; letras de forma num formulário podem até passar, letra cursiva não. Reconhecimento de escrita à mão é outra família de modelos e não é o que esta ferramenta faz.
Idiomas e mistura
Escolha o idioma em que o texto está e, sempre que possível, só ele. Selecionar três idiomas triplica o conjunto de candidatos para cada caractere, deixa o reconhecimento mais lento e reduz a precisão. Texto misto, como um documento em chinês com nomes de produtos em inglês, é o caso para usar dois idiomas juntos (chinês + inglês): o mecanismo alterna por palavra. Há doze idiomas disponíveis: inglês, chinês simplificado e tradicional, japonês, coreano, espanhol, francês, alemão, português, russo, italiano e vietnamita.
PDFs digitalizados
Um PDF que veio de um scanner é uma imagem de cada página; o texto não está lá para ser copiado. Renderize as páginas como imagens a 200–300 dpi e faça o OCR delas. Renderizar a 72 dpi (resolução de tela) gera letras de 10 pixels e um texto sem sentido.
O que “99%” significa na prática
Uma boa leitura de OCR numa página limpa erra cerca de um caractere em cada cem. Numa página de 500 palavras, isso dá trinta erros, a maioria em números, nomes e pontuação, justamente as partes que não dá para revisar lendo de corrido. Confira cada número com o original antes de o texto ir para qualquer lugar onde ele importe; o OCR é um rascunho, não uma transcrição.