Utilizando o motor Tesseract OCR, é possível extrair texto de imagens diretamente na linha de comando do Linux. Este processo é conhecido pela sua rapidez e precisão, abrangendo cerca de 100 idiomas. Vamos explorar como realizar essa tarefa.
O que é Reconhecimento Óptico de Caracteres (OCR)?
O Reconhecimento Óptico de Caracteres (OCR) é uma tecnologia que permite identificar e extrair palavras de uma imagem, transformando-as em texto editável. Esta tarefa, relativamente simples para humanos, representa um desafio significativo para computadores. As primeiras tentativas de OCR apresentavam resultados limitados, com dificuldades em lidar com variações de tipo e tamanho de fonte.
Apesar das limitações iniciais, o OCR era considerado uma ferramenta valiosa. Em situações onde se perdia a versão eletrónica de um documento, mas ainda se dispunha da versão impressa, o OCR permitia recriar uma versão digital editável. Mesmo que os resultados não fossem perfeitos, o tempo economizado era substancial. A correção manual era aceitável, dada a complexidade do processo de OCR, e ainda era preferível à redigitação completa do documento.
O Tesseract OCR, desenvolvido inicialmente pela Hewlett Packard nos anos 80, evoluiu significativamente. Em 2005, tornou-se open-source e atualmente conta com o suporte do Google. O Tesseract destaca-se pelo seu suporte multilíngue e pela sua precisão, sendo considerado um dos sistemas de OCR mais eficazes disponíveis, e ainda por cima, de uso gratuito.
Instalação do Tesseract OCR
Para instalar o Tesseract OCR no Ubuntu, utilize o seguinte comando:
sudo apt-get install tesseract-ocr
No Fedora, o comando é ligeiramente diferente:
sudo dnf install tesseract
Para usuários do Manjaro, o comando necessário é:
sudo pacman -Syu tesseract
Utilizando o Tesseract OCR
Vamos agora testar o Tesseract OCR com algumas imagens. A primeira contém um excerto do considerando 63 do Regulamento Geral de Proteção de Dados. O objetivo é verificar a capacidade do OCR em processar este texto.
Esta imagem apresenta um desafio devido à numeração sobrescrita no início de cada frase, comum em documentos legislativos.
Para usar o tesseract, precisamos fornecer as seguintes informações:
- O nome do arquivo de imagem a ser processado.
- O nome do arquivo de texto que será gerado com o texto extraído. Não é necessário especificar a extensão, que será sempre .txt. Se já existir um arquivo com o mesmo nome, ele será sobrescrito.
- A opção –dpi, para informar ao tesseract a resolução da imagem em pontos por polegada (dpi). Caso este valor não seja fornecido, o tesseract tentará determinar a resolução automaticamente.
Neste caso, o arquivo de imagem é “recital-63.png” com uma resolução de 150 dpi. O arquivo de texto será “recital.txt”. O comando será:
tesseract recital-63.png recital --dpi 150
O resultado foi bastante satisfatório. O único problema foram os números sobrescritos, que, devido à sua baixa definição, não foram reconhecidos corretamente. É importante notar que uma imagem de boa qualidade é fundamental para obter bons resultados.
O tesseract interpretou os números sobrescritos como aspas (“) e símbolos de grau (°), mas o texto principal foi extraído corretamente. O caractere final é um byte com o valor hexadecimal 0x0C, correspondente a um retorno de carro.
Agora, vamos testar outra imagem que contém texto em diferentes tamanhos, negrito e itálico.
O arquivo de imagem é “bold-italic.png”. Vamos criar um arquivo de texto com o nome “bold.txt”. O comando correspondente será:
tesseract bold-italic.png bold --dpi 150
Neste caso, não houve problemas e o texto foi extraído perfeitamente.
Trabalhando com Diferentes Idiomas
O Tesseract OCR oferece suporte a cerca de 100 idiomas. Para usar um idioma específico, é necessário instalá-lo previamente. Consulte a lista de idiomas suportados e identifique a abreviação do idioma desejado. Por exemplo, vamos instalar o suporte para o idioma galês, cuja abreviação é “cym” (abreviação de “Cymru”, que significa Galês).
O pacote de instalação segue o padrão “tesseract-ocr-” seguido da abreviação do idioma. Para instalar o idioma galês no Ubuntu, o comando será:
sudo apt-get install tesseract-ocr-cym
A imagem abaixo contém o primeiro verso do hino nacional galês.
Vamos verificar se o Tesseract OCR é capaz de processar este texto. Utilizaremos a opção -l (language) para indicar ao tesseract o idioma desejado:
tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150
O tesseract conseguiu processar o texto com perfeição, conforme demonstrado na imagem abaixo. “Da iawn, Tesseract OCR.”
Se o seu documento contiver dois ou mais idiomas, como um dicionário galês-inglês, você pode utilizar o sinal de adição (+) para especificar ao tesseract os idiomas adicionais:
tesseract image.png textfile -l eng+cym+fra
Utilizando Tesseract OCR com PDFs
O tesseract foi projetado para funcionar com arquivos de imagem, não sendo capaz de ler PDFs diretamente. No entanto, é possível extrair texto de PDFs através da conversão das páginas em imagens. Para isso, podemos usar o utilitário `pdftoppm`, que geralmente já vem instalado no seu sistema Linux.
Para este exemplo, utilizaremos uma cópia do artigo de Alan Turing sobre inteligência artificial, “Computing Machinery and Intelligence”.
Usaremos a opção -png para criar arquivos PNG. O nome do nosso PDF é “turing.pdf” e chamaremos nossos arquivos de imagem “turing-01.png”, “turing-02.png”, e assim por diante:
pdftoppm -png turing.pdf turing
Para executar o tesseract em cada imagem usando um único comando, utilizaremos um loop `for`. Para cada arquivo “turing-nn.png”, executaremos o tesseract e criaremos um arquivo de texto nomeado “text-” seguido pelo nome do arquivo de imagem:
for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;
Para juntar todos os arquivos de texto num só, usaremos o comando `cat`:
cat text-turing* > complete.txt
Como foi o resultado? Bastante bom, como pode ver abaixo. A primeira página foi mais desafiadora, devido à diversidade de estilos de texto e à presença de uma “marca d’água” vertical na borda direita.
No entanto, a saída ficou próxima do original. Embora a formatação tenha sido perdida, o texto está correto.
A marca d’água vertical foi transcrita como uma linha de rabiscos na parte inferior da página. O texto era demasiado pequeno para ser lido corretamente pelo tesseract, mas seria fácil de identificar e remover. O pior cenário seria a perda de caracteres no final de cada linha.
Curiosamente, as letras iniciais nas listas de perguntas e respostas na segunda página foram ignoradas.
Conforme demonstrado abaixo, as perguntas foram mantidas, mas o “Q” e o “A” no início de cada linha foram perdidos.
Os diagramas também não serão transcritos corretamente. Veja o que acontece quando tentamos extrair o conteúdo abaixo do PDF do Turing.
Como podemos observar no resultado, os caracteres foram lidos, mas o formato do diagrama foi perdido.
Novamente, o tesseract teve dificuldades com o tamanho reduzido dos subscritos, renderizando-os incorretamente.
Apesar disso, considerando as dificuldades impostas pelo exemplo escolhido, o resultado foi satisfatório.
Uma Ferramenta Útil Quando Necessário
O OCR não é uma ferramenta de uso diário. No entanto, quando surge a necessidade, é reconfortante saber que temos um mecanismo de OCR de alta qualidade à nossa disposição.