Reconnaissance des gestes en utilisant uniquement des techniques simples


8

Je suis un cours de vision par ordinateur et j'ai cet exercice: écrire un programme qui, étant donné une image de la main, il peut reconnaître si la main est ouverte, fermée, dans un coup de poing, ou en tenant une posture "ok", en utilisant uniquement le techniques fournies jusqu'à présent (pixel 4/8 connecté, région connectée, recherche de contour, recherche de trous, propriété de blob comme le centroïde, zone, périmètre, excentricité, moments de l'image, transformation d'image comme inversion / puissance / log / correction gamma / étirement du contraste, histogramme calcul et égalisation).

Je l'ai fait avec certaines propriétés de base de la goutte (la main fermée a une faible excentricité, "ok" a un trou, la main ouverte a une grande différence entre la zone de l'ellipse inscrite dans la goutte et la zone de goutte elle-même avec une faible excentricité) .. Cela semble fonctionner mais la première image est un peu problématique.

Je pense qu'il pourrait y avoir quelque chose de plus pour rendre un algorithme plus robuste. Peut-être une sorte de propriété de moment? Certains axes / orientation / points extrêmes de blob pourraient-ils aider?

Images de test PS:

ok2

D'accord

ouvert

coup de poing


Êtes-vous autorisé à utiliser la squelettisation ? Voir l'article Wikipedia pertinent pour plus d'idées.
Emre

non n'est pas permis car c'est le contenu d'une future classe!
nkint

Vous pouvez essayer d' appliquer une approximation d'agrégation symbolique au contour extérieur de chaque objet. Réduire fondamentalement une forme complexe à une série temporelle, puis les regrouper d'une manière ou d'une autre.
Ivo Flipse

je pense que je n'ai pas besoin d'utiliser n'importe quel type d'apprentissage automatique, juste une façon intelligente de combiner les émissions écrites dans la question ..
nkint

peut-être une caractéristique morphologique?
nkint

Réponses:


2

Vous pouvez essayer de regarder les moments invariants de Hu. Ils peuvent être construits à partir d'instants de base et sont invariants en rotation, échelle, réflexion et translation.

Calculez-les d'abord pour un ensemble de contours d'entraînement, puis appliquez-les au contour de test.

Il y a des implémentations dans Matlab et OpenCV, pour autant que je m'en souvienne.


2

Selon le livre Programmation de la vision par ordinateur avec Python, une approche intéressante consiste à utiliser des fonctionnalités SIFT (aka HoG) denses sur vos images et à alimenter ces fonctionnalités à un classificateur.

Je ne l'ai pas essayé moi-même, mais cela semble assez bon comme approche. De plus, l'inventeur de la fonctionnalité HoG propose l' application Flutter qui fonctionnait assez bien dans mes tests, et ce serait très bizarre si l'inventeur n'utilisait pas ses propres fonctionnalités ou un dérivé proche.


2

Un de mes amis l'a fait pour sa thèse de premier cycle. Il a essentiellement codé les propriétés de chaque geste. Par exemple, dans la première figure, prenez un masque rectangulaire sur les portions de la main. Les parties où la peau rencontre le bord du masque rectangulaire doivent être notées et marquées. Ensuite, les positions relatives du bord le plus grand et du bord plus petit peuvent être comparées.

Donc, pour pointer vers le haut, vous aurez un petit bord vers le haut et un plus grand bord au poignet.

Pour pointer latéralement, vous avez un bord plus petit d'un côté et un bord plus grand en bas.

Les directions peuvent à tout le moins être couvertes de cette façon.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.