Download - Handschrifterkennung mit Android Julian Hanhart und Dominik Giger Betreuer: Alexander Bosshard
Handschrifterkennung mit Android
Julian Hanhart und Dominik Giger
Betreuer: Alexander Bosshard
Inhalt
1. Aufgabenstellung2. Vorgehensweise3. Demonstration der Software4. Zeichenerkennung5. Architektur6. Fragen
Aufgabenstellung
• Von Hand eingegebene Buchstaben erkenneno Blockschrift und „Schnürlischrift“o Basierend auf einer vorgehenden Projektarbeit an der ZHAW
• Applikation für Androido Ersatz für die bestehende Tastatur
Vorgehensweise
1. Bestehende Projektarbeit analysieren2. Software-Prototyp erstellen3. Lösung der Projektarbeit umsetzen und testen4. Alternative Lösung dazu selbst erarbeiten5. Vergleich der beiden Lösungen6. Release-Applikation für Android erstellen
Demonstration der Applikation
Zeichenerkennung – Inhalt
• Überblick• Mikrogesten
o Ideeo Umsetzung -> Zwei Varianteno Algorithmen
• Grapho Ideeo Umsetzung
• Probleme / Vergleichstest• Verbesserungsmöglichkeiten
Überblick
• Auftrennen des Pfades in Mikrogesten• Mikrogesten klassifizieren• In einem bestehenden Graphen die erkannte Mikrogesten-
Folge suchen
Mikrogesten - Idee
• Jeder beliebig komplexe Pfad besteht aus einer Verknüpfung von simplen Mikrogesteno z.B. Kurve, Gerade
• Eine Folge von Mikrogesten definiert einen Buchstaben
• Jede Mikrogeste wird über ihre Eigenschaften definiert:o Form: Kurve, Gerade, Kreiso Richtung: Auf eine diskrete Anzahl abgebildeto Grösse: Abgebildet auf Schriftbild: Uberlänge, Unterlänge
Mikrogesten - Umsetzung
Zwei Varianten:• Variante A: Aus Projektarbeit übernommen
o Kurze und lange Gerade, Spitzkehre, schwache und starke Krümmung
• Variante B: Soll Schwachstellen von Variante A behebeno Kurze und lange Gerade, Kurve, Kreis
Grund:• Unterscheidung zwischen schwacher und starker
Krümmung variiert stark von Person zu Person
Mikrogesten - Umsetzung
• Schwierigkeiten: o Entscheiden wo eine Mikrogeste aufhörto Klassifizieren der Mikrogesten
• Auftrennen des Pfades:1. Möglichkeit:
Für jeden Punkt die Krümmungsstärke berechnen
2. Möglichkeit: Zuerst Kreise erkennen Geraden erkennen Rest ist Kurven
Mikrogesten - Umsetzung
• Klassifizierung:o Typ: Kreis, Kurve, Geradeo Ausrichtung bestimmen: Vier diskrete Richtungeno Länge: kurz oder lang
Mikrogesten - Algorithmen
• Die Auftrennung und Klassifizierung wird über mehrere Algorithmen durchgeführt
Beispiel:• Algorithmen für Variante B
1. Punktezahl Normierung2. Pfad bei spitzen Winkeln auftrennen3. Teilpfade glätten (Spline-Algorithmus)4. Kreise erkennen5. Geraden erkennen6. Kurven erkennen
Graph - Idee
• Gerichteter Graph mit einem festen Einstiegespunkt 'R'• Jeder Knoten enthält einen Mikrogesten-Typ und optional
einen Buchstabe• Graph ist zyklisch aufgebaut und führt immer wieder auf
den Einstiegspunkt zurücko Ein Pfad kann auch mehrere Buchstaben
enthalten
• Jede Kante ist mit einem Gewicht versehen um bei mehreren erkannten Buchstaben den wahrscheinlichsten auszuwählen
Graph - Umsetzung
• Schwierigkeit:o Aufbau des Graphen => Qualität des Graphen hat einen grossen
Einfluss auf die Erkennungsrate
• Jeder Buchstabe muss manuell mit den Mikrogesten aufgebaut werden
Graph - Umsetzung
• Alternativ: Statistischer Aufbauo Buchstaben mehrmals eingeben und erkannter Mikrogesten-
Aufbau analysiere
• Eine andere Schreibweise kann einen anderen Aufbau zur Folge habeno Jede weitere Schreibweise, die abgedeckt werden soll, macht den
Graphen komplexer
Vergleich der beiden Varianten
• Vorgehensweise:o Verschiedene Buchstaben mehrmals eingeben und aufzeichnen
wie gut der Buchstabe erkannt wirdo Es kann auch eine Teilerkennung geben wenn ein Teil der
Mikrogesten erkannt wurde
• Resultate:o Erkennung schlecht bei Buchstaben, die aus 1-2 oder 6+
Mikrogesten aufgebaut sindo Erkennung nicht sehr flexibel gegenüber unterschiedlichen
Handschrifteno Ähnlich aufgebaute Buchstaben lassen sich schwer unterscheiden
Verbesserungsmöglichkeiten
• Mikrogesten-Erkennungo Weitere Varianten testen
• Grapho Dev-Tools für die Erstellung des Graphen
• Wörterbuch
• Neuronales Netz statt Graph
Architektur - Inhalt
• Grundsätzliche Überlegungen• Backend
o Analyseo Designo Implementierung
• Frontendo Analyseo Designo Implementierung
Architektur - Grundsätzliches
• Prototypo Eine monolithische Applikationo Aufwendige Berechnungen blockieren die Bedienung
• Endprodukto Aufteilung in getrennte Prozesse für die Erkennung (Backend) und
die Bedienung (Frontend)o Kommunikation über die vom Android-System zur Verfügung
gestellten Mechanismen (AIDL)o Backend implementiert als Dienst (Service)
Kann ohne Frontend weiter im Hintergrund laufeno Frontend implementiert als Eingabe-Dienst (Input Methode Service)
Frontend kann Bildschirm-Tastatur ersetzen
Architektur - Backend
Analyse:• Aufteilung der Erkennung in verschiedene Phasen
Architektur - Backend
Design:• Schnittstellen
o Zeichen-Erkennung durchführeno Verwaltung und Konfiguration der Erkennungs-Algorithmen,
Übergabe von Argumenten
• Erkennungs-Algorithmeno Strategy Design Pattern für Algorithmeno Priority Queue aus Strategies für die Einzelschritte der Phasen
Erkennungs-Schritte sind austauschbar und deaktivierbar und ihr Ablauf kann geändert werden
Architektur - Backend
Implementierung:• Graphen-Strategy für die Zeichen-Erkennungs-Phase
o Initialisierung: Graph wird aus XML-Datei eingeleseno Grober Ablauf
der Erkennung:
Architektur - Frontend
Analyse:• Unter Android kann der Benutzer die standardmässig
mitgelieferte Bildschirm-Tastatur durch die eines Drittanbieters ersetzeno Eine solche Anwendung wird "Input Method" genannto Sie wird als so genannter "Input Method Service" implementiert,
also als spezialisierter Hintergrund-Prozess
• Bedienung soll vollständig über den Touchscreen-Gesten funktioniert.
Architektur - Frontend
Design:• Frontend wurde in zwei Haupt-Klassen aufgeteilt
1. HandwritingIME: Erweitert die von Android bereitgestellte Basis-Klasse
InputMethodService Implementiert den Dienst für die Eingabe Methode Regelt die Kommunikation mit dem Erkennungs-Dienst
2. PadView: Eigentliche Benutzeroberfläche der Applikation Dient zur Eingabe und Anzeige der Eingabe-Punkte Implementiert einige Touchscreen-Gesten zur erleichterten Bedienung
Architektur - Frontend
Implementation:• Verbindung zwischen Dienst und UI über Observer Design
Patterno HandwritingIME ist Observer, PadView ist Subject
• Zur Entgegennahme der erkannten Zeichen implementiert HandwritingIME eine entsprechende Callback-Schnittstelleo Zeichen werden entgegen genommen und an das aufrufende
Eingabefeld weitergeleitet
• Implementierte Touchscreen-Gesten in PadView:o Durchstreichen der letzten Eingabeo Durchstreichen des gesammten Eingabefeldeso Leerzeichen einfügen über Abstand zwischen Eingaben
Verbesserungsmöglichkeiten
Erkennungs-Dienst:• Verarbeitung von Zwischenschritten bei langen Eingaben
(etwa wenn ein ganzes Wort am Stück eingegeben wird)
Benutzeroberfläche:• Oberfläche zur Konfiguration der Erkennung• Verbesserung der Usability der Eingabe Methode
o Anzeige von Wörtern als Vervollständigungs-Kandidateno Möglichkeit, Eingaben fortzusetzen wenn der Bildschirmrand
erreicht wirdo Weitere Touchscreen-Gesteno Ansprechendere visuelle Gestaltung ("Eye Candy")
Ende
• Fragen?