Strategien zur Gestenerkennung

12

Wenn ich mit der Wii arbeite, finde ich es oft notwendig, einfache Gesten zu erkennen. Bisher konnte ich hauptsächlich die Größe der Beschleunigung betrachten, um die Gesten zu erkennen, die in unseren Game-Design-Dokumenten gefordert werden, aber ich möchte sie erstellen Ein robusteres System, das das "Aufzeichnen" von Beispielgesten und das Erkennen komplexer Gesten ermöglicht.

Welche Strategien haben Sie in der Vergangenheit angewendet? Warum haben sie gearbeitet? Warum haben sie nicht gearbeitet? Was würdest du anders machen?

jessecurry
quelle

Antworten:

5

Bearbeiten Affine Invarianz erfordert anscheinend diese Version der Krümmung.
http://en.wikipedia.org/wiki/Affine_curvature#Affine_curvature
Nehmen wir an, das ist es, worauf ich mich beziehe. (Obwohl die normale Krümmung meiner Meinung nach für Rotationen, die gut genug sein könnten, unveränderlich ist).
Bearbeiten für eine skaleninvarianten Version Krümmungs Blick hier
/math/1329/what-is-the-form-of-curvature-that-is-invariant-under-rotations-and-uniform- schuppig

Gestenerkennungsprobleme sind eine Unterklasse von Erkennungsproblemen, und Erkennungsprobleme sind im Grunde Modellvergleichsprobleme.

Wenn Sie versuchen, Ihre Geste an eine Sammlung von Gesten anzupassen, gewinnt die beste Geste.

Ich habe Ihre Geste mehrmals aufgezeichnet und versucht, Ihre Trainingsdaten mit so etwas wie einem B-Spline (einer Kurve) abzugleichen. Sie möchten wahrscheinlich, dass Ihre Gesten für affine Transformationen (Rotationen, Skalierungen, Verschiebungen) unveränderlich sind. Speichern Sie die Kurve daher als Tabelle mit Krümmungswerten (es ist unwahrscheinlich, dass eine schöne geschlossene Form vorliegt) im Gegensatz zu den kartesischen Koordinaten des Steuerelements Punkte.

Das ist ein Modell einer Geste. Nehmen wir an, Sie haben mehrere.

Um sie zu vergleichen, passen Sie zunächst Ihre Eingabedaten an und bewerten Sie dann die Krümmung x-mal, wobei x einen guten Kompromiss zwischen Genauigkeit und Leistung ergibt.

Durchlaufen Sie nun die Modelle und subtrahieren Sie die Krümmungswerte (bewertet am selben Punkt entlang der jeweiligen Kurven in Bezug auf die Bogenlänge) und quadrieren Sie die Differenz. Der resultierende Wert wird als Residuum bezeichnet. Fasse alle Residuen zusammen. Das Modell mit den kleinsten Residuen passt am besten und ist Ihre wahrscheinlichste Geste.

Vergleiche meine Antwort mit der von @ Olie. Sie sind im Grunde genommen gleich, obwohl wir verschiedene Modelle für die Geste auswählen (das Erstellen einer Tabelle mit der vorzeichenbehafteten Krümmung und das Aufzeichnen der Änderung des Tangentenwinkels sind fast gleich, ich gehe davon aus, dass die Daten durch eine Glättung generiert werden Kurve mit Rauschen), der Hauptunterschied ist, dass @Olie die Geschwindigkeit einschließt.

Die Auswahl der in Ihr Modell einzubeziehenden Parameter hängt von der Situation und den Leistungsanforderungen ab. Beachten Sie, dass das Hinzufügen von Parametern zu Ihrem Modell die Dimension vergrößert.

Jonathan Fischoff
quelle
4

Ganz allgemein ausgedrückt möchten Sie wahrscheinlich eine Geste als Richtung definieren, gefolgt von einer [möglicherweise sehr kurzen] Verzögerung, gefolgt von einer anderen Richtung (und den relativen Winkeln zwischen den Richtungen usw.) bis zum Ende.

Zum Beispiel ist ein "t" mit Ihrem Zauberstab (und vergessen Sie nicht, dass einige Leute Linkshänder sind, so dass Ihre Definitionen nicht handabhängig sein sollten!) Ein vertikaler Swoosh, eine kurze Verzögerung, ein Herauskrümmen der Umkehrung, eine kurze Verzögerung und eine Umkehrung mit horizontalem Kopf, abruptes Anhalten.

Während Sie die Geste lesen, möchten Sie sehen, wie genau das gelesene Muster mit der Musterbeschreibung übereinstimmt.

Im Allgemeinen können Sie zuerst das Definitionswörterbuch aussortieren, indem Sie offensichtliche Unstimmigkeiten beseitigen (solche, die nicht einmal richtig beginnen oder bei weitem zu lang oder zu kurz sind) und dann die Geste mit den verbleibenden Definitionen "bewerten". Bewerten Sie die Geste, indem Sie jeden Teil dahingehend bewerten, wie gut er mit der Definition (0-100%) und dem Effektivwert übereinstimmt (nehmen Sie die Fehler, quadrieren Sie sie, summieren Sie sie und berechnen Sie dann die Quadratwurzel dieser Summe).

Durch die Verwendung von RMS werden große Unterschiede akzentuiert (was zu einer niedrigeren Punktzahl führt), während kleine Unterschiede in der Regel überlagert werden (was zu einer besseren Übereinstimmung führt).

Es gibt eine Menge Material zu diesem Thema - Google-Gestenerkennung. Machen Sie sich keine Sorgen, wenn es sich um einen Stylus oder ein anderes Nicht-Wii-Ding handelt. Die Prinzipien passen sich gut an.

Olie
quelle
0

Ich habe das nur mit der Maus gemacht, aber meine Lösung hat sehr gut funktioniert. Ich habe ein Punktmuster aus Punkten erstellt, um die Geste darzustellen - dies ist die zu zeichnende Form. Dann habe ich den Pfad des Cursors gespeichert, als er sich bewegte. Als nächstes habe ich diesen Mauspfad so skaliert, dass er die gleiche Breite und Höhe wie das Zielmuster hat. Bei jeder Aktualisierung durchlief ich alle Punkte meines Cursorpfads und vergewisserte mich, dass sie sich jeweils innerhalb eines bestimmten Abstands zu einem Gestenpfadknoten befanden, wobei ich jeden Gestenpfadpunkt der Reihe nach betrachtete.

Iain
quelle
0

Mir wurde Game AI von einem der Hauptentwickler bei AiLive beigebracht (er ist in einigen Videos zu sehen), und die kurze Antwort lautet, dass der Versuch, diese Gesten zu erkennen, einfach zu schmerzhaft ist, um Ihr Leben damit zu verbringen. Ich würde vorschlagen, die Middleware-Route zu wählen und die LiveMove-Suite von AiLive zu erwerben.

Flewis
quelle