detection et suivi de blob a l`aide de la kinect

Transcription

detection et suivi de blob a l`aide de la kinect
DETECTION ET SUIVI DE BLOB A L’AIDE DE LA KINECT
Auteur1
Adresse électronique
Marie-Anne Pungu Mwange
[email protected]
Auteur3
Adresse électronique
RÉSUMÉ
L’objectif de ce travail était, dans un premier temps,
de détecter une personne dans une partie de pièce et de
suivre ses déplacements dans celle-ci. Cela devait se
faire sur base des informations fournies par une Kinect
fixée au plafond et reliée à un ordinateur de traitement.
Une fois cet objectif atteint, il a fallu transmettre la
position de l’individu à un avatar virtuel installé sur un
ordinateur dédié: MARC du LIMSI (unité de recherche
du CNRS pour l’informatique dans la mécanique et les
sciences de l’ingénieur). Le but ultime étant de permettre
à ce dernier d’interagir avec la personne détectée. Ces
interactions se font par les mouvements de tête de
MARC et ses expressions faciales.
Les détails concernant le logiciel d’animation de
MARC et la manière dont sont créées ses expressions
faciales et ses mouvements font l’objet d’un autre
rapport, celui de Florian Mottay (projet DARWIN).
MOTS-CLES
Traitement de l’image, Kinect, détection de blob,
tracking, interaction virtuelle, MARC, Processing,
OpenNI
1.
1.2. Le projet KIT
Étant donné que le potentiel de la Kinect n’est pas
encore pleinement utilisé dans les jeux actuellement
proposés [3], les développeurs se sont rués sur cet
appareil pour proposer des projets aussi originaux les uns
que les autres.
Dans ce cadre, le laboratoire LARAS de l’ISIB tenait à
apporter sa pierre à l’édifice en proposant le projet KIT
(Kinect Tracking) dont il est question dans ce document.
Ce projet consiste à traiter la carte de profondeur
fournie par la Kinect pour y faire de la détection et du
traçage de blob et à utiliser les résultats de ces
manipulations pour créer de l’interaction avec un avatar
virtuel.
Au-delà du but susmentionné, ce projet sert à
introduire la Kinect et son fonctionnement interne. Il
servira de base aux futurs projets qui exploiteront cet
accessoire.
2.
DESCRIPTIONS DES PARTIES DU PROJET
Le projet est purement informatique. Sa composante
principale est le traitement de l’image.
INTRODUCTION
La Kinect est une véritable révolution dans le monde
du jeu vidéo. En effet, d’après le livre Guiness des
records, c’est « l’accessoire high-tech le plus vendu dans
un court laps de temps », avec une moyenne de plus de
100 000 unités vendues quotidiennement de par le
monde. La raison principale de ce succès est que, pour la
première fois, plusieurs technologies sophistiquées sont
réunies dans un appareil abordable.
1.1. La technologie de la Kinect
La Kinect est motorisée pour suivre les déplacements
des joueurs et contient 4 microphones, une caméra RGB
de 640x480 pixels qui filme 30 images à la seconde et un
capteur de profondeur. Ce dernier est composé d’un laser
infrarouge et d’un capteur CMOS monochrome. Il est
codé sur 11 bits et fournit une carte de profondeur de
640x480 pixels détaillant 2048 niveaux de sensibilité.
Son champ de vision est de 57° horizontalement et 43°
verticalement [1] [2].
3.
MATERIEL ET METHODES
3.1. Outils
Les outils matériels fournis:
 La Kinect, périphérique de jeu créé au
départ pour la console XBOX 360
 Un ordinateur standard sur lequel est
installé le système d’exploitation Windows
7 Edition familiale Premium dans sa
version 64 bits.
Les outils logiciels utilisés :
 Sensor Kinect, pilote semi officiel pour la
Kinect, développé par la société
PrimeSense qui est à la base de la
technologie utilisée dans l’appareil
 OpenNi, framework multi-langage et
multiplateforme qui traite les informations
brutes venant des différents capteurs de la
Kinect et les rend exploitable
 Processing, langage de programmation basé
sur Java
3.2. Les différentes étapes et techniques
Dans un premier temps, il a fallu recenser les
différents outils permettant de récupérer les données
fournies par la Kinect sur l’ordinateur. Au moment où
cette étape a été faite, il existait deux pilotes permettant
d’utiliser la Kinect sur Windows : Open Kinect et
Sensor Kinect. Pour chacun d’entre eux, il existe des
outils qui traitent les données brutes et les rendent
exploitables. Pour Open Kinect, qui est un driver pirate,
il existe la plateforme CL NUI et le framework
Libfreenect. Sensor Kinect est associé à OpenNi.
Il faut noter que depuis lors, Microsoft a publié un
pilote et une plateforme de développement officiels.
Ensuite, a fallu choisir parmi les différents outils
recensés, ceux qui ont été utilisé pour la suite du projet.
Le choix s’est porté sur Sensor Kinect et OpenNi. Ils ont
été choisis car ils étaient les mieux documentés et plus
simple d’utilisation pour un développeur novice.
L’étape suivante a été l’utilisation des instruments
sélectionnés pour faire de la détection de blob et le
tracking de ceux-ci à partir des données fournies par la
Kinect dans une configuration particulière : la Kinect
accrochée au plafond. Cette étape a été réalisée à l’aide
du langage Processing car il est doté d’une librairie
permettant d’utiliser OpenNi et de plusieurs détecteurs
de blobs. Processing est un langage spécial. Par défaut,
chaque programme Processing est constitué de deux
classes : la classe setup() qui est exécutée une fois
seulement au lancement du programme et la classe
draw() qui est une boucle infinie, exécutée 30 fois par
seconde.
La librairie utilisée pour la détection de blob est flob
car elle met en œuvre la détection et le suivi de blob [4].
La technique utilisée est la suivante :
1) On récupère la carte de profondeur de la
Kinect. OpenNi l’affiche en niveaux de
gris. Plus un point est proche de la Kinect,
plus il est clair. Les objets qui sont trop
près (à une distance inférieure à 60 cm)
apparaissent complètement noirs. Mais le
placement de la Kinect au plafond
empêche de cette situation d’arriver. De
plus, le sol de la pièce se situe dans la
portée de détection de la Kinect.
2) La carte de profondeur est binarisée selon
un seuil de clarté. Tous les points plus
clairs que ce seuil sont mis en blancs et les
autres sont mis en noirs.
3) On détecte les amas de points blancs et ils
sont trackés d’image en image.
La dernière étape a été la mise en place de
l’interaction avec l’avatar virtuel MARC. C’est une
partie qui a été faite en collaboration avec Florian
Mottay qui a travaillé avec le logiciel de l’avatar virtuel
dans le cadre de son projet DARWIN. Pour cette étape,
il a fallu d’abord mettre le seuil à 254 de façon à ne
prendre que le blob le plus clair. Ensuite, il a fallu
diminuer le bruit afin que MARC n’ai pas le regard qui
saute. Pour ce faire, les déplacements de blob inférieurs
à 10 pixels ont été négligés. Après cela, une
correspondance entre le coefficient de la rotation de la
tête de MARC et la position du blob a été établie. Elle a
été faite comme suit : une personne a pris place dans le
champ visuel de la Kinect, on a relevé la position du
centre du blob associé à cette personne sur la carte de
profondeur. Cette position est exprimée en pixels. On a
fait bouger la tête de MARC jusqu’à ce que la personne
ait l’impression que l’avatar la regarde et on a noté le
coefficient qui y était associé. Les points obtenus sont
donnés dans le tableau1 suivante. Notons que le
déplacement en x correspond au déplacement latéral en
face de MARC.
Position en x du blob
16
310
615
Coefficient de MARC
0.6
0
-0.6
Tableau 1. Points établis pour le mouvement de
tête de l'avatar virtuel
Sur base de ces points, une régression linéaire a été
faite pour calculer le coefficient à donner à MARC en
fonction de l’abscisse du blob. L’équation obtenue est :
(1)
Le résultat de cette opération doit être envoyé à
l’avatar virtuel dans un message BML (langage basé sur
XML). Ce message est le suivant (à la place du « y »
gras doit être mise la valeur du résultat) :
"<bml id=\"Track_0\">"+
"<marc:fork id=\"Track_0_fork_1\">"+
“<wait duration=\"0.0\" />"+
"<face id=\"bml_item_1_au51\" type=\"FACS\"
side=\"BOTH\" amount=\""+y+"\" au=\"52\"
marc:interpolate=\"0.1\"
marc:interpolation_type=\"linear\" />"+
"<face id=\"bml_item_1_au52\" type=\"FACS\"
side=\"BOTH\" amount=\""+heigh+"\" au=\"53\"
marc:interpolate=\"1.0\"
marc:interpolation_type=\"linear\" />"+
"</marc:fork>"+
"</bml>";
Figure 1. Tag BML pour que MARC tourne la tête
Il est envoyé via UDP grâce à la librairie
hypermedia.net.
Enfin, il a fallu gérer le déplacement en « y » de la
personne dans la pièce. Il a été décidé que l’avatar
virtuel changerait d’expression faciale si le blob associé
à la personne se trouve à une ordonnée inférieure à 60.
La figure 2 suivante montre les tags BML envoyés à
MARC pour qu’il sourie ou qu’il montre de
l’agacement.
//agacement
"<bml id=\"Track_0\">"+
"<marc:fork id=\"Track_0_fork_1\">"+
"<wait duration=\"0.0\" />"+
"<face id=\"bml_item_1\" >"+
"<description level=\"1\" type=\"marcbml\">"+
"<mpeg4_expressions expressions=\"EkmanColere\" intensities=\"1.0\" interpolate=\"1.0\" />"+
"</description>"+
"</face>"+
"</marc:fork>"+
"</bml>";
//sourire
"<bml id=\"Track_0\">"+
"<marc:fork id=\"Track_0_fork_1\"><wait
duration=\"0.0\" />"+
"<face id=\"bml_item_1\" >"+
"<description level=\"1\" type=\"marcbml\">" +
"<mpeg4_expressions expressions=\"Bouche
Sourir Leger\" intensities=\"0.4\"
interpolate=\"1.0\" />"+
"</description>" +
"</face>" +
"</marc:fork>"+
" </bml>";
Figure 2. Tags BML pour les expressions faciales
Une attention toute particulière a été portée à ce
niveau-là car, le même message d’expression faciale ne
doit pas être envoyé deux fois consécutivement. C’est
pourquoi chaque expression faciale a été placée dans sa
propre méthode et que des variables booléennes ont été
créées, comme le montrent les figures suivantes.
Figure 5. Le tracker définitif suit le blob le plus
proche de la Kinect (en rouge ici)
En ce qui concerne l’interaction entre une personne et
l’avatar virtuel, lorsque la personne se déplace dans le
champ de vision de la Kinect, MARC suit son
mouvement avec la tête. De même, celui-ci modifie ses
expressions faciales en fonction de la position envoyée.
Il sourit la plupart du temps mais « tique » quand on
s’approche trop de lui.
Figure 3. Variables booléennes à l'initiation
Figure 4. Utilisation des variables pour
déclencher les fonctions qui envoient les tags
d'expression faciale
4.
RESULTATS FINAUX
Au niveau du tracker, il suit le blob le plus près de la
Kinect.
Figure 6. Visage de Marc agacé
5.
CONCLUSIONS ET AMELIORATIONS
POSSIBLES
Toute cette expérience constitue une base qui peut
encore être développée. En effet, la sortie récente du
pilote homologué par Microsoft et de l’environnement
de développement officiel permettront surement
d’améliorer les résultats obtenus de façon significative.
Parmi les ajouts les plus pertinents il y a le
remplacement de la détection de blob par la détection de
personne. Au lieu de faire un traçage basé sur la couleur
du blob, il serait intéressant de suivre les formes qui
correspondent à des êtres humains vus de haut. Cette
amélioration risque cependant d’être fort complexe étant
donné la diversité des coiffures et les formes différentes
que peuvent présenter les gens selon qu’ils se présentent
de face, de dos, de profile ou de biais. Un autre
approfondissement utile serait la gestion de la taille des
personnes détectées. Cela permettrait à MARC de lever
ou d’abaisser le visage vers les personnes avec il
interagit. Une autre source d’amélioration serait
l’exploitation des microphones pour coupler la
reconnaissance d’une personne et l’identification de
cette dernière par sa voix. Une dernière modification est
la gestion par l’avatar de plusieurs individus en face de
lui.
Néanmoins, c’est un travail qui mérite d’être
développé car il est unique (il n’existe, à la connaissance
de l’auteure aucun autre projet qui utilise une Kinect
fixée au plafond) et qu’il est applicable à énormément
de domaines différents. Le plus évident étant celui des
jeux vidéo. Ce n’est pourtant pas le seul : on pourrait
imaginer, par exemple une borne informative ou
publicitaire où à la place d’avoir un texte sans vie, on
aurait un avatar virtuel qui délivrerait son message aux
passants en leur parlant de façon naturelle.
6.
REFERENCES
[1] MSN divertissement. Dix choses à savoir sur le
Kinect, juin 2011.
http://divertissements.fr.be.msn.com/games/kinect/ar
ticle.aspx?cp-documentid=154685543&page=2
[2] Wikipedia. Kinect, juin 2011.
http://en.wikipedia.org/wiki/Kinect
[3] Eurogamer. Today’s game use 20-30 percent of
Kinect, juin 2011.
http://www.eurogamer.net/articles/2010-11-11todays-games-use-20-30-percent-of-kinect
[4] s373.net. flob // multi blob tracker for processing,
juin 2011.
http://s373.net/code/flob/flob.html

Documents pareils