OCR con tesseract PDF

3 minute read Published:

Come trasformare un PDF in doc/html/txt usando tesseract OCR open source

Installare Tesseract

Tesseract è un OCR inizialmente sviluppato da HP e poi da Google. Io utilizzo un Mac, quindi è sufficiente avviare il terminale usare brew(il gestore di pacchetti mancanti per MacOS):

$ brew install tesseract

Per vedere se tutto è andato a buon fine:

$ tesseract -v
tesseract 3.05.01
 leptonica-1.74.4
  libjpeg 9b : libpng 1.6.31 : libtiff 4.0.8 : zlib 1.2.8

Se proviamo a trasformare al volo un PDF otteniamo:

$ tesseract input/clausole\ standard.pdf stdout
Error in pixReadStream: Pdf reading is not supported
Error in pixRead: pix not read
Error during processing.

Dobbiamo estrarre le immagini dal PDF.

Installare Poppler

Su MacOSX per avere il comando che estrae le immagini dal PDF è Poppler (che fornisce il comando pdfimages):

$ brew install poppler

Con Poppler installato, posso chiedere la lista delle immagini del documento PDF scansionato (nel mio caso un contratto con font 10):

$ pdfimages -list input/contratto.pdf
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1240  1753  gray    1   8  jpeg   no        26  0   150   150 9217B 0.4%
   1     1 stencil  1032   744  -       1   1  ccitt  no        27  0   300   300 13.0K  14%
   1     2 stencil  2160  2672  -       1   1  ccitt  no        28  0   300   300 49.6K 7.0%
   2     3 image    1240  1753  gray    1   8  jpeg   no         4  0   150   150 10.6K 0.5%
   2     4 stencil  2152  2580  -       1   1  ccitt  no         5  0   300   300 75.9K  11%
   3     5 image    1240  1753  gray    1   8  jpeg   no         9  0   150   150 9624B 0.4%
   3     6 stencil  2136  2564  -       1   1  ccitt  no        10  0   300   301 62.7K 9.4%
   4     7 image    1240  1753  gray    1   8  jpeg   no        14  0   150   150 8711B 0.4%
   4     8 stencil  2144  2120  -       1   1  ccitt  no        15  0   301   300 59.0K  11%

Estrarre le immagini

Ho creato:

  • una cartella input con dentro il pdf da convertire
  • una cartella output dove metterò i file di immagini estratti dal PDF

Per estrarre le immagini usiamo il comando appena visto:

$ pdfimages input/contratto.pdf ./output/contratto.ppm

Nella cartella output troveremo una serie di file (uno per immagine) in formato ppm o pbm (Portable PixMap e Portable BitMap).

Osservando le immagini - nel mio caso - noto che a me interessano solo le pbm: estraggo quindi il testo dalle immagini:

$ for i in *.pbm ; do tesseract $i $i; done;

Mi ritrovo una serie di file txt con il testo all’interno. Niente male! Piuttosto che riscrivere tutto, ora non mi resta che sistemare la formattazione.

comments powered by Disqus