Espongo la tecnica che utilizzo per aggiungere il testo mediante riconoscimento ottico (OCR) a un file PDF contenente il campionamento per immagini (c.d. scansione) di un libro, precisando che è valida per un ambiente operativo Linux (personalmente uso la distribuzione Devuan

Per chi invece si trovasse a utilizzare Windows


=== Preliminarmente, è preferibile trattare il PDF perché l'OCR possa funzionare meglio:
1) Si divide il PDF in singole immagini jpeg con ottimizzazioni:
Codice: Seleziona tutto
$ pdftoppm -gray -jpeg -r 200 -scale-to 1653 -jpegopt quality=85,optimize=y miofile.pdf miofileout.pdf -jpeg
-r <number>
E' la risoluzione X e Y, in DPI. Il default è 150 DPI (per la stampa è preferibile utilizzare almeno 200 o 300 DPI).
-scale-to <pixels>
Scala il lato lungo delle pagine (la larghezza per le pagine in orizzontale, l'altezza per quelle in verticale) al numero di pixel indicato (1167x1653 corrisponde a un A5 con 200DPI); la dimensione del lato corto viene scalata di conseguenza, senza alterare il rapporto larghezza/altezza.
-gray
Genera un file PGM in scala di grigi (anziché un file PPM a colori).
-jpeg
Genera un file JPEG anziché un PGM o PPM.
-jpegopt <jpeg-options>
<jpeg-options> deve avere la forma "<opt>=<val>[,<opt>=<val>]"
e le opzioni <opt> sono:
quality
Imposta la qualità dell'immagine JPEG (un valore intero tra 0 and 100)
progressive
Seleziona l'output progressive JPEG (valori possibili: "y", "n").
optimize
Stabilisce se ottimizzare l'immagine JPEG con l'algoritmo Huffman, che produce file di dimensioni minori (valori possibili: "y", "n").
A seconda dei casi (in particolare: formato delle pagine, qualità di partenza delle immagini, esigenza di mantenere il colore o no ecc.) si scelgono le opzioni e i valori più opportuni.
2) Fatto ciò, per contenere le dimensioni finali del file da generare, è possibile (opzionalmente) ridurre maggiormente la dimensione delle immagini JPEG prodotte al punto 1):
Codice: Seleziona tutto
$ mkdir diroptim
$ for file in miofileout*.jpg; do jpegoptim --dest=./diroptim --size=20% $file; done
--dest=<path>
specifica una cartella in cui salvare le immagini JPEG ridotte (altrimenti verranno sovrascritte le immagini di partenza)
--size=<size>
consente di indicare la riduzione desiderata, espressa in KB o in %
L'opzione --size comporta una perdita di qualità delle immagini, per cui il valore va "tarato" in modo opportuno, per tentativi, in modo da otterere una buona riduzione delle dimensioni senza però compromettere eccessivamente la qualità rispetto a quanto necessario per la buona riuscita dell'OCR.
3) Infine, si ricostruisce il PDF (unendo le immagini JPEG):
Codice: Seleziona tutto
$ cd diroptim
$ img2pdf miofileout*.jpg --pdfa --output miofile2.pdf
=== Per aggiungere il testo mediante riconoscimento ottico (OCR) al file PDF:
Codice: Seleziona tutto
$ ocrmypdf --output-type pdfa miofile2.pdf miofile-ocr.pdf
=== Per generare anche un file DJVU contenente il testo OCR:
Codice: Seleziona tutto
$ pdf2djvu miofile-ocr.pdf -o miofile-ocr.djvu
Sicuramente è possibile procedere in modo più accurato di così (per esempio, è possibile ottimizzare l'OCR, inserire una copertina e un retro, numerare le pagine, inserire un indice, inserire dei metadati), ma allora le cose si complicano... Invece, con questo metodo, si può ottenere un buon risultato con il minimo sforzo.
Buon divertimento!

