OCR

Da MontelLUG.

Riconoscimento ottico dei caratteri HOWTO sui programmi per fare OCR optical character recognition

Capita sovente di dover rielaborare il testo di documenti che abbiamo scansionato. Normalmente dalla scansione si ottengono documenti di tipo grafico, che non sono editabili con i programmi di editing del testo, quali LibreOffice Writer e affini.

E allora che si fa? Anche in Linux ci sono degli ottimi programmi che si occupano di svolgere questo lavoro: esaminare un documento di tipo grafico ed estrapolarne il testo. Purtroppo sono pochi i programmi che hanno una interfaccia grafica utile (invito chi li conosce ad integrare questa pagina), ma si può a tal proposito usare un comodo script che riporto di seguito.

Comandi utili da utilizzare

Se il file di origine è un PDF di una sola pagina è possibile utilizzare direttamente i comandi che seguono.

Prima fase: conversione del file di origine in PDF in un file tif, utilizzando il programma convert

convert -monochrome -density 300 sorgente.pdf nuovo_sorgente.tif

Ulteriori opzioni: in alcuni casi, convertire il file di origine in un file bianco e nero consente di ottenere migliori risultati: provare quindi con

convert -density 300 sorgente.pdf -depth 8 -background white +matte nuovo_sorgente.tif

Seconda fase: lettura del file .tif e salvataggio del testo contenuto, utilizzando il programma tesseract

tesseract nuovo_sorgente.tif testo.txt

Ulteriori opzioni: è possibile dire al programma in quale in lingua è scritto il testo; in più si può specificare se il testo è in una sola colonna o più: provare quindi con

tesseract -l ita -psm 4 nuovo_sorgente.tif testo.txt


Script per automatizzare il riconoscimento

Se, come di solito capita, il documento è composto di più pagine possiamo automatizzare la lettura dell'intero documento con il seguente script.

PAGINE=11               # imposta il numero delle pagine di cui si compone il PDF 
SORGENTE=sorgente.pdf   # imposta il nome del file PDF da elaborare 
OUTPUT=testo.txt        # imposta il nome del file di output 
RESOLUTION=400          # imposta la risoluzione utilizzata dallo scanner di elaborazione 
touch $OUTPUT
for i in `seq 1 $PAGINE`; do
    convert -density $RESOLUTION $SORGENTE\[$i\] -depth 8 -background white +matte page$i.tif
    tesseract page$i.tif page$i -l ita -psm 4 
    cat $OUTPUT page$i.txt > temp.txt
    rm $OUTPUT
    rm page$i.tif
    rm page$i.txt
    mv temp.txt $OUTPUT
done

Programmi con interfaccia grafica


Ogni integrazione è ben gradita.