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:
1 |
sudo apt-get install bzr cmake build-essential |
(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.
1 2 |
mkdir ~/devel cd ~/devel |
Die Sources für cuneiform holen wir mit folgendem Befehl:
1 |
bzr branch lp:cuneiform-linux |
Das holt den Code von der launchpad/Bazaar-Plattform. Nun können wir mit dem Kompilieren beginnen:
1 2 3 4 5 6 |
cd cuneiform-linux mkdir builddir cd builddir cmake .. make sudo make install |
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:
1 2 3 4 |
# set PATH so it includes /usr/local/bin if it exists if [ -d "/usr/local/bin" ] ; then PATH="/usr/local/bin:$PATH" fi |
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:
1 2 |
#Include local libs export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH |
Damit sollte nach einem erneuten Öffnen eines Terminalfensters das Aufrufen von cuneiform ohne Probleme vonstatten gehen:
1 2 3 |
max@compi:~$ cuneiform Cuneiform for Linux 0.6.0 Usage: cuneiform[-l languagename -f format --dotmatrix --fax -o result_file] imagefile |
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:
1 |
sudo apt-get install subversion build-essential libagg-dev libevas-dev libtiff-dev libjpeg-dev libpng-dev libungif4-dev |
(Auch hier wieder: Bitte weitere benötigte Pakete mitteilen)
Die Pakete holen wir uns wieder aus dem Internet:
1 2 3 4 |
mkdir ~/dev/hocr2pdf cd ~/dev/hocr2pdf svn co svn.exactcode.de/exact-image/trunk cd trunk |
Das Compilieren und Installieren geht klassisch von der Hand:
1 2 3 |
./configure make sudo make install |
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.
Leider gibt es damit im Moment ebenfalls ein Problem: Die Extraktion des Textes mit cuneiform funktioniert wunderbar. Beim Erstellen des Sandwich-PDFs werden die Zeichen jedoch riesig gesetzt, so dass die Suche und das Kopieren von Text aus dem PDF nicht wirklich funktionieren. Für Hinweise bin ich dankbar.
Update: Eine Anleitung zur Installation der Version 1.0 von cuneiform-linux in Ubuntu befindet sich unter: http://wiki.ubuntuusers.de/Baustelle/pdfsandwich. Leider scheint auch diese Version das Problem der großen Schriften nicht zu beheben.
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.ä.):
1 |
sudo apt-get install imagemagick |
Ich kann nun meine Datei entsprechend umwandeln:
1 |
convert Fernberger01.png BMP3:Fernberger01.bmp |
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:
1 |
cuneiform -l ger -f hocr -o Fernberger01.html Fernberger01.bmp |
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:
1 |
hocr2pdf -i Fernberger01.bmp -o Fernberger01.pdf < Fernberger01.html |
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.
Pingback: » Automatisches Skript für Cuneiform und hocr2pdfAUXNET
Pingback: AUXNET » Sandy: Skript zum Erstellen von Sandwich-PDFs unter Ubuntu 14.04+