Scansione: differenze tra le versioni
m (categorie) |
Pol (discussione | contributi) Nessun oggetto della modifica |
||
(9 versioni intermedie di 2 utenti non mostrate) | |||
Riga 5: | Riga 5: | ||
==Scansione== | ==Scansione== | ||
Fai un po' di prove di scansioni singole di pagine che rappresentino bene in termini di distribuzione del colore, testo e distribuzione del contenuto quello che andrai a scansionare: se la stampante te lo permette, valuta se è opportuno regolare contrasti e luminosità per ottenere una scansione più nitida. Imposta una buona risoluzione: deve essere sufficientemente alta da rendere nitido e definito il risultato finale, ma non troppo da appesantire eccessivamente ogni fase del lavoro; normalmente 400 ''ppi'' sono un buon compromesso. Imposta infine il formato di scansione: è consigliabile scegliere un formato ben definito anziché la modalità di autorilevamento del formato, in modo da ottenere immagini tutte uguali. Cerca infine di posizionare il documento in modo da farne coincidere il più possibile l'angolo con quello dello scanner. | |||
Per la scansione, se lo scanner ne è provvisto, è consigliabile la modalità PDF multipagina. Normalmente la memoria interna di uno scanner è molto limitata, quindi il lavoro potrà dover essere spezzato su più PDF distinti. In questo caso sarà sufficiente rinominarli con un nome progressivo (''e.g.'' SCAN01.pdf, SCAN02.pdf ''etc''.) e poi riassemblarli in un unico documento: | |||
<code>$ pdftk SCAN*.pdf cat output SCAN_ASS.pdf</code> | |||
A questo punto avrai finalmente un file PDF unico contenente tutte le scansioni ordinate. | |||
==Post-produzione== | ==Post-produzione== | ||
Riga 16: | Riga 23: | ||
<code>$ pdftk multipage_document.pdf burst</code> | <code>$ pdftk multipage_document.pdf burst</code> | ||
questo genera tanti file quanti sono le pagine nominati come pg_001.pdf, pg_002.pdf, ecc. Questi possono essere convertiti in png usando: | questo genera tanti file quanti sono le pagine nominati come pg_001.pdf, pg_002.pdf, ecc. Questi possono essere convertiti in png usando su zsh: | ||
<code>$ for i in *.pdf; convert -density 300 $i "${i%.pdf}.png";</code> | <code>$ for i in *.pdf; convert -density 300 $i "${i%.pdf}.png";</code> | ||
altrimenti su bash: | |||
<code>$ for i in *.pdf; do convert -density 300 $i "${i%.pdf}.png"; done </code> | |||
Così si ottengono le immagini da dare in pasto a scantailor. | Così si ottengono le immagini da dare in pasto a scantailor. | ||
L'output di scantailor sono una serie di immagini tiff che possono essere compattate in un unico .pdf generando prima una .tiff multipagina: | L'output di scantailor sono una serie di immagini tiff che possono essere compattate in un unico .pdf generando prima una .tiff multipagina: | ||
<code>$ tiffcp out_di_scantailor/*. | <code>$ tiffcp out_di_scantailor/*.tif multipage.tif</code> | ||
Probabilmente vorrai dare un'aggiustatina alla dimensione di ogni immagine, in particolare se hai scelto di lavorare su un progetto a risoluzione molto alta. Se vuoi riscalare del 60% le tue immagini puoi dare un comando del genere: | |||
<code>$ for i in *.tif; convert -resize 60% $i "${i%.tif}_2.tif";</code> | |||
che genererà in output le immagini ridimensionate mettendoci un _2 alla fine. | |||
Puoi infine procedere a creare il tuo pdf: | |||
<code>$ tiff2pdf | <code>$ tiff2pdf multipage.tiff megapdf.pdf</code> | ||
====Troubleshooting==== | |||
Il ciclo for fallisce con l'errore: | |||
<code> convert: attempt to perform an operation not allowed by the security policy `PDF' </code> | |||
È necessario modificare le regole di policy di Imagemagick 7 nel file <code>/etc/ImageMagick-7/policy.xml</code>, <b>commentando</b> la seguente riga: | |||
<code> <policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" /> </code> | |||
===Briss=== | ===Briss=== | ||
Riga 35: | Riga 62: | ||
dalla cartella dove si è scompattato il software. | dalla cartella dove si è scompattato il software. | ||
== METADATI == | |||
è tutto una bozza qui quando ho un attimo di tempo lo metto apposto | |||
pdf -> usa exiftool | |||
djvu -> usa djvused (per djvu non c'è uno standard sui tag da utilizzare) | |||
tips per anonimizzare il tuo file: | |||
usa MAT (Metadata Anonymizer Tool) | |||
oppure per un PDF: | |||
<code>$ exiftool -overwrite_original -t -Creator="" -CreateDate="" -CreatorTool="" -Producer="" -DocumentID="" -InstanceID="" -SigningAuthority="" topsecretsegretissimofile.pdf </code> | |||
mentre per un DJVU: | |||
<code>$ djvused -v topsecretsegretissimofile.djvu -e "remove-meta; save" </code> | |||
== OCR == | |||
Il passo finale della digitalizzazione è il processo di riconoscimento dei caratteri. Migliore è la qualità della scansione e migliore è stato il loro post-processing e migliore è l'accuratezza che ci si può aspettare da un'operazione OCR. | |||
=== Tesseract OCR === | |||
È il software più completo, può fare OCR in molte lingue diverse e sono disponibili molti pacchetti di ''trained data'' per varie lingue. | |||
=== OCRopus === | |||
È un progetto open inizialmente basato su Tesseract e ora dotato di un proprio motore OCR; è in forte crescita. | |||
=== Pypdfocr === | |||
È uno script in Python che combina l'azione di GhostScript, ImageMagick, Poppler e Tesseract OCR. Prende in input un PDF e scrive in output un PDF identico ma con un layer OCR. L'utilizzo è estremamente semplice e nella maggior parte dei casi basta specificare la lingua e dare: | |||
<code>$ pypdfocr -l eng mybeautifulbook.pdf</code> | |||
Per rendere più veloce l'operazione, nel caso in cui il documento abbia già subito un processo di post-produzione come quello indicato nella sezione precedente, allora si può dare: | |||
<code>$ pypdfocr -l eng --skip-preprocess mybeautifulbook.pdf </code> | |||
Il processo è estremamente pesante dal punto di vista computazionale: nel caso in cui si stia lavorando con un PC portatile, potrebbe essere necessaria l'alimentazione da rete elettrica. Potrebbe essere inoltre utile monitorare periodicamente la temperatura della CPU e posizionare la macchina in modo che il sistema di raffreddamento massimizzi il flusso d'aria. | |||
=== Pagine Doppie === | |||
Capita di trovare documenti .pdf che siano scansioni di buona qualità oppure file vettoriali, ma che siano a doppia pagina. Nel caso in cui si tratti di una scansione, è possibile procedere con scantailor, trattanto ogni pagina per l'immagine che è. Nel caso in cui si abbia a che fare con file vettoriali, si vuole normalmente conservare l'informazione vettoriale. Si può procedere con pdfcrop sulle singole pagine. In primo luogo si può individuare la porzione di file che ha le pagine doppie e isolarla, che nell'esempio seguente è tra la pagina 2 e la fine del libro: | |||
<code>$ pdftk libro.pdf cat 2-end output partial.pdf</code> | |||
A questo punto è possibile separare il file in tanti pdf a pagina singola: | |||
<code>$ mkdir workdir && cd workdir && pdftk ../partial.pdf burst</code> | |||
È poi possibile dare su ogni singolo file il seguente comando: | |||
<code>$ pdfcrop --bbox "<left> <bottom> <right> <top>" input.pdf output.pdf</code> | |||
I margini da inserire possono essere ricavati, elencati nello stesso ordine, dando il comando: | |||
<code>$ pdftk input.pdf dump_data | grep PageMediaRect</code> | |||
Se, ad esempio, dopo aver separato il pdf nelle pagine singole l'ultimo comando restituisce: | |||
<code>$ pdftk pg_0001.pdf dump_data | grep PageMediaRect | |||
PageMediaRect: 0 0 935.433 680.315</code> | |||
Per le pagine sinistre si dà: | |||
<code>$ for i in *.pdf; do pdfcrop --bbox "0 0 467.7165 680.315" $i ../"${i%.pdf}_L.pdf"; done</code> | |||
Mentre per le pagine destre si dà: | |||
<code>$ or i in *.pdf; do pdfcrop --bbox "467.7165 0 935.433 680.315" $i ../"${i%.pdf}_R.pdf"; done</code> | |||
A questo punto si possono riunire le pagine destre e sinistre: | |||
<code>$ mkdir separate && mv *_L.pdf separate/ && mv *_R.pdf separate && mv separate && pdftk *.pdf cat output prefinal.pdf</code> | |||
A questo punto si unisce la prima pagina del file iniziale al file finale: | |||
<code>$ pdftk libro.pdf cat 1 separate/prefinal.pdf cat output completoseparato.pdf </code> | |||
==Condivisione== | ==Condivisione== |
Versione attuale delle 18:13, 30 mar 2019
In questa pagina sono raccolte informazioni, procedure e software utili a eseguire il passaggio da libro cartaceo a una sua copia digitale. Questa operazione permette da un lato di arricchire la biblioteca digitale e dall'altro di creare copie cartacee da un libro originale; il processo come descritto prevede che dopo la scansione il documento sia elaborato per renderlo più facilmente fruibile da chi lo userà dopo di te. Le operazioni di post-produzione sono utili soprattuto quando si voglia ristampare e rilegare il libro o digitalizzarlo tramite un OCR, ma non sono indispensabili.
Scansione
Fai un po' di prove di scansioni singole di pagine che rappresentino bene in termini di distribuzione del colore, testo e distribuzione del contenuto quello che andrai a scansionare: se la stampante te lo permette, valuta se è opportuno regolare contrasti e luminosità per ottenere una scansione più nitida. Imposta una buona risoluzione: deve essere sufficientemente alta da rendere nitido e definito il risultato finale, ma non troppo da appesantire eccessivamente ogni fase del lavoro; normalmente 400 ppi sono un buon compromesso. Imposta infine il formato di scansione: è consigliabile scegliere un formato ben definito anziché la modalità di autorilevamento del formato, in modo da ottenere immagini tutte uguali. Cerca infine di posizionare il documento in modo da farne coincidere il più possibile l'angolo con quello dello scanner.
Per la scansione, se lo scanner ne è provvisto, è consigliabile la modalità PDF multipagina. Normalmente la memoria interna di uno scanner è molto limitata, quindi il lavoro potrà dover essere spezzato su più PDF distinti. In questo caso sarà sufficiente rinominarli con un nome progressivo (e.g. SCAN01.pdf, SCAN02.pdf etc.) e poi riassemblarli in un unico documento:
$ pdftk SCAN*.pdf cat output SCAN_ASS.pdf
A questo punto avrai finalmente un file PDF unico contenente tutte le scansioni ordinate.
Post-produzione
La post produzione può essere eseguita con diversi programmi free. Alcuni di questi permettono di svolgere solo alcune semplici operazioni molto rapidamente altri invece, più pesanti sia in termini di risorse che di tempo, assistono l'intera post produzione del documento. Le operazioni principali da svolgere in questa fase sono: riorientare correttamente le pagine, dividere le scansioni qualora siano state fatte a due pagine per foglio, selezionare l'area della scansione che dovrà finire nel pdf, inserire i margini e comprimere il pdf a dimensioni che lo rendano usabile. Di seguito una collezione di toolchain che possono essere utili per queste operazioni.
Scantailor
Sicuramente il software più completo, ha moltissime opzioni e può fare praticamente tutte le operazioni elencate sopra. Scantailor è pacchettizzato sia su arch che su debian e può essere quindi installato tramite il gestore di pacchetti. E' molto intuitivo e ha una wiki in cui è spiegato il workflow. Per lavorare con scantailor dopo aver scannerizzato un documento sulla Develop Ineo250 è necessario dividere il pdf in una serie di immagini .png. Questo può essere fatto così: si copia il pdf multipagina in una nuova cartella e quindi lo si divide in tanti pdf contenenti una singola pagina:
$ pdftk multipage_document.pdf burst
questo genera tanti file quanti sono le pagine nominati come pg_001.pdf, pg_002.pdf, ecc. Questi possono essere convertiti in png usando su zsh:
$ for i in *.pdf; convert -density 300 $i "${i%.pdf}.png";
altrimenti su bash:
$ for i in *.pdf; do convert -density 300 $i "${i%.pdf}.png"; done
Così si ottengono le immagini da dare in pasto a scantailor.
L'output di scantailor sono una serie di immagini tiff che possono essere compattate in un unico .pdf generando prima una .tiff multipagina:
$ tiffcp out_di_scantailor/*.tif multipage.tif
Probabilmente vorrai dare un'aggiustatina alla dimensione di ogni immagine, in particolare se hai scelto di lavorare su un progetto a risoluzione molto alta. Se vuoi riscalare del 60% le tue immagini puoi dare un comando del genere:
$ for i in *.tif; convert -resize 60% $i "${i%.tif}_2.tif";
che genererà in output le immagini ridimensionate mettendoci un _2 alla fine.
Puoi infine procedere a creare il tuo pdf:
$ tiff2pdf multipage.tiff megapdf.pdf
Troubleshooting
Il ciclo for fallisce con l'errore:
convert: attempt to perform an operation not allowed by the security policy `PDF'
È necessario modificare le regole di policy di Imagemagick 7 nel file /etc/ImageMagick-7/policy.xml
, commentando la seguente riga:
<policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />
Briss
Briss è un programma in Java che prende in input un pdf, e permette di selezionare da ciasucna pagina una o più aree che corrisponderanno alle pagine del pdf in output. E' un programma molto semplice e intuitivo che è comodo quando si devono fare solo modifiche veloci su un documento già allineato ecc. Per lanciarlo è sufficiente usare da linea di comando:
$ java -jar briss.jar
dalla cartella dove si è scompattato il software.
METADATI
è tutto una bozza qui quando ho un attimo di tempo lo metto apposto
pdf -> usa exiftool djvu -> usa djvused (per djvu non c'è uno standard sui tag da utilizzare)
tips per anonimizzare il tuo file:
usa MAT (Metadata Anonymizer Tool)
oppure per un PDF:
$ exiftool -overwrite_original -t -Creator="" -CreateDate="" -CreatorTool="" -Producer="" -DocumentID="" -InstanceID="" -SigningAuthority="" topsecretsegretissimofile.pdf
mentre per un DJVU:
$ djvused -v topsecretsegretissimofile.djvu -e "remove-meta; save"
OCR
Il passo finale della digitalizzazione è il processo di riconoscimento dei caratteri. Migliore è la qualità della scansione e migliore è stato il loro post-processing e migliore è l'accuratezza che ci si può aspettare da un'operazione OCR.
Tesseract OCR
È il software più completo, può fare OCR in molte lingue diverse e sono disponibili molti pacchetti di trained data per varie lingue.
OCRopus
È un progetto open inizialmente basato su Tesseract e ora dotato di un proprio motore OCR; è in forte crescita.
Pypdfocr
È uno script in Python che combina l'azione di GhostScript, ImageMagick, Poppler e Tesseract OCR. Prende in input un PDF e scrive in output un PDF identico ma con un layer OCR. L'utilizzo è estremamente semplice e nella maggior parte dei casi basta specificare la lingua e dare:
$ pypdfocr -l eng mybeautifulbook.pdf
Per rendere più veloce l'operazione, nel caso in cui il documento abbia già subito un processo di post-produzione come quello indicato nella sezione precedente, allora si può dare:
$ pypdfocr -l eng --skip-preprocess mybeautifulbook.pdf
Il processo è estremamente pesante dal punto di vista computazionale: nel caso in cui si stia lavorando con un PC portatile, potrebbe essere necessaria l'alimentazione da rete elettrica. Potrebbe essere inoltre utile monitorare periodicamente la temperatura della CPU e posizionare la macchina in modo che il sistema di raffreddamento massimizzi il flusso d'aria.
Pagine Doppie
Capita di trovare documenti .pdf che siano scansioni di buona qualità oppure file vettoriali, ma che siano a doppia pagina. Nel caso in cui si tratti di una scansione, è possibile procedere con scantailor, trattanto ogni pagina per l'immagine che è. Nel caso in cui si abbia a che fare con file vettoriali, si vuole normalmente conservare l'informazione vettoriale. Si può procedere con pdfcrop sulle singole pagine. In primo luogo si può individuare la porzione di file che ha le pagine doppie e isolarla, che nell'esempio seguente è tra la pagina 2 e la fine del libro:
$ pdftk libro.pdf cat 2-end output partial.pdf
A questo punto è possibile separare il file in tanti pdf a pagina singola:
$ mkdir workdir && cd workdir && pdftk ../partial.pdf burst
È poi possibile dare su ogni singolo file il seguente comando:
$ pdfcrop --bbox "<left> <bottom> <right> <top>" input.pdf output.pdf
I margini da inserire possono essere ricavati, elencati nello stesso ordine, dando il comando:
$ pdftk input.pdf dump_data | grep PageMediaRect
Se, ad esempio, dopo aver separato il pdf nelle pagine singole l'ultimo comando restituisce:
$ pdftk pg_0001.pdf dump_data | grep PageMediaRect
PageMediaRect: 0 0 935.433 680.315
Per le pagine sinistre si dà:
$ for i in *.pdf; do pdfcrop --bbox "0 0 467.7165 680.315" $i ../"${i%.pdf}_L.pdf"; done
Mentre per le pagine destre si dà:
$ or i in *.pdf; do pdfcrop --bbox "467.7165 0 935.433 680.315" $i ../"${i%.pdf}_R.pdf"; done
A questo punto si possono riunire le pagine destre e sinistre:
$ mkdir separate && mv *_L.pdf separate/ && mv *_R.pdf separate && mv separate && pdftk *.pdf cat output prefinal.pdf
A questo punto si unisce la prima pagina del file iniziale al file finale:
$ pdftk libro.pdf cat 1 separate/prefinal.pdf cat output completoseparato.pdf