OCR no Linux: Extraia texto de imagens com o Tesseract!

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.