2010-07-28 27 views
5

Ich versuche, eine iPhone-Anwendung für Kinder zu entwickeln, die in der Lage sein wird, Zeichen auf dem Bildschirm mit Touch zu zeichnen, und ich möchte wissen, wie man den Charakter mit gutem Charakter des Alphabets gezeichnet. Wie werde ich die beiden Formen (Zeichnung und bestehende) vergleichen Irgendwelche Idee ?? ein Code?Zeichnung auf dem iPhone

+0

Haben Sie eine Lösung gefunden? – PVCS

Antwort

1

Wow, das klingt nach einer schwierigen Aufgabe. Eine Möglichkeit, die mir in den Sinn kommt, wäre die Verwendung einer Support-Vektor-Maschine.

1.) Erzeugen Sie ein Bild der Zeichnung und "vektorisieren" Sie es, indem Sie Vektoren an den Pfad anhängen, den der Benutzer gezeichnet hat.

2.) Sie benötigen Unterstützungsvektoren zum Vergleichen. Was ich tun würde, ist eine "Trainingsanwendung" zu implementieren. Lassen Sie einige Kinder zeichnen (zB 10 Mal ein A, 10 Mal ein B, usw. ...), legen Sie die Vektoren in eine Datenbank und verwenden Sie sie als Support-Vektoren.

3.) Sie benötigen einen Bewertungsalgorithmus, der die Benutzerzeichnung bewertet, indem er sie mit den Unterstützungsvektoren vergleicht (dies könnte der interessanteste Teil davon sein). Ich könnte mir vorstellen, die Abstände der Stützvektoren Anfangs- und Endpunkte zu den gezeichneten Vektoren zu messen. Der svm mit der geringsten Entfernung ist der Buchstabe, den du nimmst. Dann können Sie eine Entfernung einführen, bei der es sich um die "Grenze" handelt, und alle Benutzerzeichnungen oberhalb dieser Grenze als nicht erkannt übernehmen.

Ein zweiter Ansatz könnte sein, dass Sie Bilder mit den Buchstaben erzeugen (zB weißer Hintergrund und schwarzer Buchstabe (nicht anti-aliased)). Sie erzeugen erneut ein Bild des Benutzers, indem Sie es zeichnen und in der Größe ändern, um es zu vergleichen, indem Sie versuchen, es genau zu "überlappen". Dann zählst du die schwarzen Pixel, die in den zwei Bildern übereinstimmen und nimmst den Buchstaben mit den meisten Übereinstimmungen.

Aber da ich etwas ähnliches implementiert habe, kann ich sagen, dass der svm-Ansatz befriedigender ist, da Sie Support-Vektoren hinzufügen können, wenn das Ergebnis nicht gut genug ist. Die Quintessenz ist sicher Ihr Bewertungsalgorithmus.

Irgendwie klingt wie ein paar Wochen der Arbeit.

EDIT: Da dies ein interessantes Feld ist habe ich etwas recherchiert und eine These über Handschrifterkennung gefunden. Schau dir das an: http://risujin.org/cellwriter/. Es beschreibt im Grunde den von mir erwähnten SVM-Ansatz und gibt einige Algorithmen, die Ihnen helfen könnten.

+0

+1: cool Ansatz .. Wochen * Vollzeit * Arbeit :) – iwasrobbed

0

Sie könnten immer Gesture Recognition verwenden ... aber das ist ziemlich schwierig für ein benutzerdefiniertes Szenario wie dieses.

Sonst finden Sie vielleicht etwas in Quartz, das zumindest einen Teil davon für Sie tun wird. Ich bin daran interessiert zu sehen, wie Sie das lösen. Es klingt wie eine ziemlich schwierige/interessante Straße voraus.

3

Using GLGestureRecognizer Sie können einen Katalog erstellen, der eine Metrik zwischen einem Eingabepunkt-Array und einem von Ihnen vorgegebenen "Alphabet" berechnet.

GLGestureRecognizer ist ein Objective-C Umsetzung des Unistroke 1 $ Recognizer, eine einfache Geste Erkennungsalgorithmus (siehe Credits unten). Es wird hier in die Form einer iPhone-Anwendung Projekt zur Verfügung gestellt. Es wurde über den Kurs von ein paar Abenden in spät April 2009 von Adam Preble implementiert.

Ein Demo iPhone Projekt (Gestures.xcodeproj) wird zur Verfügung gestellt; Eine UIView-Unterklasse empfängt Berührungsereignisse und sendet sie an die GLGestureRecognizer-Klasse , während den berührten Pfad in weiß zeichnet. Sobald die Geste beendet ist, die resampled Geste in grün dargestellt, ihr Zentrum an dem roten Punkt, zusammen mit die Namen der besten Übereinstimmung, Score (niedriger ist besser) und Geste Orientierung. In dem Beispiel wird eine Stichprobengröße von 16 Punkten verwendet, die für sehr einfache Formen geeignet scheint.

+0

Super Zeug! – thatsdisgusting

+0

sehr cool, es schafft Ihre Gesten ziemlich gut. es könnte leicht für ein Alphabet verwendet werden – iwasrobbed