È possibile estrarre il testo dalle immagini sulla riga di comando di Linux utilizzando il motore OCR Tesseract. È veloce, preciso e funziona in circa 100 lingue. Ecco come usarlo.
Sommario:
Riconoscimento ottico dei caratteri
Riconoscimento ottico dei caratteri (OCR) è la capacità di guardare e trovare parole in un’immagine, quindi estrarle come testo modificabile. Questo semplice compito per gli esseri umani è molto difficile da svolgere per i computer. I primi sforzi erano goffi, per non dire altro. I computer erano spesso confusi se il carattere tipografico o le dimensioni non erano di gradimento del software OCR.
Tuttavia, i pionieri in questo campo erano ancora tenuti in grande considerazione. Se hai perso la copia elettronica di un documento, ma hai ancora una versione stampata, OCR potrebbe ricreare una versione elettronica modificabile. Anche se i risultati non erano accurati al 100%, questo è stato comunque un ottimo risparmio di tempo.
Con un po ‘di riordino manuale, riavresti il tuo documento. Le persone perdonavano gli errori commessi perché capivano la complessità del compito che doveva affrontare un pacchetto OCR. Inoltre, era meglio che riscrivere l’intero documento.
Da allora le cose sono migliorate notevolmente. L’applicazione Tesseract OCR, scritta da Hewlett Packard, iniziato negli anni ’80 come applicazione commerciale. Era open source nel 2005 ed è ora supportato da Google. Ha funzionalità multilingue, è considerato uno dei sistemi OCR più accurati disponibili e puoi usarlo gratuitamente.
Installazione di Tesseract OCR
Per installare Tesseract OCR su Ubuntu, usa questo comando:
sudo apt-get install tesseract-ocr
Su Fedora, il comando è:
sudo dnf install tesseract
Su Manjaro, devi digitare:
sudo pacman -Syu tesseract
Utilizzando Tesseract OCR
Porremo una serie di sfide a Tesseract OCR. La nostra prima immagine che contiene testo è un estratto dal considerando 63 del Regolamento generale sulla protezione dei dati. Vediamo se OCR è in grado di leggere questo (e rimanere sveglio).
È un’immagine complicata perché ogni frase inizia con un debole numero in apice, tipico dei documenti legislativi.
Dobbiamo fornire al comando tesseract alcune informazioni, tra cui:
Il nome del file immagine che vogliamo che elabori.
Il nome del file di testo che creerà per contenere il testo estratto. Non dobbiamo fornire l’estensione del file (sarà sempre .txt). Se esiste già un file con lo stesso nome, verrà sovrascritto.
Possiamo usare l’opzione –dpi per dire a tesseract cosa è il file punti per pollice (dpi) la risoluzione dell’immagine è. Se non forniamo un valore dpi, tesseract proverà a capirlo.
Il nostro file immagine si chiama “recital-63.png” e la sua risoluzione è di 150 dpi. Creeremo un file di testo da esso chiamato “recital.txt”.
Il nostro comando ha questo aspetto:
tesseract recital-63.png recital --dpi 150
I risultati sono molto buoni. L’unico problema sono gli apici: erano troppo deboli per essere letti correttamente. Un’immagine di buona qualità è fondamentale per ottenere buoni risultati.
tesseract ha interpretato i numeri in apice come virgolette (“) e simboli dei gradi (°), ma il testo effettivo è stato estratto perfettamente (il lato destro dell’immagine doveva essere ritagliato per adattarsi qui).
Il carattere finale è un byte con il valore esadecimale di 0x0C, che è un ritorno a capo.
Di seguito c’è un’altra immagine con testo di diverse dimensioni, sia in grassetto che in corsivo.
Il nome di questo file è “bold-italic.png”. Vogliamo creare un file di testo chiamato “bold.txt”, quindi il nostro comando è:
tesseract bold-italic.png bold --dpi 150
Questo non ha posto problemi e il testo è stato estratto perfettamente.
Utilizzo di lingue diverse
Tesseract OCR supporta circa 100 lingue. Per usare una lingua, devi prima installarla. Quando trovi la lingua che desideri utilizzare nell’elenco, prendi nota della sua abbreviazione. Installeremo il supporto per il gallese. La sua abbreviazione è “cym”, che è l’abbreviazione di “Cymru”, che significa gallese.
Il pacchetto di installazione si chiama “tesseract-ocr-” con l’abbreviazione della lingua contrassegnata alla fine. Per installare il file della lingua gallese in Ubuntu, useremo:
sudo apt-get install tesseract-ocr-cym
L’immagine con il testo è sotto. È la prima strofa dell’inno nazionale gallese.
Vediamo se Tesseract OCR è all’altezza della sfida. Useremo l’opzione -l (lingua) per far conoscere a tesseract la lingua in cui vogliamo lavorare:
tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150
tesseract si adatta perfettamente, come mostrato nel testo estratto di seguito. Da iawn, Tesseract OCR.
Se il tuo documento contiene due o più lingue (come un dizionario dal gallese all’inglese, ad esempio), puoi utilizzare un segno più (+) per dire a tesseract di aggiungere un’altra lingua, in questo modo:
tesseract image.png textfile -l eng+cym+fra
Utilizzo di Tesseract OCR con i PDF
Il comando tesseract è progettato per funzionare con i file di immagine, ma non è in grado di leggere i PDF. Tuttavia, se è necessario estrarre del testo da un PDF, è possibile utilizzare prima un’altra utilità per generare una serie di immagini. Una singola immagine rappresenterà una singola pagina del PDF.
L’utilità pdftppm di cui hai bisogno dovrebbe essere già installato sul tuo computer Linux. Il PDF che utilizzeremo per il nostro esempio è una copia del documento fondamentale di Alan Turing sull’intelligenza artificiale, “Computing Machinery and Intelligence”.
Usiamo l’opzione -png per specificare che vogliamo creare file PNG. Il nome del file del nostro PDF è “turing.pdf”. Chiameremo i nostri file di immagine “turing-01.png”, “turing-02.png” e così via:
pdftoppm -png turing.pdf turing
Per eseguire tesseract su ogni file immagine utilizzando un singolo comando, è necessario utilizzare un file per loop. Per ciascuno dei nostri file “turing-nn.png” eseguiamo tesseract e creiamo un file di testo chiamato “text-” più “turing-nn” come parte del nome del file immagine:
for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;
Per combinare tutti i file di testo in uno, possiamo usare cat:
cat text-turing* > complete.txt
La filigrana verticale è stata trascritta come una riga senza senso nella parte inferiore della pagina. Il testo era troppo piccolo per essere letto con precisione da tesseract, ma sarebbe stato abbastanza facile trovarlo ed eliminarlo. Il risultato peggiore sarebbe stato caratteri randagi alla fine di ogni riga.
Curiosamente, le singole lettere all’inizio dell’elenco di domande e risposte a pagina due sono state ignorate. La sezione del PDF è mostrata di seguito.
Come puoi vedere sotto, le domande rimangono, ma la “Q” e la “A” all’inizio di ogni riga sono andate perse.
Anche i diagrammi non verranno trascritti correttamente. Diamo un’occhiata a cosa succede quando proviamo a estrarre quello mostrato sotto dal PDF di Turing.
Come puoi vedere nel nostro risultato qui sotto, i caratteri sono stati letti, ma il formato del diagramma è andato perso.
Ancora una volta, tesseract ha lottato con le piccole dimensioni dei pedici e sono stati resi in modo errato.
In tutta onestà, però, è stato comunque un buon risultato. Non siamo stati in grado di estrarre un testo semplice, ma questo esempio è stato scelto deliberatamente perché rappresentava una sfida.
Una buona soluzione quando ne hai bisogno
L’OCR non è qualcosa che dovrai usare quotidianamente. Tuttavia, quando se ne presenta la necessità, è bene sapere che hai uno dei migliori motori OCR a tua disposizione.