Kinect – Part 1 – Introduction à OpenKinect, OpenNI et NITE
Tout d’abord permettez-moi de vous souhaiter une bonne année 2011. Je ne pensais pas que le précédent post sur mon blog serait le dernier de l’année 2010 mais cette fin d’année fut bien chargée tant sur le plan personnel que professionnel.
Il faut dire qu’à la mi-novembre je n’ai pu m’empêcher (accompagné d’autres collègues que je ne dénoncerai pas ici ;)), d’acheter la Kinect le jour même de sa sortie.
N’étant pas un grand adepte des jeux vidéo, j’ai dû m’équiper de A à Z en optant pour le pack Xbox Slim 250go accompagné de la Kinect. Les soirées entre amis passent désormais par quelques petits battles de dance (avec Kinect Dance Central) ou quelques épreuves d’athlétisme, volley, boowling ou autres sports sur Kinect Sports … si nous ne sommes pas en train de boucher les fuites d’un aquarium sur Kinect Adventure. Bref, les voisins du dessous sont ravis pour nous
Et il y a bien longtemps que j’attendais cela, depuis les promesses du projet Natal présenté en Juin 2009, je suis heureux de constater que Kinect tient bien ses promesses surtout pour une 1ère version dans le genre.
Surtout quand on sait qu’aujourd’hui, le potentiel de la Kinect n’est pas encore pleinement exploité. Il n’y a que quelques titres commercialisés pour le moment et pour la plupart dans le domaine du jeu. Il faudra du temps avant que le catalogue s’enrichisse et que de nouveaux usages en découlent. Les jeux étant la partie émergée de l’iceberg.
De plus ces derniers n’exploitent que les fonctionnalités de base de la Kinect. D’après Blitz Games, par l’intermédiaire de Steve Stopps, le potentiel de la Kinect n’est exploité qu’à 20 à 30% dans les jeux actuels.
Il faut dire, et toujours d’après le site d’information Euragamer, que les jeux actuels sur Xbox 360 n’exploiteraient la Kinect qu’à une résolution de 320×240 afin de permettre de traiter 30 images par seconde tout en permettant la bonne exécution du jeu. A voir les images ou vidéos prisent dans Kinect Sports ou Dance Central, on y croit, tellement leurs qualités sont basses. Avec une telle résolution, difficile d’analyser en détail les mouvements les plus subtils, la position des doigts, etc… L’augmentation de la résolution associée à une puissance de calcul plus élevée permettra d’aller encore plus loin.
Le développeur, lui aussi, doit appréhender ce nouveau modèle d’interaction afin de développer de nouveaux usages dans les jeux vidéo mais aussi dans les applications de tous les jours…
Bref cette technologie nous ouvre d’immenses possibilités où tout reste à inventer et nous ne serons pas déçus !
OpenKinect : la Kinect aux développeurs
Dès sa sortie, les développeurs (ou hackers) du monde entier se sont penchés sur ce nouveau device. Avec des projets comme « OpenKinect », il devient désormais possible de développer avec la Kinect. Ce projet né de la communauté open-source est particulièrement impressionnant, il se compose aujourd’hui :
- « libfreekinect » : drivers et API multiplateformes (Windows, Linux et OS X) permettant d’exploiter les images (RGB et Depth) ainsi que le moteur, leds et l’audio.
- « OpenKinect Processing Library » : une couche logicielle permettant d’analyser les « données brutes » afin de fournir une couche d’abstraction pour le tracking des mains, du squelette, la reconstitution 3D, etc…
Des sites comme KinectHacks référencent des dizaines de projets, d’amateurs pour la plupart, autour de la Kinect. On y trouve des tas de nouveaux usages qui font des films de science-fiction comme Minority Report une réalité. (vidéo)
Cependant je ne suis pas venu vous présenter le développement avec cette librairie !
A la mi-décembre, l’entreprise à l’origine du projet Natal, PrimeSense, mit à disposition un driver Kinect pour le framework OpenNI (né en collaboration avec Willow Garage et Side-Kick) ainsi qu’une licence gratuite de leur « middle-ware » nommé NITE.
« OpenNI », l’autre force Open-Source
OpenNI est un framework opensource distribué sous licence LGPL permettant de concevoir des applications utilisant l’interaction naturelle ou Natural Interaction (OpenNI : Open Natural Interaction).
Ce framework multi-langage et multiplateforme fournit toute la tuyauterie pour faire communiquer d’une part des capteurs et d’autre part des « percepteurs » responsable du traitement des données des différents capteurs.
Les capteurs pouvant être des caméras classiques (RGB), infrarouge, capteur 3D ou audio (microphones)… et bien sûr la Kinect !
Les percepteurs vont permettre de traiter les données fournies par les capteurs pour détecter les mouvements, suivre une main, reconstituer le squelette d’un corps, analyser la scène pour extraire le fond, détecter les personnes ou encore déterminer les coordonnés du sol.
OpenNI définit le concept de « Production Node », une unité logique responsable de fournir des données. Un nœud de production peut utiliser des nœuds enfants et être utilisé par des nœuds au-dessus de lui. On distingue deux types de nœud de production : ceux de type « sensor » (le nœud produit les données acquises d’un capteur) et ceux de type « middle-ware » (le nœud produit des données issues d’un traitement).
Par exemple le suivi d’une main est réalisé par le nœud de production de type middle-ware « Hand Point Generator » qui lui-même utilise le nœud de production « Depth Generator » de type « sensor » implémenté au niveau d’un capteur comme la Kinect par exemple.
On définit donc des « Production Chains » entre différents nœuds de production fournissant les données d’un capteur (plus bas niveau) ou les données d’un traitement (plus haut niveau).
Cette architecture modulaire permet d’implémenter différents « middle-ware » ou devices respectant l’API définie par OpenNI. Car OpenNI, en soit, ne définit que les interfaces et non leurs implémentations.
PrimeSense met à disposition les drivers et modules de la Kinect pour OpenNI en open-source sur le site https://github.com/avin2/SensorKinect permettant d’exploiter la Kinect comme un capteur dans l’architecture d’OpenNI.
« NITE »
Nite quant à lui est un jeu de modules « middle-ware » pour OpenNI et de contrôles proposés en licence gratuite. Ces modules implémentent toutes les interfaces OpenNI avec les « algorithmes maison NITE » et proposent aux développeurs différents contrôles de haut niveau.
L’architecture est la suivante :
On y trouve au niveau le plus bas l’implémentation des modules OpenNI par PrimeSense qui définissent des nœuds de production assurant la détection des mouvements, mains, personnes, scènes, etc.. Ces modules sont exploités par le framework OpenNI. La couche « Control Management » permet de lier les flux de données des nœuds de production dans OpenNI avec les controles NITE au niveau le plus haut.
Ces contrôles sont entre autre :
- Push Detector : permettant de détecter un « push » avec la main
- Steady Detector : détecte les « appuis-long » avec la main (comme pour la validation des menus dans Kinect Adventures ou Sports).
- Wave Detector : permettant de détecter le mouvement de la main faisant une « wave » (gauche-droite deux fois) et de suivre la ou les main(s).
- Swipe Detector : détecte la direction d’une main (vers la gauche, la droite, en haut ou en bas)
- Ou encore les SelectableSliders 1D et 2D, le Circle Detector, etc…
Nous aurons l’occasion de revoir plus en détail ces différents contrôles dans les prochains articles consacrés au développement avec OpenNI et NITE.
Quelques liens :
Dans le prochain article nous verrons comment installer cet environnement : OpenNI et NITE avec la Kinect.
A suivre
BOUHOU Azdine
Belle introduction, j’attends avec impatience les autres parts.
Florian
Très bon billet, merci.
A quand la Part 2 ? 😉
AdminTOD
+1 : A quand la partie 2
JD
OpenNI n’est absolument pas open source. Un certain nombre de fichiers sont disponibles mais il n’est pas possible de consulter le contenu de l’API. Pour preuve les librairies dynamiques sont fournies mais pas leur code.
Sebastien Warin
La suite de l’article et le code du « TouchDevice » WPF4 comme présenté dans la vidéo (https://www.youtube.com/watch?v=K4JP50q80Ss) seront publiés dans le magazine Programmez cet été et d’ici quelques mois sur ce blog !
Wait & see 🙂
Trackback: Bonne Année 2012, Bonne Année xBrainSoft | Sebastien.warin.fr
Trackback: Kinect & Processing
pako
super ton blog