Im Linux-Magazin 03/2009 war ein guter Artikel zum Thema OCR unter Linux mit Hilfe von cuneiform, tesseract und anderen Programmen. Allerdings fehlte ein einfacher Einstieg zum Thema, den ich hier kurz für Ubuntu beschreiben will.

cuneiform

Das OCR-Programm cuneiform benötigt einige Pakete für das Holen und Kompilieren der Sources:

(Falls es noch weitere Pakete braucht, bitte mir Bescheid sagen und ich füge sie hinzu. Hinweis aus dem Kommentaren: Es kann zu Fehlern in der Kompilierung führen, wenn die Pakete libmagick++1 oder libmagick++-dev nicht installiert sind — bitte bestätigen!)

Unter Hardy Heron muss im Übrigen ein Backport von cmake installiert werden! Diesen findet man auf der Seite https://launchpad.net/ubuntu/hardy/i386/cmake/. Dort kann man links oben unter “Package releases” die neuen Backports auswählen (Pakete findet man dann unter “Downloadable files”).

Nun suchen wir uns ein Installationsverzeichnis – ich nehme z.B. ~/devel, andere sinnvolle Namen wären bspw. ~/src oder ~/tmp, je nach Zielsetzung und Geschmack.

Die Sources für cuneiform holen wir mit folgendem Befehl:

Das holt den Code von der launchpad/Bazaar-Plattform. Nun können wir mit dem Kompilieren beginnen:

Falls hier Fehler auftauchen, müssen ggf. noch Pakete nachinstalliert werden. Einfach bei mir melden! Der letzte Befehl installiert die Dateien von cuneiform unter /usr/local.

Mit einem echo $PATH kann man prüfen, ob /usr/local/bin im Pfad angegeben ist. Falls nicht, kann man folgende Zeilen in der Datei ~/.profile hinzufügen:

Anmerkung: Es ist gegebenenfalls sinnvoll, statt /usr/local/bin z.B. ~/bin zu nehmen. Damit ist das Programm nur für den Benutzer ausführbar, hat aber den Vorteil, dass keine administrativen Rechte bei der Installation nötig sind. Dazu muss man im Makefile die Pfadnamen entsprechend ändern und den $LD_LIBRARY_PATH auf einen Pfad im Home-Verzeichnis setzen (dazu muss man dieses vorher natürlich anlegen und in der Installation entsprechend durchführen).

Gleiches gilt für die Libraries. Mit echo $LD_LIBRARY_PATH sollte man prüfen, ob /usr/local/lib im Pfad ist. In meiner Ubuntu-Version (8.04) war das noch nicht der Fall. In diesem Fall ist es vielleicht ratsam in der Datei ~/.bashrc folgende Zeile hinzuzufügen:

Damit sollte nach einem erneuten Öffnen eines Terminalfensters das Aufrufen von cuneiform ohne Probleme vonstatten gehen:

Durchsuchbare PDFs mit hocr2pdf von Exactimage

Das ist nun etwas richtig cooles: PDFs erstellen, die den eingescannten Originaltext darstellen, gleichzeitig jedoch durchsuchbar sind! Wieder brauchen wir entsprechende Pakete:

(Auch hier wieder: Bitte weitere benötigte Pakete mitteilen)

Die Pakete holen wir uns wieder aus dem Internet:

Das Compilieren und Installieren geht klassisch von der Hand:

Die entsprechenden Dateien sind wieder unter /usr/local installiert.

Weitere Anmerkung: Im Moment klappt das Kompilieren von hocr2pdf leider nicht, da ein Fehler in libagg auftaucht. Falls jemand eine Lösung hat, bitte ich um Hinweise.

Sandwich-PDF erstellen

Als Beispiel habe ich einen PNG-Text genommen, den ich irgendwann einmal eingescannt habe, einen Teil von Fernbergers Reisebericht am Ende des 16. Jahrhunderts über die Insel Hormuz (Quelle: Fernberger, Georg Christoph: Reisetagebuch (1588-1593) Sinai, Babylon, Indien, Heiliges Land, Osteuropa. Lateinisch-Deutsch. Kritische Edition und Übersetzung von Ronald Burger und Robert Wallisch (Beiträge zur Neueren Geschichte Österreichs, Bd. 12), Frankfurt a. M. 1999).

Wie bekomme ich aus diesem Text nun ein durchsuchbares PDF?

Um die Eingangsdatei für cuneiform vorzubereiten, brauche ich imagemagick (alternativ: GIMP o.ä.):

Ich kann nun meine Datei entsprechend umwandeln:

Das BMP3 ist deshalb wichtig, weil cuneiform nur BMP-Dateien der Version 3 verträgt.

Nun können wir den OCR-Vorgang tatsächlich beginnen:

Die Switches besagen, dass es sich um einen deutschen (ger) Text handelt, dass das Format als hocr exportiert werden soll und die Ausgabedatei Fernberger01.html heißen soll. Das Ergebnis kann man sich z.B. mit Firefox betrachten und ist sehr zufriedenstellend (Knackpunkt ist hier immer die Auflösung, denke ich – 300 DPI sollten es schon sein)!

Das PDF kann man nun mit Hilfe von hocr2pdf bauen:

Heraus kommt ein schönes Sandwich-PDF! Alternativ kann man auch Fernberger01.png als Input-Datei nehmen, wenn die bmp-Vorlage zu schlecht ausfällt. Falls man die Leerzeichen zwischen den Wörtern entfernen will, kann man die Option -s einfügen. Das erleichtert das spätere Durchsuchen des PDFs.

Damit wäre die Basis erstellt – mit einigem Geschick kann man ein Skript schreiben, dass mehrere Seiten nacheinander umwandelt und in PDF zusammenfasst. Für letzteren Schritt bietet sich das Paket pdftk an.