Kurzausflug Speicherplatz
Wie ich im
vorigen Beitrag schrieb, hatte ich aus Platzgründen die Scans als JPEG abgespeichert. Pro Scanseite macht das ca. 1,2 MB. Bei der Konvertierung arbeite ich im folgenden auf Bitmapebene, so das pro Scanseite 25MB anfallen.
Für jedes Zwischenergebnis braucht es also genug Platz.
Gerade drehen
Mein Scanner scannt im A4 Format und die Seiten habe ich als Doppelseiten gescannt, die wie folgt aussehen:
Leider erwartet jeder spätere Verarbeitungsschritt die Seiten als Doppelseiten, also genau um 90° gedreht.
Hier hilft mir
ImageMagick weiter, mit dem ich wie folgt im Verzeichnis
ppm/ die neuen Bilder rotiere und gleichzeitig konvertiere.
PPM ist ein Bitmapformat (kommt aus der Unix-Ecke). Da zum Beispiel
unpaper dieses Format verarbeiten kann, sieht mein Aufruf so aus:
for i in *.jpg; do convert $i -rotate 90 ppm/$(basename $i ".jpg").ppm; done
Nun habe ich im Unterverzeichnis die korrekt gedrehten Bilder:
Doppelseiten auftrennen
Leider liegen meine Scans immer noch als Doppelseite vor. Mit
unpaper kann ich die Doppelseiten auftrennen. Dazu erzeuge ich zum einen ein neues Verzeichnis
ppm_single/ und rufe dann
unpaper mit den File-Pattern
"img%3d.ppm" auf.
%3d gibt hierbei an, daß 3 Ziffern enthalten sind. Die Option
"-op 2" splittet mir dann die Doppelseiten auf. Der komplette Aufruf lautet:
unpaper -op 2 ppm/img%03d.ppm ppm_single/img%03d.ppm
Der ganze Prozess dauert ein Weilchen und ich trinke erstmal 'nen Kaffee.
PS.: unpaper macht eigentlich noch ein paar Sachen mehr, zum Beispiel korrigiert es noch leichte Verdrehungen und entfernt Fliegendreck, lest dazu mal die Doku :)
Erstes PDF erzeugen
Da wir ja ein erstes Ergebnis haben wollen, bauen wir uns schnell die Seiten als PDF zusammen. Dazu wieder mit
ImageMagick aus den PPMs ein JPEGs erzeugen:
for i in ppm_single/*.ppm; do convert $i jpg/$(basename $i ".ppm").jpg; done
Jetzt habe wir im Verzeichnis
jpg/ alle Seiten als JPEG vorliegen. Diese müssen mit Hilfe von
pdfjoin, einem Programm aus der TexLive-Distribution, zusammengefügt werden. Es gibt aber auch andere Möglichkeiten, zum Beispiel mit
pdftk.
pdfjoin --outfile bilder_aus_dem_sachsenlande.pdf jpg/*.jpg
Das PDF hat 416 Seiten und ist 238MB groß. Wenn wir statt JPEG
pdfjoin mit
PNG genutzt hätten, wäre das PDF 1,6GB groß geworden.
Die Seitenaufteilung hat erstmal nur suboptimal funktioniert. Darum kümmern wir uns später nochmal.
DJVu erzeugen
Was ist denn DJVu?
Das ist ein krasses Kompressionsformat, ursprünglich für die Online-Präsentation von Bibliotheks- und Archivdaten entwickelt.
Archive.org verwendet
djvu für das
Millon Book Project Hinter
djvu stehen zwei Prinzipien:
- Trenne Scans in Vorder- und Hintergrundebenen auf
- Komprimiere jede der Ebenen mit dem bestmöglichen Verfahren
Eine Seite unseres gescanntes Buches besteht zum einen aus vergilbtem Papier, welches den Hintergrund darstellt. Dieser Hintergrund ist durch Farbverläufe, relativ weiche Übergänge und geringe Kontraständerungen gekennzeichnet. Der Hintergrund wird daher mit
Wavelets kodiert, ähnlich wie
JPEG2000 diese verwendet.
Zum anderen besteht die Seite aus Buchstaben die im Vergleich zur Umgebung einen sehr hohen Kontrast aufweisen. Dort interessiert es niemanden, ob diese innerhalb der Schrift leichte Farbnuancen aufweisen. Und vermutlich kommen auf der Seite auch viele gleiche Buchstaben vor. Diese Informationen werden ausgenutzt und die Buchstaben als Verweis auf eine Tabelle gespeichert.
Kurzum,
djvu ist richtig krasses Zeugs und wir bekommen eine gegenüber PDF deutlich kleinere Datei hin. Für weitere Informationen schaut Euch
djvulibre an. :)
Gut, gut, wie erzeuge ich das denn?
Auf
djvulibre von der obengenannten Webseite (aber auch bei Linux-Distributionen in der Regel dabei) gibt es das Programm
pdf2djvu. Ein PDF haben wir schon, und wir können folgenden Aufruf nutzen:
pdf2djvu --lossy -j0 --fg-colors=black --bg-subsample=4 -o bilder_aus_dem_sachsenlande.djvu bilder_aus_dem_sachsenlande.pdf
Alternativ können wir den
Online-Konverter nutzen.
So, das war es erstmal, die fertige
djvu-Datei ist 160MB groß.
Demnächst geht es weiter mit der Korrektur der Seitentrennung, der OCR-Verarbeitung und wie wir uns langsam Richtung Ebook vortasten.
Update 2012-11-21
Besser als das Tool
pdf2djvu ist
djvudigital, weil es einen besseren Algorithmus zum Auftrennen der Bildebenen in Hinter- und Vordergrund benutzt. Leider benötigt
djvudigital einen speziell angepassten
Ghostscript.
Daher entschied ich mich statt aus dem PDF aus den Einzelseiten ein DJVU zu erzeugen. Dies geht mit dem Programm
didjvu wie folgt:
didjvu bundle --output bilder_aus_dem_sachsenlande.djvu ppm_single/img*.ppm
Die erzeugte djvu-Datei ist nur noch 21MB groß, hier der Download-Link:
https://www.dropbox.com/s/nzij79ulmuh64m7/bilder_aus_dem_sachsenlande.djvu
Viel Spaß beim Durchblättern, demnächst geht es weiter...