Stratégies de reconnaissance des gestes

12

En travaillant avec la Wii, je trouve souvent nécessaire de reconnaître des gestes simples, jusqu'à présent, j'ai pu principalement examiner l'amplitude de l'accélération afin de reconnaître les gestes demandés dans nos documents de conception de jeu, mais j'aimerais créer un système plus robuste qui permet "l'enregistrement" d'exemples de gestes et la reconnaissance de gestes complexes.

Quelles stratégies avez-vous utilisées dans le passé? Pourquoi ont-ils fonctionné? Pourquoi n'ont-ils pas fonctionné? Que ferais-tu différemment?

jessecurry
la source

Réponses:

5

Modifier l' invariance affine nécessite apparemment cette version de courbure.
http://en.wikipedia.org/wiki/Affine_curvature#Affine_curvature
Supposons que c'est à cela que je fais référence. (Bien que la courbure normale, je pense, est invariante aux rotations qui pourraient être assez bonnes).
Modifier pour une version invariante à l'échelle de la courbure, regardez ici
/math/1329/what-is-the-form-of-curvature-that-is-invariant-under-rotations-and-uniform- scali

Les problèmes de reconnaissance des gestes sont une sous-classe des problèmes de reconnaissance, et les problèmes de reconnaissance sont essentiellement des problèmes de comparaison de modèles.

Vous essayez d'adapter votre geste à une collection de gestes, le meilleur geste gagne.

Je voudrais enregistrer votre geste plusieurs fois et essayer d'adapter vos données d'entraînement avec quelque chose comme une b-spline (une courbe). Vous voulez probablement que vos gestes soient invariants aux transformations affines (rotations, mise à l'échelle, translation), alors stockez la courbe sous forme de tableau de valeurs de courbure (il est peu probable qu'elle ait une belle forme fermée), contrairement aux coordonnées cartésiennes du contrôle points.

C'est un modèle de geste. Disons que vous en avez plusieurs.

Pour les comparer, commencez par ajuster vos données d'entrée, puis évaluez la courbure x nombre de fois, où x offre un bon compromis entre précision et performances.

Maintenant, parcourez les modèles et soustrayez les valeurs de courbure (évaluées au même point le long des courbes respectives en termes de longueur d'arc) et mettez la différence au carré. La valeur qui en résulte est appelée résiduelle. Résumez tous les résidus. Le modèle avec les plus petits résidus est le meilleur ajustement et c'est votre geste le plus probable.

Comparez ma réponse à @ Olie. Ils sont fondamentalement les mêmes, bien que nous choisissions différents modèles pour le geste (construire un tableau de la courbure signée et enregistrer le changement de l'angle de la tangente sont presque les mêmes, je suppose que les données sont générées par un lissage courbe avec bruit cependant), la principale différence est que @Olie inclut la vitesse.

Le choix des paramètres à inclure dans votre modèle dépend de la situation et des exigences de performances. Gardez à l'esprit que l'ajout de paramètres à votre modèle augmente la dimension.

Jonathan Fischoff
la source
4

En termes très généraux, vous souhaiterez probablement définir un geste comme une direction, suivi d'un retard [éventuellement très court], suivi d'une autre direction (et des angles relatifs entre les directions, etc., jusqu'à la fin.

Par exemple, faire un "t" avec votre baguette (et n'oubliez pas que certaines personnes sont gauchistes, donc vos définitions ne devraient pas dépendre de la main!) Est un swoosh vertical, court retard, inversion courbée, court retard, inversion dirigé horizontalement, arrêt brusque [proche].

Lorsque vous lisez le geste, vous voulez voir à quel point le motif lu correspond à la description du motif.

De manière générale, vous pouvez d'abord éliminer le dictionnaire de définitions en éliminant les correspondances évidentes (celles qui ne commencent même pas correctement, ou qui sont trop longues ou trop courtes de loin), puis "marquer" le geste par rapport aux définitions restantes. Marquez le geste en notant chaque portion en fonction de sa correspondance avec la définition (0-100%) et RMS-ing (prenez les erreurs, au carré, additionnez-les, puis prenez la racine carrée de cette somme.)

L'utilisation de RMS accentue les grandes différences (résultant en un score plus faible), tout en tendant à masquer les petites différences (résultant en une meilleure correspondance).

Il y a une tonne de matériel sur ce truc - la reconnaissance des gestes Google. Ne vous inquiétez pas si c'est pour un stylet ou autre chose non Wii, les principes s'adaptent bien.

Olie
la source
0

Je ne l'ai fait qu'avec la souris, mais ma solution a très bien fonctionné. J'ai créé un motif de points de jointure pour représenter le geste - c'est la forme à dessiner. Ensuite, j'ai enregistré le chemin du curseur pendant qu'il se déplaçait. Ensuite, j'ai redimensionné ce chemin de la souris afin qu'il ait la même largeur et la même hauteur que le motif cible. À chaque mise à jour, je parcourais tous les points de mon chemin de curseur en m'assurant qu'ils se trouvaient chacun à une certaine distance d'un nœud de chemin de geste, en regardant chaque point de chemin de geste dans l'ordre.

Iain
la source
0

L'un des principaux développeurs d' AiLive m'a enseigné le Game AI (il est dans certaines vidéos), et la réponse courte est qu'essayer de faire ces reconnaissances de gestes est tout simplement trop pénible pour passer votre vie. Je suggère de suivre la voie du middleware et d'obtenir la suite LiveMove d'AiLive.

cflewis
la source