[Après-midi du développement] Kinect pour Windows SDK

Temps de lecture : 7 minutes

Les après-midi du développement se sont penchés sur le SDK de Kinect, sorti en version beta le 16 juin. C’était l’occasion de découvrir l’API et toutes les spécificités de la machine à 3 yeux et 4 oreilles.

David Catuhe et l’introduction

David a initié cet après-midi avec une introduction résumant les fonctionnalités et principes de la petite bête noire. On retiendra plusieurs choses :

  • Le Kinect, un beau jouet :
    • Tracking de squelette (jusqu’à 2 personnes) avec 20 points clés (= “joints”) du corps humain
    • Tracking de position (jusqu’à 4 personnes)
    • Positionnement dans l’espace (caméra de profondeur pour l’axe des z)
    • 4 micros
  • Le SDK Kinect est carrément bien fichu !
    • 1 Stream par flux vidéo/audio : caméra classique, caméra de profondeur, audio
  • C’est beaucoup de configuration :
    • La caméra propose un mode 640×480 @30fps ou 1280×1204 @15fps.
    • Le buffer de profondeur propose 320×240 ou 80×60 (!)
    • Paramètres de lissage et interpolations en tout genre
  • => Tout ça influe sur les performances ! Evidemment, en désactivant le lissage et en utilisant les résolutions minimales, la détection de la Kinect est instantanée. Autrement, tout a un coût.

L’après-midi s’est ensuite déroulée sous forme de nombreuses petites sessions, toutes très intéressantes et complémentaires.

David Catuhe – Evangéliste Microsoft

Mitsu et la 2D :

Le nouveau CTO de Sensorit adepte des sessions limpides a encore frappé. L’essentiel, en résumé :

  • Le positionnement de la main est à choisir entre un déplacement dans l’espace, ou un déplacement relatif par rapport au corps.
  • Déterminer des gestures fiables n’est pas aisé : il faut un mouvement ne venant pas être parasité par les mouvements naturels (si je me gratte la tête et que ça formate mon disque dur, c’est assez gênant)
  • Un simple gesture comme le swipe peut s’avérer plus complexe que prévu, il faut gérer la fin de mouvement qui peut être interprété comme plusieurs swipes. Mitsu nous a montré comment “manipuler du temps” (merci C#5) et mettre le thread en attente après avoir détecté un gesture (on exécute rarement 2 swipes à la suite).
  • Plus spécifique à WPF, Mitsu nous a montré comment propager un événement de type “hand moved” afin de notifier chaque contrôle dès qu’une main le survole. C’est une fonctionnalité que je ne connaissais pas, propre à WPF, et qui au même titre qu’une Attached Property, permet d’attacher un événement à un contrôle. Intéressant !

Mitsu Furuta – CTO – Sensorit

Pierre-Yves + Thierry et l’intégration à Blend :

Les deux gaillards d’Ucaya ont développé une bibliothèque de composants de type trigger/action/behavior pour le SDK Kinect.

Dans l’idée, en partant d’une application WPF orientée touch, on y ajoute une compatibilité Kinect en moins de deux :

  • On lance Blend
  • On charge la liste des composants Kinect
  • On drag & drop 1er composant de base et global à l’application permettant d’activer la détection de Kinect (et basé sur le “coucou” de la Xbox)
  • Puis on active des fonctionnalités sur des boutons et autres du type :
    • effet d’aimant à l’approche d’un bouton
    • validation d’un bouton au bout d’un laps de temps
    • drag d’un bouton pour scroller d’un écran à l’autre
    • reconnaissance de la voix
    • etc.

Une de leurs astuces consiste à définir un cadre de détection pour chaque main, relatif au joint fixe du corps (type colonne vertébrale). Ainsi, on obtient une zone positionnée en relatif par rapport au corps, et qui permet de parcourir l’écran d’un bout à l’autre d’un simple geste.

Deux semaines auront a priori suffit à développer cette bibliothèque. Sur le papier, c’est plutôt sexy et l’idée est bonne, reste à voir à l’utilisation.
Globalement, ça paraît simple d’utilisation. On notera que certains behaviors permettent une personnalisation plus profonde, avec la gestion de styles et templates.

On regrettera quelques approximations dans la détection de certains gestes. Mais on peut mettre ça sur le compte de l’effet démo et de la jeunesse du SDK ! 🙂

Pierre-Yves Gardette – Consultant – Ucaya
Thierry Bouquain – Consultant – Ucaya

Benoît et le pilotage 3D :

Benoît nous a fourni une démo assez inattendue de déplacement dans l’espace à l’aide de Kinect.
Il s’est basé sur un moteur 3D et une carte déjà modélisée pour montrer comment intégrer Kinect à une visite virtuelle en 3D temps réel.

Le fonctionnement se base sur le positionnement de la main dans l’espace pour avancer ou tourner. C’est un exemple d’exploitation du capteur de profondeur.
C’est une approche quelque peu intéressante mais qui aura du mal à remplacer le combo inégalable clavier/souris.

L’autre démo portait sur la détection d’une position de conduite, comme si on tenait un volant. Benoît nous a expliqué quelques unes de ses astuces : plutôt que détecter une gesture spécifique, on vérifie si les 2 mains se trouvent alignées à hauteur d’épaules. Pour tourner, il ne gère pas l’amplitude, il regarde juste si une main est au-dessus de l’autre.

Dans la lignée des approches simplifiées, il nous a parlé de la gesture où la main décrit un cercle. Plutôt que suivre point par point le déplacement et voir si la courbe décrit un cercle, son astuce consiste à :

  • prendre une 20aine de points
  • voir si le point d’origine correspond à peu près au point d’arrivée
  • calculer le barycentre de tous les points
  • vérifier si la distance des points par rapport au barycentre est sensiblement la même

Et voilà, magie, on détecte un mouvement circulaire.

On sent bien que la difficulté derrière la détection des gestures …

Benoit Laut – MVP Visual Studio ALM – Bewise

Simon et la 3D/XNA :

C’est au tour de Simon de nous faire 3 démonstrations basées sur la détection du squelette, la représentation 3D des personnes et du head tracking.

La première démo montrait comment détecter et afficher les joints en 3D pour le 1er jeu de simulation de baffes réelles.
Le principe est simple : Kinect détecte 2 joueurs qui doivent se mettre des baffes. Chaque fois qu’une main se rapproche de la hitbox de la tête, ça comptabilise 1 point et affiche un magnifique “PAF” (sans faire de Chocapics) à l’écran.
On a pu assister à un combat d’anthologie entre Simon et David 🙂



La deuxième démo se focalisait cette fois sur une représentation 3D d’un bonhomme constitué de bones. L’application permettait de faire du motion capture d’une personne dansant la carioca (Carioca Dance Revolution).

Les principales difficultés abordées :

  • orientation des bones
  • proportions humain / personnage

Pour résoudre le soucis : les maths ! C’était l’occasion de ressortir un cosinus inverse, moment de nostalgie des cours du lycée.

La troisième et dernière démo montre un exemple de head tracking.

Kézako ? Tout simplement le suivi de la tête pour afficher une scène 3D qui créé l’illusion de la profondeur, en s’adaptant aux déplacements.
C’est assez impressionnant et immersif, mais pour des raisons évidentes, ça reste malheureusement limité à 1 personne à la fois.
Un exemple sur youtube permettra de mieux fixer les idées pour ceux qui ne connaîtraient pas.

Simon Ferquel – Consultant – Infinite Square

Niels + Mickael et la visio-conférence du futur :

Niels nous a montré avec grande éloquence sa vision de la visio-conférence du futur.

En quelques mots, ça donne ça :

  • Utilisation de la détection de personne + caméra pour détourer une personne et l’authentifier automatiquement
  • Superposer 2 flux vidéos par transparence pour donner l’illusion que les personnes en conférence se trouvent côte à côte
  • Reconnaissance de la voix pour faire de la traduction en temps réel, tout en affichant une bulle au dessus de la tête de la personne

Quelques bonnes idées, qui mettront malheureusement encore plusieurs années avant de débarquer dans nos foyers ou dans le monde de l’entreprise.

Niels Freier – Consultant – Wygwam
> Mickael Thumerel – Consultant – Wygwam

Niels + Mickael (bis) et l’AR.Drone :

Vous en avez rêvé, ils l’ont fait ! Niels et ses acolytes ont développé une application de pilotage d’un AR Drone pour assouvir nos désirs de geeks.

A priori, le pilotage se révèle encore délicat (plusieurs personnes du public ont risqué leur vie), mais assez prometteur !

Niels Freier – Consultant – Wygwam
> Mickael Thumerel – Consultant – Wygwam

Conclusion :

Minority Report a créé un concept, Kinect permet maintenant de le concrétiser.
Kinect bénéficie d’un engouement énorme auprès de la communauté des développeurs. Dès maintenant, avec le SDK en main, tout devient possible (ou presque).

On regrettera l’absence d’une bibliothèque de gestures, mais s’agissant encore d’une beta, on peut compter sur Microsoft pour nous concocter ça dans les mois qui viennent (au pire, on peut toujours compter sur les développeurs passionnés :)).
Et à ce sujet, David Catuhe a récemment publié un article que je vous invite à consulter : http://blogs.msdn.com/b/eternalcoding/archive/2011/06/27/gestures-amp-kinect.aspx.

En l’état, le SDK n’a pas de vocation commerciale. Ceci dit, une licence devrait voir le jour dans les mois à venir.
A voir comment évoluera l’utilisation et l’adoption de ce petit bijou de technologie. L’engouement est là, les idées fleurissent, mais une intégration dans le monde de l’entreprise paraît encore quelque peu difficile.

Pour ce qui est de l’intégration chez soi, c’est une tout autre histoire ! On peut déjà imaginer remplacer les télécommandes TV par un dispositif du type Kinect, et trouver d’autres applications de type domotique.

Je peux vous dire en tant que développeur et technophile que le futur est excitant !

Les slides et codes source des démonstrations sont en ligne.

Update : Webcast disponible également !

Nombre de vue : 141

AJOUTER UN COMMENTAIRE