TP Kinect

Transcription

TP Kinect
Analyse d’images avec la Kinect
1
Découverte de la Kinect
Initialement destinée à la console Xbox 360 afin de contrôler les jeux vidéo sans utiliser de manette,
la Kinect a rapidement séduit de nombreux développeurs du monde entier qui y ont trouvé de nouveaux
usages dans les jeux vidéo mais aussi dans les applications de tous les jours. Ce périphérique est doté de
différents capteurs permettant d’analyser une scène, non seulement par l’image mais également par le son.
Figure 1 – La Kinect.
1) Rechercher et détailler les principales technologies présentes dans la Kinect qui permettent l’analyse
des images.
2) énumérer les différentes applications d’analyse d’images qui ont été développées, en dehors de celles
destinées aux jeux vidéo.
2
Acquisition d’une vidéo avec Matlab
Pour utiliser la Kinect Xbox360 avec Matlab et acquérir des vidéos avec la toolbox "Image Acquisition",
il est nécessaire d’utiliser le driver KinectSDK fournit par Microsoft.
3) Par le biais du gestionnaire de périphériques, vérifier que le driver associé à la Kinect est bien le
driver KinectSDK (cf. figure 2).
4) Tester l’acquisition de vidéos avec la Kinect par le biais de la toolbox "Image Acquisition".
TP de vision
1
Figure 2 – Driver KinectSDK.
3
Ajustement du champ de vision
Pour accéder au moteur de la Kinect Xbox360 et ajuster le champ de vision, nous utilisons ici le logiciel
Kinemote. Ce logiciel fonctionne également avec le driver KinectSDK. Il faut impérativement passer par ce
logiciel pour ajuster le champ de vision et ne pas forcer manuellement sur la Kinect.
Figure 3 – Réglage du champs de vision.
TP de vision
2
4
Programmation de la Kinect avec Matlab
4.1 OpenNI
Le driver KinectSDK permet d’acquérir des vidéos avec la toolbox "Image Acquisition" à partir de la
Kinect Xbox360. Cependant, ce driver fourni par Microsoft ne convient pas pour la programmation avec
Matlab. En effet, pour concevoir des applications avec Matlab avec la Kinect, il est nécessaire d’utiliser
OpenNI (Open Natural Interaction), un framework opensource multi-langages et multiplateformes créé
par l’entreprise PrimeSense. Ce framework, qui permet d’exploiter le capteur de la Kinect, fonctionne en
utilisant un autre driver, le driver SensorKinect, lui-même fourni par PrimeSense.
4.2 Changement de driver
Selon l’utilisation que vous ferez de la Kinect (programmation, simple acquisition ou gestion du champ
de vision), le driver à utiliser pour accéder la caméra de la Kinect est donc différent. Pour changer le driver,
il faut aller dans le gestionnaire de périphériques, faire un clic droit sur le driver utilisé actuellement, puis
cliquer sur "Mettre à jour le pilote...". Cliquer ensuite sur "Rechercher un pilote sur mon ordinateur", puis
"Choisir parmi une liste de pilotes de périphériques sur mon ordinateur". Vous pourrez ainsi basculer d’un
driver à l’autre.
4.3 Les fichiers MEX
La programmation avec Matlab peut s’avérer parfois fastidieuse et n’est pas toujours appropriée pour
certaines applications où une programmation en C, C++ ou en Fortran est plus aisée. Les fichiers MEX permettent de faire le lien entre Matlab et la programmation dans d’autres langages. Ce sont des fichiers écrits
en C, C++ ou en Fortran, qui une fois compilés, peuvent être utilisés dans Matlab de la même manière que
les fichiers .m. Ils ont l’avantage d’améliorer la vitesse d’exécution par rapport à la programmation basique
avec Matlab. Afin de compiler ces fichiers, Matlab doit pouvoir accéder à un compilateur. La commande
"mex -setup" permet d’identifier les compilateurs compatibles avec Matlab présents dans l’ordinateur. Nous
utilisons ici le compilateur Microsoft Windows SDK.
4.4 Exemples de programmation
Des fichiers permettant d’accéder aux capteurs de la Kinect et d’acquérir des vidéos sont disponibles sur
le réseau d’échange de fichiers de la communauté des programmeurs Matlab : http://www.mathworks.
fr/matlabentral/fileexhange/30242-kinet-matlab. Des exemples de programmation avec la
Kinect sont également proposés.
5) Basculer sur le driver PrimeSense et exécuter le fichier "compile_cpp_files.m". Exécuter ensuite les
différents fichiers exemples. Observer le résultat de chaque application.
5
Reconnaissance de caractères
Dans ce TP, nous proposons de reconnaître des lettres formées par le corps humain selon deux approches. La première utilise les coordonnées des points formant le squelette du corps humain, tandis que la
seconde est basée sur des attributs de reconnaissance de forme.
TP de vision
3
5.1 Utilisation du squelette
Le programme "mxNiSkeleton.cpp" utilisé dans le fichier Matlab "ExampleSK.m" permet d’extraire
le squelette correspondant au corps humain présent sur la vidéo acquise par la Kinect. Ce squelette est
composé de 15 points, comme l’illustre la figure 4.
Représentation du
squelette par 15 points
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Head
Neck
Torso
Right shoulder
Left shoulder
Right elbow
Left elbow
Right hand
Left hand
Right hip
Left hip
Right knee
Left knee
Right foot
Left foot
Figure 4 – Représentation des 15 points constituant le squelette obtenu par la Kinect.
Dans ce TP, nous proposons d’utiliser les 9 premiers points correspondant au haut du corps pour reconnaître certaines lettres de l’alphabet.
6) Analyser les tableaux de coordonnées x et y obtenus grâce au script "ExampleSK.m" afin d’associer
les coordonnées aux différents points constituant le haut du corps.
7) écrire une nouvelle fonction "ReconnaissanceLettresSquelette" permettant, à partir des tableaux de
coordonnées x et y, de reconnaître et d’afficher les lettres présentes sur la figure 5.
8) Insérer la fonction "ReconnaissanceLettresSquelette" dans le script "ExampleSK.m" et tester la reconnaissance. Quelles sont les limites rencontrées ?
5.2 Utilisation des attributs de reconnaissance de forme
Nous proposons dans cette partie de reconnaître les lettres formées par le corps humain selon une autre
approche, basée sur des attributs de reconnaissance de forme. Cette approche nécessite de binariser l’image
puis d’isoler la forme correspondant au corps humain fin d’en extraire des caractéristiques.
Le fichier Matlab "Example.m" permet d’acquérir deux vidéos grâce à la Kinect, la première correspondant au capteur RGB de la Kinect et la seconde correspondant au capteur de profondeur.
9) Effectuer une acquisition du corps humain grâce au fichier "Example.m". Enregistrer la matrice correspondant à l’image du capteur de profondeur.
TP de vision
4
Figure 5 – Lettres à reconnaître.
5.2.1 Prétraitement
L’objectif du prétraitement est d’obtenir, à partir de la matrice précédemment enregistrée, une nouvelle
image binaire ne contenant que la forme du corps. Ce prétraitement sera effectué au sein d’une nouvelle
fonction "ExtractionFormeCorps".
10) Binariser l’image du capteur de profondeur enregistrée précédemment de sorte à obtenir les objets
(dont la forme du corps) en blanc et le fond en noir.
Plusieurs opérateurs morphologiques permettent d’améliorer la binarisation afin d’obtenir une image
dans laquelle les formes correspondent au mieux aux objets de la scène réelle :
• La fonction imlearborder est une fonction morphologique qui permet de supprimer des régions
qui sont au contact des bords de l’image binaire.
• La fonction bwareaopen, basée sur une analyse en composantes connexes, permet de supprimer des
régions de trop petites tailles dans une image binaire.
• La fonction imfill est une fonction morphologique qui permet de combler les "trous" dans les
régions d’une image binaire.
• La fonction bwmorph permet plusieurs opérations morphologiques sur des images binaire dont l’érosion, la dilatation, l’ouverture, la fermeture, l’amincissement, ...
• Les fonctions imerode et imdilate permettent respectivement de réaliser des opérations d’érosion et
de dilatation sur des images à niveaux de gris à partir d’un élément structurant. Cet élément structurant
peut être défini soit par une matrice de 0 et de 1, soit en utilisant la fonction strel qui permet de
configurer des éléments structurants élémentaires.
11) En utilisant une ou plusieurs de ces fonctions, traiter l’image binarisée afin d’obtenir une image
dans laquelle la forme correspond au mieux au corps humain.
5.2.2 Localisation de la région d’intérêt
La fonction bwboundaries détermine les régions de pixels connexes dans une image binaire. L’image
résultante de cette fonction est une image indexée où chaque index correspond à une étiquette (label), c’est
à dire une région. Cette image peut être convertie en une image RGB grâce à la fonction label2rgb. Enfin,
la fonction regionprops permet de mesurer différents paramètres de régions contenues dans une image
d’étiquettes, tels que :
• la surface,
• le périmètre,
TP de vision
5
•
•
•
•
•
•
le diamètre équivalent,
la longueur de l’axe principal d’inertie (longueur de la région),
la longueur du second axe d’inertie (largeur de la région),
l’angle de l’axe principal d’inertie (orientation de la région),
les coordonnées du centre de gravité,
les coordonnées du cadre circonscrit à la région (boundingbox)...
12) En utilisant la fonction bwboundaries, créer l’image d’étiquettes correspondant à votre acquisition
avec des étiquettes en niveau de gris. Afficher cette image en utilisant la fonction label2rgb afin de coder
la valeur de chaque étiquette sur 3 × 8 bits.
13) Pour chacune des régions contenues dans l’image d’étiquettes, calculer sa surface, son périmètre, les
coordonnées de son centre de gravité, ainsi que celles de sa boundingbox. Afficher à proximité de chaque
objet son numéro, sa surface, son périmètre. Représenter le centre de gravité par une croix.
14) En utilisant les valeurs du périmètre et/ou de l’aire de chaque région, ainsi que les coordonnées de
la boundingbox, isoler la région correspondant au corps humain et copier cette région dans une nouvelle
image (cf. figure 6) qui sera le paramètre de sortie de la fonction "ExtractionFormeCorps".
Figure 6 – Corps isolé.
15) Vérifier que les valeurs choisies précédemment permettent bien d’isoler le corps quelque soit la lettre
dessinée. Pour cela, intégrer la fonction "ExtractionFormeCorps" dans le fichier "Example.m" et analyser
les résultats obtenus avec de nouvelles acquisitions. On renommera le fichier ainsi complété en fichier
"Example_Lettre.m".
5.2.3 Extraction des caractéristiques
Afin d’identifier la lettre dessinée par le corps humain, il est nécessaire d’extraire des attributs qui
permettent de caractériser la forme d’un objet. La caractéristique utilisée ici est la cavité. Les cavités se
TP de vision
6
définissent par leur direction d’ouverture. Cinq types de cavités sont ainsi définies :
• cavité Nord : vers le haut,
• cavité Est : vers la droite,
• cavité Sud : vers le bas,
• cavité Ouest : vers la gauche,
• cavité Centrale : au centre.
Par exemple, un pixel de la région appartient à une cavité Sud si, et seulement si, les trois conditions
suivantes sont vérifiées :
• ce pixel n’appartient pas à l’objet ;
• en se déplaçant en ligne droite vers le sud, à partir de ce pixel, on ne rencontre pas l’objet ;
• en se déplaçant en ligne droite vers l’est, l’ouest, ou le nord, à partir de ce pixel, on rencontre l’objet.
Un pixel appartient à une cavité Centrale si, et seulement si, les deux conditions suivantes sont vérifiées :
• ce pixel n’appartient pas à l’objet ;
• en se déplaçant en ligne droite vers l’est, le sud, l’ouest, ou le nord, à partir de ce pixel, on rencontre
l’objet.
Afin de mettre en évidence les pixels appartenant aux différents types de cavité, on réalise une première
série de traitements morphologiques à partir de l’image 6. La figure 7 montre le résultat de ces traitements.
(Nord)
(Est)
(Sud)
(Ouest)
Figure 7 – Traitements réalisés sur l’image de la figure 6.
16) Déterminer le plus précisément possible quelle opération morphologique a été réalisée sur chacune
des images de la figure 7.
17) Écrire une fonction "Cavites" permettant d’appliquer ces traitements.
Pour CHAQUE cavité, une seconde série de traitements est ensuite effectuée à partir des images (Nord)
à (Ouest).
La figure 8 montre le résultat de ces traitements pour la détection des pixels appartenant à des cavités
Sud.
18) Après avoir déterminé les traitements effectués sur l’image de la figure 8, déduire les opérations à
effectuer pour détecter les pixels des cavités Nord, Ouest, Sud et Centre.
19) Compléter la fonction "Cavites" afin de déterminer les 5 types de cavités associés à chaque forme.
Maintenant qu’il est possible de calculer un vecteur d’attributs de forme à partir d’une image, nous allons
mettre en place la procédure de classification. Cette procédure va nous permettre d’analyser la pertinence
de nos attributs en mesurant le taux d’images bien classées.
TP de vision
7
(a)
(b)
(c)
Figure 8 – Traitements réalisés pour la détection des cavités Sud.
5.2.4 Classification
Le processus de classification est divisé en deux étapes successives :
1. L’apprentissage : l’objectif est de "construire" des classes d’objets à partir de l’ensemble d’images
d’apprentissage. Pour cela, les objets présents dans les images d’apprentissage sont décrits par un
ensemble d’attributs.
2. La classification : durant cette seconde phase, nous utiliserons la méthode du plus proche voisin qui
consiste à assigner chaque image requête à la classe de l’image d’apprentissage la plus similaire.
Cette similarité entre images est mesurée en comparant les vecteurs d’attributs.
Apprentissage Afin de caractériser les différentes lettres, il est nécessaire de disposer d’une base d’apprentissage et de relever pour chacune des images constituant cette base la valeur des attributs.
20) Intégrer la fonction "Cavites" dans le fichier "Example_Lettre.m", puis acquérir 5 images pour
chacune des lettres présentes sur la figure 5. A chaque acquisition les valeurs des différentes cavités seront
relevées.
21) Enregistrer les données d’apprentissage dans une variable "Apprentissage.mat".
Afin d’évaluer si la caractérisation avec les cavités est pertinente, nous allons présenter au système de
nouvelles acquisitions et vérifier si les lettres formées par le corps humain sont assignés correctement à leur
classe d’appartenance. C’est la phase de décision.
Décision Pour effectuer la classification de la nouvelle acquisition, nous allons considérer la méthode du
plus proche voisin.
22) Implémenter la classification par le plus proche voisin. La fonction open permettra d’accéder à la
matrice "Apprentissage.mat" précédemment enregistrée.
5.2.5 Essais expérimentaux
23) Tester la pertinence de votre approche en présentant au système de nouvelles acquisitions et en
vérifiant la pertinence de la classification. Indiquer les limites de l’approche mise en place.
24) Poursuivre les essais afin d’améliorer les résultats de classification. Pour cela, vous pouvez envisager
d’utiliser un ensemble d’attributs différent, tester d’autres classifieurs, d’autres distances, ...
TP de vision
8

Documents pareils