quinta-feira, 17 de outubro de 2013

[OCR] Transformando PDF/Imagem em texto (Ubuntu)

Aí vieram até o "cara da informática", eu no caso, com algumas folhas na mão e pediram:
 - Bota essas folhas no scanner e transforma em texto para gente por favor?  #partiu !

A impressora aqui no trabalho não faz essa mágica. Então lá fui eu atrás de software...
A palavra chave aqui é OCR: Optical Character Recognition!
OCR é a tecnologia para reconhecimento de caracteres. Como numa imagem não podemos simplesmente copiar e colar o texto, utilizamos programas que implementam essa tecnologia a fim de extrair esses caracteres.

Os procedimentos a seguir foram executados no Ubuntu 13.04.
Primeiramente eu baixei um programa de OCR, o Tesseract, e junto, seu pacote para reconhecer caracteres em português:

  • sudo apt-get install tesseract-ocr tesseract-ocr-por imagemagick

Notem que também será feita a instalação do Image Magick, isso porque irei utilizá-lo num script para automatizar o processo. Image Magick é um incrível editor/conversor de imagem através de linha de comando. Se um dia precisarem escrever um script para editar/converter imagem, busquem mais por esse software, recomendo!

Se você passou uma só folha no scanner e ainda salvou em imagem, simplesmente faça:

  • tesseract minhaImagem.jpg novoArquivoTexto

Mas se você colocou no scanner várias folhas e ainda transformou em PDF, meu caso, vamos fazer um script para automatizar sua conversão:

#!/bin/sh
STARTPAGE=1 # Digite aqui o número da primeira página a ser lida
ENDPAGE=3 # Digite aqui o número da última página a ser lida
SOURCE=meuarquivo.pdf # Nome do PDF original
OUTPUT=meuarquivo.txt # Nome do arquivo de saída. O resultado é dado em texto simples.
RESOLUTION=300 # Digite aqui qual a resolução que o documento foi scaneado

touch $OUTPUT
for i in `seq $STARTPAGE $ENDPAGE`; do
    convert -density $RESOLUTION $SOURCE\[$(($i - 1 ))\] page.jpg
    echo processing page $i
    tesseract -l por page.jpg tempoutput
    cat tempoutput.txt >> $OUTPUT
done

Salve esse bloco num arquivo de texto, sugestão, converterPDF2TXT.sh
Altere os primeiros parâmetro que estão comentados com as informações do seu arquivo de entrada e saída. Depois altere as permissões do arquivo para execução e então é só rodar!

  • chmod 775 converterPDF2TXT.sh
  • ./converterPDF2TXT.sh

O interessante é scannear utilizando uma resolução alta, por exemplo, 300dpi.

Há uma maneira de fazer tudo isso graficamente, sem precisar do script shell. Instale o gscan2pdf, ele fará interface para o Tesseract. Porém, não tive sucesso, esse programa não enxergou o Tesseract, então não converteu (problema em pc's 64bits). Fica a dica para quem quiser testar.

Té + gente !