⟳ Automazione

OCR dei documenti scansionati: PDF ricercabili con OCRmyPDF

Come rendere ricercabili i PDF scansionati con OCRmyPDF e Tesseract: installazione, lingua italiana, raddrizzamento, cartelle intere e verifiche.

Un archivio di documenti scansionati senza OCR è un archivio in cui non si trova nulla. Il PDF contiene solo fotografie delle pagine: la ricerca di Windows non vede il testo, la funzione «trova» del lettore PDF non trova parole, copiare un paragrafo è impossibile. Il riconoscimento ottico dei caratteri risolve il problema aggiungendo uno strato di testo invisibile sotto l'immagine. Lo strumento libero più pratico per farlo in automatico è OCRmyPDF, che usa il motore Tesseract.

Che cosa fa OCRmyPDF

OCRmyPDF prende un PDF scansionato e restituisce un PDF che, a prima vista, è identico all'originale. La differenza è che ogni parola riconosciuta è presente come testo selezionabile, posizionato esattamente sopra la sua immagine. Il risultato si legge come prima, ma si può cercare, copiare e indicizzare. Per impostazione predefinita il file prodotto è un PDF/A, il formato pensato per la conservazione a lungo termine.

Installazione

OCRmyPDF è un programma a riga di comando scritto in Python che si appoggia a Tesseract e Ghostscript. Su Linux si installa dal gestore di pacchetti della distribuzione, su macOS con Homebrew; su Windows la documentazione ufficiale indica di installare separatamente Tesseract e Ghostscript e poi OCRmyPDF tramite pip. È fondamentale aggiungere il pacchetto della lingua italiana di Tesseract: senza, il riconoscimento usa l'inglese e sbaglia sistematicamente accenti e apostrofi.

Per verificare le lingue disponibili:

tesseract --list-langs

Nell'elenco deve comparire ita.

Il primo documento

ocrmypdf -l ita scansione.pdf scansione_ocr.pdf

Per documenti misti si possono indicare più lingue unite dal segno più, per esempio -l ita+eng: utile per contratti con clausole in inglese o manuali tecnici. Aggiungere lingue inutili, però, rallenta e peggiora leggermente il riconoscimento.

Opzioni che migliorano il risultato

Le scansioni reali raramente sono perfette. Alcune opzioni correggono i difetti più comuni:

Opzione Effetto
--deskew Raddrizza le pagine scansionate leggermente storte
--rotate-pages Ruota le pagine capovolte o di lato in base al testo riconosciuto
--clean Ripulisce l'immagine dal rumore prima dell'OCR (richiede il programma unpaper)
--skip-text Salta le pagine che contengono già testo, invece di fermarsi con un errore
--optimize 1 Ottimizza il peso del file senza perdita di qualità visibile

--skip-text è importante per i lavori automatici. Per prudenza OCRmyPDF si rifiuta di elaborare un PDF che contiene già testo, per evitare di rovinare un documento digitale. Con questa opzione le pagine già leggibili vengono lasciate intatte e solo quelle scansionate vengono elaborate, situazione frequente nei fascicoli che mescolano documenti generati al computer e fogli firmati a mano.

Elaborare intere cartelle

Il vero vantaggio arriva quando l'OCR diventa parte del flusso di lavoro. Un piccolo script Python può elaborare tutti i PDF di una cartella:

import subprocess
from pathlib import Path

origine = Path("scansioni_in_arrivo")
destinazione = Path("archivio_ricercabile")
destinazione.mkdir(exist_ok=True)

for pdf in sorted(origine.glob("*.pdf")):
    uscita = destinazione / pdf.name
    if uscita.exists():
        continue
    risultato = subprocess.run(
        ["ocrmypdf", "-l", "ita", "--deskew", "--rotate-pages",
         "--skip-text", str(pdf), str(uscita)],
        capture_output=True, text=True,
    )
    print(pdf.name, "OK" if risultato.returncode == 0 else risultato.stderr[-300:])

Il controllo uscita.exists() permette di rilanciare lo script ogni sera senza rielaborare i file già fatti. Pianificato con l'Utilità di pianificazione di Windows o con cron, lo script trasforma la cartella dello scanner in un archivio ricercabile senza alcun intervento.

La qualità della scansione conta più del software

Nessun motore OCR recupera ciò che la scansione ha perso. Alcune indicazioni pratiche:

  • una risoluzione di 300 dpi è il valore comunemente consigliato per il testo; risoluzioni molto più basse peggiorano sensibilmente il riconoscimento;
  • per documenti di solo testo, la scansione in scala di grigi è spesso migliore del bianco e nero puro, che può cancellare i caratteri sottili;
  • carta stropicciata, timbri sovrapposti e scrittura a mano restano difficili: Tesseract è pensato per il testo stampato;
  • tabelle complesse vengono riconosciute parola per parola, ma la struttura delle colonne non sempre si conserva nel testo copiato.

Verificare il risultato

Nel mio lavoro, dopo aver impostato un flusso di OCR, controllo a campione alcuni documenti cercando parole che so essere presenti: un cognome, un numero di fattura, un importo. Se la ricerca le trova, il testo è affidabile per l'uso quotidiano. Va però ricordato che l'OCR non è una trascrizione certificata: per dati da cui dipendono decisioni importanti, come importi da registrare in contabilità, il valore riconosciuto va sempre confrontato con l'immagine.

In sintesi

  • L'OCR aggiunge un testo invisibile sotto l'immagine e rende il PDF ricercabile.
  • OCRmyPDF usa Tesseract: installate il pacchetto della lingua italiana e usate -l ita.
  • --deskew, --rotate-pages e --skip-text coprono i problemi più frequenti.
  • Uno script con controllo dei file già elaborati automatizza intere cartelle.
  • Scansionate a 300 dpi e verificate i dati importanti confrontandoli con l'immagine.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche