Wie programmiert man eine Texterkennung für Android?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Auf dem OCR-Gebiet scheinen nicht wenige Einzelkämpfer unterwegs zu sein. Es gibt im Netz eine Menge von Webseiten und Forenbeiträgen, wo Leute, die etwas ähnliches wie Du vorhaben, über ihre Versuche berichten. Jemand, dessen Seite ich vorhin sah, hat es in Python probiert.

Hier ist ein ausführlicher Artikel über ein solches Projekt in C++: http://www.codeproject.com/Articles/3907/Creating-Optical-Character-Recognition-OCR-applica

Ein ziemlich ausgereiftes Projekt in C, dessen Code Du frei herunterladen und weiterentwickeln kannst, ist Tesseract. Es versuchen auch hin und wieder Leute, Tesseract auf Android zu portieren.

Was Dein Programm alles tun muß, skizziere ich hier kurz:

  • Feststellen, wo auf der Vorlage überhaupt Schrift ist und wo nicht.
  • Die Vorlage per Bildbearbeitung so vorbereiten, daß die Schriftzeichen sich deutlich vom Hintergrund abheben und störende Bildelemente (Schmutz, farbiger Hintergrund, Papierkörnung) beseitigt werden.
  • Feststellen, von wo nach wo wie die Zeilen laufen
  • Die Zeilen in kürzere Abschnitte unterteilen, in denen man dann Muster zu erkennen versucht
  • Mustererkennung (Zeichen oder Zeichenfolgen oder ganze Wörter).
  • (A) mit einem neuronalen Netzwerk, das den betr. Flächenausschnitt mit Referenzmustern vergleicht, auf die es trainiert ist.
  • (B) mit einem Algorithmus, der die charakteristischen geometrischen Bestandteile des Musters (Striche, Bögen, Punkte) erkennt und dadurch die Zeichen identifiziert (Bei Handschrifterkennung ist das die bevorzugte Methode).
  • Prüfen, ob die Zeichenfolge lexikalisch und/oder grammatisch plausibel ist. Dabei kann der Anwender mitwirken und es kann ein Wörterbuch benutzt werden.

OCR ist ziemlich rechenintensiv, daher ist es ratsam, die Kernalgorithmen nicht in JavaScript zu realisieren, sondern eine schnellere Sprache zu verwenden, z.B. Java oder C. Da erfahrungsgemäß immer eine nicht vernachlässigbare Zahl von Fehlern passieren, ist die Programmkomponente, die diese Fehler sucht, mit entscheidend dafür, ob das Programm in der Praxis verwendbar ist. Nach meiner Erfahrung mit OCR-Programmen ist noch viel an der Benutzerfreundlichkeit gerade dieser Korrekturläufe verbessert werden. Vielleicht bringst Du die Sache ja weiter.

An besonderem Können wirst du jedenfalls die Fähigkeit trainieren müssen, ein System aus mehreren komplexen Komponenten zusammezubekommen.

Gutes Gelingen!