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-pagese--skip-textcoprono 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.