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 !


2 comentários:

  1. Uma pena... Mas deu certo não.

    constitucional.pdf constituicao_federal_51ed.epub converterPDF2TXT.sh oab
    jdt@jdt:~/Área de Trabalho/OAB XXII$ ./converterPDF2TXT.sh
    convert: unable to open image `meuarquivo.pdf': Arquivo ou diretório não encontrado @ error/blob.c/OpenBlob/2712.
    convert: no images defined `page.jpg' @ error/convert.c/ConvertImageCommand/3210.
    processing page 1
    Tesseract Open Source OCR Engine v3.04.01 with Leptonica
    Error opening data file /usr/share/tessdata/por.traineddata
    Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
    Failed loading language 'por'
    Tesseract couldn't load any languages!
    Could not initialize tesseract.
    cat: tempoutput.txt: Arquivo ou diretório não encontrado
    convert: unable to open image `meuarquivo.pdf': Arquivo ou diretório não encontrado @ error/blob.c/OpenBlob/2712.
    convert: no images defined `page.jpg' @ error/convert.c/ConvertImageCommand/3210.
    processing page 2
    Tesseract Open Source OCR Engine v3.04.01 with Leptonica
    Error opening data file /usr/share/tessdata/por.traineddata
    Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
    Failed loading language 'por'
    Tesseract couldn't load any languages!
    Could not initialize tesseract.
    cat: tempoutput.txt: Arquivo ou diretório não encontrado
    convert: unable to open image `meuarquivo.pdf': Arquivo ou diretório não encontrado @ error/blob.c/OpenBlob/2712.
    convert: no images defined `page.jpg' @ error/convert.c/ConvertImageCommand/3210.
    processing page 3
    Tesseract Open Source OCR Engine v3.04.01 with Leptonica
    Error opening data file /usr/share/tessdata/por.traineddata
    Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
    Failed loading language 'por'
    Tesseract couldn't load any languages!
    Could not initialize tesseract.
    cat: tempoutput.txt: Arquivo ou diretório não encontrado
    jdt@jdt:~/Área de Trabalho/OAB XXII$

    ResponderExcluir