Je travaille actuellement sur un système de reconnaissance gestuelle (pour une application Android). Je pense avoir terminé l'étape de traitement d'image, où je suis capable d'extraire le contour de la main (je porte un gant pour éviter la soustraction de l'arrière-plan pour l'instant).
Je reçois également l'ellipse / rectangle englobant, le centroïde en tant que caractéristiques de forme «importantes» de la main.
Mon problème est que peu de littérature indique quelle est la prochaine étape avant la classification de l'image à travers le modèle markovien caché. Je trouve cette étape «d'extraction de fonctionnalités» très ambiguë.
Actuellement, je reçois une liste des angles du contour (qui est approximée de manière à obtenir un nombre limité d'angles)
Le problème est que je ne sais pas quoi faire ensuite. Lorsque je recherche de la littérature comme «Classification des formes à l'aide de HMM», je trouve toujours difficile de savoir quoi faire ensuite.
En tant qu'outil pour HMM, je prévois d'utiliser JaHMM. Mais je ne sais pas comment expérimenter l'outil à ce stade car je ne sais pas quelle sera la contribution à cette étape de classification!
J'ai rencontré une liste de fonctions que j'ai trouvées dans certains ouvrages, comme les descripteurs de Fourier rapides, les descripteurs de courbure, la spline B; pourtant, je ne sais pas comment appliquer ces fonctions à mes données actuelles (c'est-à-dire la liste des angles, par exemple: -63, 154, 3, 23, 54, ....)
MISE À JOUR 1:
Merci pour vos informations. @Peter K.
Concernant les poses: j'allais opter pour un ensemble de mots en American Sign Language qui sont orthographiés, par exemple «chien» -> «d» «o» «g» (3 états); mais le moment où je n'ai pas décidé quoi faire.
Je lis actuellement d'autres articles pour voir quel type d'informations je dois extraire, comme:
- centroïde de la main
- angle de mouvement
- distance d'un point particulier à différents points du contour de la main (etc.)
Maintenant, j'ai rencontré un article qui semble montrer ce que je veux faire, je ne suis pas sûr:
http://espace.library.uq.edu.au/eserv.php?pid=UQ:10700&dsID=n0273.pdf
Je lis actuellement la section 5 - Quantification vectorielle (j'ai entendu parler de ce terme auparavant mais je ne sais pas vraiment ce qu'il implique, et dans la figure 5 il semble y avoir un algorithme complexe qui, si j'ai bien compris, convertit l'ensemble des valeurs que j'atteins de la main (juste mentionnée) en 1 chiffre que je peux utiliser comme séquence d'observation pour former un HMM pour 1 signe particulier. Pensez-vous que je me déplace sur la bonne voie? (Je travaille sur Android, (NDK) , J'ai trouvé JaHMM en tant qu'outil HMM et utilisant OpenCV pour le traitement d'images.
@Peter K. Merci pour votre réponse. En ce qui concerne la génération de données, je prévoyais de suivre les étapes de cet article, après avoir produit mon ensemble de données personnelles: (sections 4 et 5) http://www.i.ci.ritsumei.ac.jp/~shimada/papers/vi02 -tanibata.pdf
MISE À JOUR 2: en gardant à l'esprit qu'un geste est formé de {posture a, posture b, posture c}
Je pense maintenant que je dois utiliser une certaine forme d'algorithme de classification. Autrement dit, j'ai actuellement un ensemble de vecteurs de fonctionnalités:
Posture A: [angle d'ellipse l'entourant, rapport hauteur: largeur]
- 0.802985 33.909615
- 0,722824 31,209663
- 0,734535 30,206722
- 0,68397 31,838253
- 0,713706 34,29641
- 0.688798 30.603661
- 0,721395 34,880161
Posture B: [structurée de la même manière que la posture A]
- 0,474164 16,077467
- 0,483104 14,526289
- 0,478904 14,800572
- 0,483134 14,523611
- 0,480608 14,41159
- 0,481552 15,563665
- 0,497951 15,563585
etc..
et j'aimerais que lorsque j'alimente un vecteur caractéristique, j'obtienne un simple symbole, par exemple "A", "B", etc.
Est-ce possible? J'ai également migré la question ici: /programming/15602963/vector-quantization-algorithms-used-to-provide-observation-sequences-for-hidden
la source
Réponses:
J'ai utilisé HMM pour la reconnaissance des gestes (pas la reconnaissance de pose). Ce que j'ai fait, c'est: suivre la main et reconnaître le geste que la main dessinait dans l'air, vous pouvez l'imaginer comme une trace.
Vous pouvez utiliser HMM comme identificateur de séquence, vous devez donc d'abord transformer votre image en une séquence de nombres discrets.
Pour chaque geste que vous souhaitez reconnaître, vous devez former un HMM pour cela.
Vous avez donc un dictionnaire avec un mot connu. Chacun est un HMM formé. Si vous avez un nouveau mot (obdervation inconnue), vous pouvez calculer la probabilité que chaque mot du dictionnaire soit probablement celui inconnu.
Quelques pseudo-codes:
Maintenant, voyez quelle est la valeur maximale en probabilités et vous obtenez le mot le plus probable du dictionnaire!
Vois ici:
http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/Reprints/tutorial%20on%20hmm%20and%20applications.pdf
http://www.codeproject.com/Articles/69647/Hidden-Markov-Models-in-C
http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/
la source
Commençons par la reconnaissance de pose. Cet article trace la frontière de la main et compte le nombre de détections du bout des doigts à partir de cette frontière. Une chose à noter dans ce document est qu'aucune information "d'état" n'est requise. Pour l'estimation de la position / position, les HMM ne sont probablement pas un bon ajustement.
Les informations sur les gestes s'intègrent mieux dans la gamme HMM pour la résolution de problèmes. Cependant, j'aurais besoin de voir un peu plus le type de données que vous allez utiliser pour les gestes. Pouvez-vous expliquer un peu plus l'algorithme qui génère les données dont vous disposez?
Le problème est que la sélection de la bonne structure du modèle de Markov caché a beaucoup à voir avec la précision réalisable ... Attention: lien PDF!
la source