Preprocessing mit Scantailor

Im Folgenden Artikel erkläre ich die Vorbereitung (Preprocessing) eines PDF-Dokuments für die Texterkennung mit OCRopus. Dabei behandle ich die Konvertierung in die benötigten Formate (pdf2tif, tif2png) und die Bearbeitung mit der Software Scantailor. Das Ziel ist von den unbearbeiteten PDFs zu binarisierten und „barrierefreien“ PNGs zu kommen, denn OCRopus benötigt schwarz/weiß- oder Graustufen-binarisierte Eingangsbilder im PNG-Format. Als Beispieldokument dient der Artikel „Von Metzgern vnd Fleischhauwern“1 aus dem Allgemeinen Schauplatz von Tommaso Garzoni. Dies ist eine dreiseitige PDF „artikel.pdf“ in Farbe, 600 DPI, jeweils zwei Spalten; Herauskommen sollen sechs schwarz/weiß-binarisierte PNGs ohne Störelemente (keine Bilder, Initiale oder Ähnliches).

Vorbereitung

Die Arbeitsumgebung ist Ubuntu 17.04, die benötigten Programm sind: pdftk, scantailor und imagemagick. Zu Beginn also die Console öffnen und schauen, ob sie installiert sind.

sudo apt-get install pdftk scantailor imagemagick

Jetzt erstellt man einen Arbeitsordner (hier der Ordner „ocr“ im Home-Verzeichnis) und wechsle hinein:

mkdir ocr
cd ocr

Hierhin kopiert man die PDF.

Von Metzgern vnd Fleischhauwern
Die drei Seiten des nativen PDFs des Artikels

Konvertierung PDF2TIF

Im ersten Schritt transformiert man die PDF in das verlustfreie TIF-Format, das Scantailor lesen kann (bei Platzmangel kann es auch gleich PNG/JPG sein). Dazu spaltet die PDF mit dem Befehl burst des Programms pdftk auf:

pdftk artikel.pdf burst

Man erhält drei Dateien pg_0001.pdf, pg_0002.pdf, pg_0003.pdf.

Die ursprungs-PDF kann man löschen:

rm artikel.pdf

die restlichen PDFs kann man in TIFs umwandeln mit einer Schleife und dem convert-Befehl:

for p in *.pdf; do convert -density 600 -trim "$p" -quality 100 "$p".tif; done

Die Dateien haben jetzt die Endung .pdf.tif, wen das stört kann sie umbenennen mit:

rename 's/\.pdf.tif$/.tif/' /*.pdf.tif 

Scantailor

Nun öffnet man Scantailor und importiert die TIFs. Dazu navigiert man in den Ordner mit den TIFs (hier ~/ocr), läd die Dateien in Scantailor, korrigiert die DPI-Zahl (hier war die Ausgangsauflösung 600 DPI) und importiert die Bilder.

Nach dem Import trennt man die Spalten auf. Bei Bildern, die aus der bloßen Seite bestehen (ohne Überstände, schwarze Ränder etc.), funktioniert die automatische Erkennung der Spalten recht gut, das ist hier nicht der Fall. Im Fenster „Seiten aufteilen“, lässt man das Seitenlayout manuell doppelspaltig für alle Seiten erkennen.

Danach sollte man die Seiten automatisch drehen lassen. Dazu klickt man die erste Seite im rechen Frame an (damit alle Seiten von Anfang an bearbeitet werden) und auf den „Play“-Button im linken Frame. Scantailor richtet nun die Seiten so aus, das der Text möglichst gerade ist.

Im nächsten Schritt wählt man den Inhalt aus, der interessiert. In meinem Fall ist es nur der Artikel „Von den Metzgern vnd Fleischhauwern“, keine Seitenzahlen, keine Kopf- oder Fußnoten, kein Folgeartikel. Seiten, die nicht relevant sind lösche ich heraus. Mit dem Mausrad kann man hinein und hinaus zoomen, manchmal setzt Scantailor die Erkennungsfelder minimal zu eng an den Text.

Stege lassen bei den Output-Bildern einen (weißen) Rand stehen. Will man mit Graustufen arbeiten, würde ich die Stege deaktivieren, da sie zu Irritationen bei der Zeilen und Zeichenerkennung führen können. Da wir mit schwarz/weiß-Binarisierung arbeiten ist das egal. Bei den Stegen deaktiviere ich den Haken bei „Größe an andere Seiten anpassen“ um meine Bilder nicht künstlich größer oder kleiner zu zerren. Auf alle Bilder anwenden.

Erst die Ausgabe erzeugt Output-Bilder, auf den vorhergehenden Seiten sind bis jetzt nur Einstellungen vorgenommen wurden. Die Ausgabe bietet in den ersten drei Schritten Einstellungen für die DPI-Zahl an (wir lassen 600DPI), Auswahlmöglichkeiten für verschiedene Farbmethoden (schwarz/weiß ist unsere Wahl) und zeigt einen Regler für den Schwellenwert (Threshold) für die Pixelsetzung. Ein niedriger Wert macht die Schrift dünner und entfernt Störungen/ Flecken, ein höherer Wert macht die Schrift dicker, lässt aber auch die Geräuschrate (Noise) ansteigen. Als Faustregel gilt, dass Buchstaben wie m oder n nicht in einzelne Bestandteile zerfallen, aber Buchstaben wie e, o oder a auch nicht ihre Hohlräume verlieren. Oftmals kann ein Schwellenwert von +15 oder sogar +30 nicht schaden, wenn die Buchstaben dadurch klarer werden und nicht ineinanderfließen, bzw. Störelemente über mehrere Zeilen erzeugen, die dann später die Zeilensegmentierung verwirren.

Die Einstellungen des Dewarping und Despeckling nimmt man am besten innerhalb der Reiter am rechten Rand vor; Dewarping korrigiert Verzerrungen durch beispielsweise die Falzung; Despeckling entfernt kleinere Geräusche und Flecken, was aber bei der Benutzung von Ocropus weniger von Nöten ist, sogar eher kontraproduktiv, da schnell mal ein i-Punkt abhanden kommt.

Von großer Bedeutung ist das Entfernen von Bildern, dazu bietet Scantailor den Reiter „Bereiche füllen“ an. Damit die fülle ich das Initial und das Bild. Dann lasse ich alle Bearbeitungsschritte durchlaufen und erhalte meine Output-TIFs im Unterordner „out“.

Auf diese Weise erhält man Eingangsbilder, die die Texterkennung erheblich verbessern. Jetzt noch in PNGs umwandeln und sie sind für die Segmentierung mit ocropus-gpageseg bereit. Dafür nutze ich mogrify (ebenfalls in Imagemagick enthalten).

cd out
mogrify -format png ./*.tif

  1. Garzoni, Tommaso (1659): Piazza Universale: Das ist: Allgemeiner Schauplatz, Franckfurt am Mäyn: Matthaei Merians Sel. Erben/ Polich / Kuchenbecker, Online-Ausgabe: Halle, Saale : Universitäts- und Landesbibliothek Sachsen-Anhalt, 2012, URN: urn:nbn:de:gbv:3:1-360625, S. 176-178. []
Dieser Beitrag wurde veröffentlicht in OCR von . Permalink

23 Replies to “Preprocessing mit Scantailor”

Schreibe einen Kommentar