Trainingsziel Text

Texterkennung

GOCR ist eigentlich ein Kommandozeilenprogramm, arbeitet aber problemlos mit grafischen Anwendungen wie XSane und Kooka zusammen. Und nicht nur das: Das OCR-Tool kann im Gegensatz zu vielen anderen Programmen mit Umlauten umgehen und ist darüber hinaus auch noch lernfähig.

OCR steht für Optical Character Recognition; das Ziel der optischen Zeichenerkennung ist es, eingescannte Texte in Textdateien umzuwandeln. OCR-Programme rastern die Schriftzeichen und vergleichen sie mit bekannten Mustern aus ihrer Datenbank. Wenn es ausreichend viele Übereinstimmungen gibt, gilt ein Zeichen als "erkannt".

Dieser Artikel zeigt, wie Sie GOCR auf der Kommandozeile trainieren und damit für die Arbeit in XSane und Kooka fit machen.

Das richtige Sportgerät

Als Erstes geht es daran, den Scanner einzurichten. Die SANE-Hardwaredatenbank [1] verrät, welche Geräte mit Linux zusammenarbeiten. Ist der Status hier "complete" oder mindestens "good", sollte es keine Probleme bei der Einrichtung geben. Ein älterer EasyLinux-Artikel [2] erklärt die Grundlagen.

Unter OpenSuse 11.0 und 11.1 starten Sie YaST, geben das Root-Passwort ein und klicken im Bereich Hardware auf Scanner. Der Paketmanager spielt selbstständig das Paket sane-backends ein und erstellt die Scannerdatenbank. Im Anschluss folgt eine automatische Hardwareerkennung, und ein Dialogfenster präsentiert die gefundenen Geräte (Abbildung 1). Weiterhin spielen Sie über YaSTs Softwaremodul die Pakete xsane, kdegraphics3-scan und gocr ein.

Abbildung 1: Unter OpenSuse richten Sie Ihren Scanner über YaST ein.

Anwender von Ubuntu 8.10 installieren über den Paketmanager sane, sane-utils, xsane und gocr. Leider steht für Intrepid Ibex das Programm Kooka nicht zur Verfügung: Die Anwendung hat den Sprung von KDE 3 auf 4 nicht vollzogen, und die Projekt-Homepage lässt die zukünftige Entwicklung ebenfalls offen [3]. Ein kdegraphics-Paket der 3er-Reihe (wie bei OpenSuse) gibt es für diese Distribution leider auch nicht als Ausweichmöglichkeit. Die Integration von GOCR in XSane funktioniert aber problemlos. Auch bei Ubuntu gibt es eine automatische Hardwareerkennung; ein Artikel aus dem Ubuntuusers-Wiki [4] verrät die Hintergründe.

Aufwärmen nicht vergessen!

Wie gut GOCR Text erkennt, hängt vor allem von der Scanvorlage ab: Das Dokument sollte nicht schief auf dem Scanner liegen und auch nicht voller Flecken und Knicke sein. Auch ein verstaubter Scanner kann durchaus für kreative Interpretationen des OCR-Programms sorgen. Tabellen und Grafiken bringen die meisten Tools ins Schleudern, und auch bei handgeschriebenen Texten sieht es nicht besser aus.

Die Schriftart entscheidet mit darüber, wie gut GOCR arbeitet: Bei Fonts mit Serifen, z. B. Times, Courier oder Palatino, gehen die einzelnen Zeichen manchmal nahtlos ineinander über. Deutlich zu sehen ist das bei zwei aufeinanderfolgenden Konsonanten wie "mm" oder auch "fl" (Abbildung 2). Solche fließenden Übergänge stellen OCR-Programme vor ein Problem, weil sie nicht erkennen können, ob es sich um ein oder zwei Zeichen handelt. Eine serifenlose Schrift, wie beispielsweise Arial, Helvetica oder Verdana, und eine Schriftgröße von mindestens 12 Punkt sorgen für bessere Ergebnisse bei der Texterkennung.

Abbildung 2: Bei Serifenschriften fließen Buchstaben ineinander; das macht es GOCR unnötig schwer.

Für die Texterkennung justieren Sie die Auflösung des Scanners am besten auf 150 oder 300 dpi und wählen den Schwarz-Weiß- oder Graustufenmodus. Wie das in XSane und Kooka funktioniert, erklärt der Artikel unter [5]. Kontrollieren Sie anschließend in einem Bildbetrachter die gescannten Texte; mit einem Programm wie Gimp oder ImageMagick passen Sie im Zweifelsfall die Helligkeit und den Kontrast an (Abbildung 3). GOCR kann PNM-, PGM-, PPM- und PCX-Dateien verarbeiten; liegt ein gescannter Text in einem anderen Grafikformat vor, wandelt Gimp oder convert[6] die Dateien um.

Abbildung 3: Wenn Sie die Helligkeit und den Kontrast nachträglich verändern möchten, helfen Bildbearbeitungsprogramme wie Gimp.

Erst lernen, dann scannen!

GOCR ist lernfähig – am besten trainieren Sie das OCR-Programm, bevor Sie die Texterkennung in den grafischen Programmen einsetzen. Dazu ist ein kleiner Ausflug auf die Shell nötig.

Bevor Sie mit dem Training beginnen, erstellen Sie einen neuen Ordner namens db, zum Beispiel im eigenen Home-Verzeichnis. GOCR sucht im interaktiven Modus (auf der Kommandozeile) nach einem solchen Verzeichnis, um dort die Datenbank db.lst und die Grafiken für nicht erkannte Raster abzulegen. Danach öffnen Sie ein Terminalfenster (z. B. über [Alt]+[F2] und Eingabe von konsole oder gnome-terminal). Geben Sie darin den folgenden Befehl ein und schicken ihn über die Eingabetaste ab:

gocr -i datei.ppm -o datei.txt -m 130

Obwohl Sie vorher den Ordner db erstellt haben, schreibt das OCR-Programm dennoch eine Warnung ins Terminalfenster (DB ./db/db.lst not found) – die können Sie getrost ignorieren, denn sie erscheint nur beim ersten Trainingslauf. Zurück zum Shell-Befehl: Hinter dem Programmnamen gocr definieren Sie über -i die einzulesende Datei (hier datei.ppm), und hinter -o schreiben Sie den Namen der Ausgabedatei (z. B. datei.txt). Über -m 130 schalten Sie in den interaktiven Modus – sobald GOCR ein Raster nicht erkennt, bittet es um Ihre Mithilfe (Abbildung 4).

Abbildung 4: GOCR fragt nach: Welcher Buchstabe ist hier gemeint?

Zur besseren Einordnung sehen Sie neben dem nicht erkannten Zeichen noch die Nachbarbuchstaben. Wenn Sie neben dem Terminalfenster die Bilddatei in einem Betrachter öffnen, können Sie gut vergleichen. Das, was GOCR nicht erkennt, stellt es als ASCII-Grafik in Rautezeichen dar; in Abbildung 4 ist das der kleine Buchstabe "p". Die anderen Zeichen, die zur besseren Orientierung eingeblendet werden, setzt GOCR als ASCII-Grafik aus mehreren "O"s zusammen; in Abbildung 4 erkennen Sie die Buchstaben "e" und "r", die das kleine "p" einschließen. Hinter dem Prompt

Enter correct UTF-8 char or string for it:

tippen Sie nun das oder die fraglichen Zeichen ein und drücken [Eingabe]. GOCR fragt nach:

Store the pattern? 0=no 1=into_memory 2=to_database

Im Klartext heißt das: "Soll ich das Muster speichern?" Drei Antworten sind möglich.

  • Die Eingabe von 0 verwirft die Aktion,
  • über 1 landet das Zeichen im Arbeitsspeicher und ist damit nur für diesen Trainingslauf verfügbar,
  • und mit 2 nehmen Sie das Raster in die persönliche Datenbank auf.

Zeichen, die Sie eindeutig zuordnen können, sollten Sie in Ihrer Datenbank speichern, damit sie dauerhaft zur Verfügung stehen. Dinge, die Sie hingegen nicht zweifelsfrei identifizieren können, sind im Arbeitsspeicher besser aufgehoben, um GOCR bei weiteren Erkennungsversuchen nicht zu verwirren. Nachdem GOCR den Trainingslauf beendet hat, sehen Sie wieder den Shell-Prompt und können nun in der Textdatei das Ergebnis überprüfen und es gegebenenfalls im Texteditor (z. B. kate oder gedit) nachbessern.

Die neue Datenbank finden Sie im vorher angelegten Verzeichnis. Dort sollten Sie neben vielen kleinen PBM-Grafiken die Textdatei db.lst sehen: Sie enthält die Zuordnungen von Bildern und Buchstaben(-gruppen) (Abbildung 5).

Abbildung 5: Das Ergebnis des ersten Trainingslaufs: GOCR hat einige neue Buchstaben(-kombinationen) gelernt.

GOCR als XSane-Teammitglied

Das neu erworbene Wissen machen Sie sich zunutze, indem Sie GOCR aus XSane und Kooka heraus verwenden. Wenn Sie XSane verwenden, gehen Sie so vor:

  1. Wählen Sie Menü des Hauptfensters Einstellungen / Konfiguration. Im erscheinenden Dialog wechseln Sie zum Reiter Texterkennung.
  2. Das Kommando im Feld OCR Befehl passen Sie an und erweitern es um die Optionen -m 2 und -p /home/Benutzername/db/. Der Parameter -m 2 weist GOCR an, auf die persönliche Datenbank zurückzugreifen, und -p /home/Benutzername/db/ teilt dem Programm mit, wo diese Datenbank zu finden ist. Achtung: Der abschließende Schrägstrich hinter db/ muss dort unbedingt stehen.

  3. Alle anderen Einstellungen können Sie übernehmen; über OK speichern und beenden Sie die Konfiguration.
  4. Um GOCR aus XSane heraus zu starten, scannen Sie das Dokument ein und wählen dann im Betrachter-Fenster aus dem Menü Datei / OCR - als Text speichern aus. Im folgenden Dialog geben Sie den Namen für die Textdatei ein und klicken auf OK. Abbildung 6 zeigt das Ergebnis.

    Abbildung 6: Über ein paar Zeichen ist GOCR gestolpert, dennoch ist das Ergebnis ganz passabel.

Mannschaftssport: GOCR und Kooka

Soll GOCR mit Kooka ein Team bilden, braucht das OCR-Tool eine kleine Hilfestellung in Form eines selbstgeschriebenen Skripts. So sorgen Sie für eine gute Zusammenarbeit:

  1. Öffnen Sie einen Texteditor Ihrer Wahl (z. B. kate oder gedit) und erstellen Sie eine neue Datei namens gocr.sh. In diese tragen Sie die folgenden beiden Zeilen ein:

    #!/bin/bash
    /usr/bin/gocr -m 2 -p /home/<IhrBenutzername>/db/ $@

    Speichern Sie die Datei und schließen Sie den Editor.

  2. Machen Sie das neue Skript ausführbar. Im Dateimanager (Dolphin oder Nautilus) klicken Sie dazu mit der rechten Maustaste auf die Datei gocr.sh und öffnen den Dialog Eigenschaften. Wechseln Sie zum Reiter Zugriffsrechte bzw. Berechtigungen und setzen Sie ein Häkchen bei Datei als Programm ausführen bzw. Ausführbar.
  3. Öffnen Sie im KDE-Scanprogramm über den Menüpunkt Einstellungen / Kooka einrichten den Konfigurationsdialog. Klicken Sie links auf das Symbol OCR.
  4. In der rechten Fensterhälfte aktivieren Sie die Checkbox GOCR-Modul. Im Feld GOCR OCR ist als Voreinstellung für die ausführbare GOCR-Datei /usr/bin/gocr eingetragen. Da es hier keine Möglichkeit gibt, weitere Aufrufoptionen hinter den Befehl zu schreiben und Sie daher GOCR auf diese Weise nicht auffordern können, die persönliche Datenbank zu wählen, tragen Sie nun den Pfad zu Ihrem gerade geschriebenen Skript ein und bestätigen mit OK (Abbildung 7).

    Abbildung 7: In Kooka tragen Sie den Pfad zum selbst erstellten Skript ein, das GOCR mit speziellen Optionen aufruft.

  5. Danach starten Sie Kooka neu. Wählen Sie ein Bild aus der Kooka-Galerie aus oder scannen Sie ein Dokument neu ein. Danach klicken Sie entweder auf das Icon neben dem Druckersymbol, um die gesamte Bilddatei umzuwandeln, oder auf das Symbol daneben, um Teile des Textes zu wählen.
  6. Im folgenden Dialogfenster können Sie einige Feinabstimmungen für die Graustufen, Staubgröße und den Zeichenabstand vornehmen. Der Reiter Bild zeigt zur Bestätigung noch einmal die ausgesuchte Grafik, und auf dem letzten Reiter bietet Kooka verschiedene Rechtschreibprogramme zur Nachkontrolle an. (Leider funktionierte dieses Feature auf unseren Testsystemen nicht.) Mit einem Klick auf Zeichenerkennung (OCR) starten stoßen Sie die Texterkennung an.

Fazit

Richtig unproblematisch ist die Zusammenarbeit mit GOCR nicht – weder auf der Shell noch in den grafischen Scanprogrammen. Dennoch ist das freie OCR-Tool auf dem richtigen Weg, und mit ein bisschen Ausdauertraining erzielt es nach kurzer Zeit schon recht passable Ergebnisse.

Glossar

Serifen

Serifen, auch "Füßchen" genannt, sind die kleinen End-, An- oder Abstriche der Buchstaben. Diese Betonung der Mittel- und Grundlinien verbessert die Lesbarkeit.

Infos

[1] Liste unterstützter Scanner: http://www.sane-project.org/sane-supported-devices.html

[2] Artikel zur Scannereinrichtung unter Linux: Martin Loschwitz, "Linux scannt", EasyLinux 10/2004, S. 17 ff., http://www.easylinux.de/2004/10/017-scanner/

[3] Kooka-Homepage: http://kooka.kde.org/

[4] Scannereinrichtung unter Ubuntu: http://wiki.ubuntuusers.de/Scanner

[5] Artikel zu Scanprogrammen: Martin Loschwitz, "Gut erkannt, Dr Watson!", EasyLinux 10/2004, S. 20 ff., http://www.easylinux.de/2004/10/020-stools/

[6] Bildbearbeitung auf der Shell: Heike Jurzik, "Zauberhafte Bildbearbeitung", EasyLinux 06/2006, S. 89 ff., http://www.easylinux.de/2006/06/089-guru-convert/

Einem Freund empfehlen    Druckansicht beenden Bookmark and Share
Kommentare