martedì 28 agosto 2012

Creazione di una "Cartella attiva" per la conversione delle scansioni in PDF con OCR

Come promesso un paio di post fa sono a pubblicare il lavoro fatto per la creazione di una "Smart Folder" per la creazione automatica di documenti PDF abilitati alla ricerca "full text" a partire da pdf che contengono solamente l'immagine della scansione.

Questo post non vuole essere un HOWTO di tipo "copia e incolla" anche se cercherò di essere il più preciso possibile, bensì una traccia per colui che è interessato all'argomento e alla creazione in generale di Cartelle attive.

Gli ingredienti che userò sono:
  • un computer (fisico o virtuale non importa) con linux -- io ho provato la soluzione con Ubuntu 12.04 LTS sia 32 che 64 bit;
  • il software di manipolazione delle immagini imagemagick
  • il software di manipolazione dei pdf pdftk
  • il software di manipolazione delle scansioni unpaper
  • altro software per la manipolazione delle immagini exactimage
  • il software di OCR cuneiform
  • il software incron (per il monitoraggio del filesystem)
  • opzionale il software sendxmpp per la messaggistica
L'idea è la seguente: creare una cartella in cui "deporre" un file pdf uscito da una scansione piuttosto brutale e ripulirlo, farlo passare al vaglio di un OCR, quindi ricreare un pdf che contenga l'immagine alla quale viene associato "sotto e nascosto" il testo riconosciuto dall'OCR possibilmente secondo la stessa disposizione. In questo modo quando si cercherà una parola nel pdf, questa verrà evidenziata nel punto giusto.

Cominciamo.
Per prima cosa ho utilizzato tutti e soli pacchetti presenti nei repository ufficiali della distribuzione Ubuntu 12.04 LTS, quindi sussi i pacchetti sopra elencati sono stati installati mediante apt-get

sudo apt-get install imagemagick pdftk unpaper exactimage cuneiform incron sendxmpp

Creare una cartella destinata alla conversione:

mkdir ~/OCR
mkdir ~/OCR/lavoro
mkdir ~/OCR/fatti

Salvare il seguente script in una posizione adeguata (per esempio ~/bin/OCRPdf.sh)

#!/bin/bash
FILE=$1
WORK=$(date +"%H%M%S%N")
LASTFOUR=$(echo $FILE|sed 's/^.*\(....\)$/\1/')
if [ $LASTFOUR = ".pdf" ]; then
  DIRECTORY=$(dirname "$FILE")
  cd "$DIRECTORY"
  mkdir ./lavoro/$WORK
  cp "$FILE" ./lavoro/$WORK/
  cd lavoro/$WORK/
  pdfimages "$FILE" images
  for i in $(ls images-*); do
    LARG=$(identify -format "%[fx:w]" $i)
    ALTE=$(identify -format "%[fx:h]" $i)
    if [ "$LARG" -gt "$ALTE" ]; then
      convert $i -rotate -90 $i
    fi
    unpaper --overwrite $i $i
    cuneiform -l ita -f hocr -o $i.hocr $i
    hocr2pdf -i $i -o $i-ocr.pdf < $i.hocr
  done
  pdftk images-*-ocr.pdf cat output "$FILE"
  mv "$FILE" ../../fatti/
  cd ..
  rm -rf $WORK
  echo "OPERAZIONE OCR-PDF terminata sul file $(basename "$FILE"). Verificare il risultato in $DIRECTORY/fatti"|sendxmpp -t -u mionomeutentegmail -o gmail.com mionomeutentegmail
fi

creare il file  ~/.sendxmpprc per configurare l'invio delle notifiche via google talk e inserire una riga analoga alla seguente:

mioutentegmail@gmail.com;talk.google.com miapasswordgmail

naturalmente sostituento mionomeutentegmail e miapasswordgmail con i valori oportuni.

Cambiare i diritti del file così che altri non possano accedere alla password:

chmod 600 ~/ .sendxmpprc

Abilitare il proprio utente a usare incron aggiungendo una riga nel file /etc/incron.allow

riportando il proprio username

aggiungere il proprio utente al gruppo incron:

usermod -a -G incron miousername

Attivare il monitoraggio della cartella ~/OCR mediante il comando

incrontab -e

creare una riga analoga alla seguente:

~/OCR IN_CREATE,IN_MOVED_TO ~/bin/OCRPdf.sh $@/$#

Il gioco è fatto: mettete un pdf "grezzo" nella cartella OCR e questo verrà masticato, digerito e quindi messo una volta trasformato nella cartella fatti dentro a OCR. Se tutto è stato configurato bene vi arriverà un messaggio su google talk!

Un suggerimento:
Se si unisce questa soluzione al fatto che la cartella monitorata sia tra quelle di Dropbox e che Dropbox sia tenuto sempre online tramite dropbox.py che non necessita di avere effettuato la login grafica per rimanere online si otterrà un sistema remoto di ocr via rete tutto personale!

Questo post è stato scritto un po' troppo in fretta per essere perfetto. Prego chi lo utilizzasse di inserire commenti così che possa correggere eventuali imprecisioni.


Nessun commento: