Reconhecimento de palavras em arquivos PDF com OCR

Categoria: Linux Publicado: Quarta, 27 Janeiro 2021 Escrito por Helio Loureiro Imprimir

Não sei já descrevi isso aqui ao longo desses 20 anos de blog/site, mas a maioria das coisas que publico são pra mim mesmo.  Como tenho certeza que não vou lembrar o que fiz daqui algum tempo (provavelmente dias), eu deixo aqui registrado como bloco de notas pra referência.  E, claro, espero que isso também ajude mais pessoas além de mim.

Como moro fora do Brasil já faz algum tempo, e ainda não domino a língua (na verdade só apanho dela), eu preciso de tempos em tempos pegar documentos e ler.  A forma que encontrei é passar o documento em um scanner, se for papel, mas ter a certeza de ter o documento digitalizado em formato PDF no final.  Esse foi o formato que mais facilitou o uso de outro software pra OCR (Optical Character Recognition), ou reconhecimento ótico de caracter.

Também percebi que o melhor é ter o documento separado em vários PDFs se possível, um pra cada página.  Isso facilita pro software de OCR de reconhecer cada página corretamente.

Pra usar como exemplo aqui vou adotar um documento sobre o imposto de renda sueco.  Ele está disponível na página do que seria equivalente à receita federa: https://www.skatteverket.se

O documento será esse aqui: https://www.skatteverket.se/download/18.7eada0316ed67d7282aedd/1582550479006/dags-att-deklarera-skv325-utgava41.pdf

Pra começar, apenas baixar o documento usando o curl:

curl -o report.pdf https://www.skatteverket.se/download/18.7eada0316ed67d7282aedd/1582550479006/dags-att-deklarera-skv325-utgava41.pdf

Em seguida serão necessários os seguintes pacotes de software (assumindo um sistema ubuntu ou debian): curl, ghostscript, imagemagick, tesseract-ocr e tesseract-<língua>.  Como no caso eu pego os documentos em sueco, uso então tesseract-swe.

sudo apt install curl ghostscript imagemagic tesseract-ocr tesseract-swe

O arquivo então será baixado e salvo como "report.pdf".  Ao abrir o documento eu vejo quantas páginas são, o que poderia ser feito de alguma outra forma mais automática, mas a visualização assim é fácil até pra detectar logo se tem alguma página pra pular com imagens.  Esse documento tem 8 páginas.

Então pra separar o arquivo em PDF baixado em páginas separadas, que depois vai facilitar o trabalho de tradução, eu uso o seguinte comando:

for i in $(seq 1 8)
    do
    gs -sDEVICE=pdfwrite -q -dNOPAUSE -dBATCH -sOutputFile=report-$i.pdf -dFirstPage=$i -dLastPage=$i report.pdf
done

Com as páginas criadas separadamente em formato PDF e com os nomes como report-1.pdf, report-2.pdf, report-3.pdf, etc e o próximo passo é converter cada uma no formato TIFF, que é o formato onde o reconhecimento de caracteres funciona melhor.  O programa "convert" que faz isso é parte do pacote imagemagick

for i in $(seq 1 8)
    do
    convert report-$i.pdf report-$i.tiff
done

Isso gera então as sequências report-1.tiff, report-2.tiff, etc.

Agora finalmente o passo final pra ter os textos em plain text.

for i in (seq 1 8)
do tesseract report-$i.tiff report-$i -l swe done

E isso cria os documentos com extensão "txt".  Esse documento que escolhi não foi muito feliz na detecção de caracteres.  O arquivo que mais foi reproduzido de forma satisfatória foi a página 7:

helio@xps13ubuntu:exemplo$ cat report-7.txt
Har du skatt att betala på din
preliminära skatteuträkning?

    

Tabellen på sidan 6 visar när skatten senast ska vara
betald. Fram till dess kan du göra delbetalningar.
Du kan när som helst betala in pengar till ditt
skattekonto. Du kan betala antingen med Swish
BIS

Om duvill betala med Swish loggar du in på Mina
sidor och följer instruktionerna där, Du kan också
enkelt betala din kvarskatt med Swish i samband
med att du deklarerar med edegitimation i
tjänsten. Du kan betala skatt med maximalt
15.000 kronor per dygn med Swish.

Om du betalar genom att göra en inbetalning till
BARR Sr ehe
angeditt OCR-nummer som du hittar i din preli-
PST RR NAS TT NT
www.skatteverketse/ocr.

Läs mer på wwwskotteverket.se/betalokvarskatt.

O passo seguinte é copiar essas páginas e colocar no google translator.  Eu não automatizo esse passo e uso o simple copy&paste no browser.

E esse seria o resultado do trecho acima:

Você tem imposto a pagar sobre o seu
cálculo preliminar do imposto?

    

A tabela na página 6 mostra quando o imposto deve durar
pago. Até então, você pode parcelar.
Você pode depositar dinheiro no seu a qualquer momento
conta fiscal. Você pode pagar com Swish
BIS

Se você quiser pagar com Swish, faça login no Mina
páginas e siga as instruções lá, você também pode
pague facilmente seu imposto residual com o Swish em conjunto
com isso você declara com edegitimação em
o serviço. Você pode pagar impostos com um máximo
SEK 15.000 por dia com Swish.

Se você pagar fazendo outro pagamento
BARR Sr ehe
número OCR especificado que você encontra na sua
PST RR NAS TT NT
www.skatteverketse / ocr.

Leia mais em wwwskotteverket.se/betalokvarskatt. 
Acessos: 590