Archivio

Posts Tagged ‘ocr’

OCR su file PDF tramite script nautilus

Nell’articolo Scansione testo con OCR su Linux, ho spiegato come effettuare l’acquisizione di testo OCR direttamente al termine di una scansione effettuata con l’applicativo XSane, sfruttando ImageMagick e Tesseract. In Ubuntu 10.04 il software predefinito per la scansione è il nuovo Simple Scan, ottimo dal punto di vista della semplicità e della velocità d’uso, ma come ci si poteva aspettare, carente di funzionalità OCR. Peraltro Simple Scan consente di salvare le scansioni multipagina in formato PDF, e non TIFF, richiedendo di conseguenza la conversione a quest’ultimo formato per la maggior parte degli applicativi OCR gratuiti.

Con questo articolo, vedremo come creare uno “script nautilus“, cioè una sequenza di comandi richiamabile dal menu contestuale di Nautilus, cioè il tasto destro su un file o una cartella.

Nel menu vengono elencati tutti i file eseguibili presenti nella cartella nascosta .gnome2/nautilus-scripts dell’utente. Dopo aver aperto la propria Cartella home, attivare dal menu Visualizza la voce Mostra file nascosti, aprire quindi la cartella .gnome2, e al suo interno nautilus-scripts.

Creare un file vuoto (tasto destro > Crea documento > File vuoto), modificarlo nell’editor di testo inserendo lo script. Infine per renderlo eseguibile, accedere alle proprietà del file (tasto destro > Proprietà) e nella scheda Permessi attivare l’opzione Consentire l’esecuzione del file come programma.

Tornando allo script oggetto di questo articolo, esso richiede i pacchetti: imagemagick, tesseract-ocr, tesseract-ocr-ita (per il dizionario parole italiano), installabili quindi tramite il comando:

sudo apt-get install imagemagick tesseract-ocr tesseract-ocr-ita

Lo script nautilus da creare nella cartella .gnome2/nautilus-scripts, a cui io ho dato il nome “Scansione OCR” è il seguente:

#!/bin/sh
for arg
do
 if [ ${arg##*.} = "pdf" ]
 then
 convert -colorspace rgb -density 500 "$arg" -resize 50% -monochrome -median 1 /tmp/scansione_ocr_tmp.tif | zenity --progress --pulsate --text="Conversione in TIFF in corso..." --auto-close
 tesseract /tmp/scansione_ocr_tmp.tif "$arg".txt -l ita  | zenity --progress --pulsate --text="Acquisizione OCR in corso..." --auto-close
 rm /tmp/scansione_ocr_tmp.tif
 else
 tesseract "$arg" "$arg".txt -l ita  | zenity --progress --pulsate --text="Acquisizione OCR in corso..." --auto-close
 fi
done

Lo script completo è scaricabile a questo indirizzo: http://paste.ubuntu.com/8091658/

Funzionamento: lo script esegue anzitutto un controllo sull’estensione del file; se è PDF esegue la conversione in formato TIFF, nella cartella temporanea /tmp, lancia l’acquisizione OCR, quindi elimina il file TIFF temporaneo; se è un formato diverso (es. è già TIF), avvia direttamente l’acquisizione OCR.

La conversione PDF > TIFF viene eseguita tramite il comando convert della libreria ImageMagick; tra le opzioni ho specificato -monochrome, per ottenere un TIFF in bianco/nero (più facile da elaborare) e -median 1, per pulire l’immagine dalle imperfezioni tramite il Median Filter. I più esperti di ImageMagick, potranno arricchire il comando con ulteriori perfezionamenti.

L’acquisizione OCR genera quindi il testo in un file nella stessa cartella del PDF sorgente, chiamato <nomefilesorgente>.txt.

Infine, i comandi zenity servono per ottenere a video una finestra che indica lo stato dell’operazione.

Penso che questo script possa essere utile, sicuramente si più migliorare e perfezionare, ma semplifica il procedimento di acquisizione OCR, che il Linux resta un “punto critico”.


Aggiornamento 17/01/2015: i parametri precedente utilizzati per la conversione in TIFF, sembrano non andare più bene alla libreria Tesseract. Prendendo spunto dall’articolo “Using Tesseract OCR with PDF scans” ho quindi modificato lo script, rimuovendo -colorspace rgb e -monochrome, e aggiungendo -depth 8; inoltre ho modificato i DPI (density) a 300.

Lo script aggiornato è scaricabile a questo indirizzo: http://paste.ubuntu.com/9769367/

Categorie:Guide Tag:, , , ,

Scansione testo con OCR su Linux

Oggi volevo riscrivere a computer lo statuto dell’associazione di volontariato, il cui file originale non si trova più. Allora ho pensato di fare una bella scansione ed importare il testo tramite riconoscimento OCR… ma volevo rimanere su Ubuntu!

Fortunatamente ho trovato una soluzione semplice, rapida, e soprattutto efficiente (il testo viene riconosciuto molto bene) grazie a XSane (software predefinito di scansione in Linux) + Tesseract (progetto per riconoscimento OCR a linea di comando). Ecco la pagina dove ho trovato i passaggi da fare: http://linux.p2pforum.it/wiki/OCR_con_tesseract_in_XSane

Testato con successo in Ubuntu 8.10 (Intrepid Ibex).

Essenzialmente, bisogna anzitutto installare i pacchetti (io lo faccio con Synaptic…):

  • imagemagick
  • tesseract-ocr
  • tesseract-ocr-ita

Poi, scaricare lo script xsane2tess; io a questo punto ho modificato la riga 15 con: TEMP_DIR=/tmp/ , in modo da non dover creare una cartella temporanea sotto la home (va benissimo quella globale…), quindi la riga 74, dove c’è il comando che richiama tesseract, aggiungendo in fondo: -l ita , così da fargli usare il dizionario italiano.

Posizionare quindi il file in /usr/bin, dandogli i permessi di esecuzione; dalla shell si possono usare questi comandi:

  • chmod a+rx xsane2tess
  • sudo mv xsane2tess /usr/bin

Infine, aprire XSane, andare in Preferenze > Impostazioni > OCR, e impostare il campo “Comando OCR” con xsane2tess. La configurazione è così completata!

Per effettuare una scansione con riconoscimeno OCR, avviare XSane, selezionare la modalità “Visualizzatore“, e come profondità di colori “Binario“. Avviare la scansione (tasto Acquisisci), alla fine apparirà una finestra contenente la pagina, fare click sul secondo pulsante della barra in alto, con le lettere ABC DEF; scegliere il file TXT dove salvare il testo, e dopo aver confermato attendere pazientemente!

Non c’è che dire: un passo avanti per il mondo Linux, vista l’importanza in certi casi dell’OCR…

Categorie:Guide Tag:, , ,