Chaque année lors de la plénière de la conférence francophone Esri, nous essayons de vous montrer des modes d'interactions cartographiques un peu innovant. Après la table tactile Microsoft Surface l'an dernier, nous nous sommes attaqués cette année aux capacités du capteur Microsoft Kinect. Habituellement utilisée dans le contexte des jeux vidéos, cette dernière propose des fonctions de détection de formes 3D qui peuvent assez simplement être étendues à la reconnaissance de geste.
Notre Kinect sur la scène de SIG 2011
La Microsoft Kinect
La Kinect est un périphérique qui embarque un capteur vidéo couleur classique (CMOS) ainsi qu'un capteur infrarouge qui permet de connaitre, pour tout point de la scène, la distance qui le sépare du capteur. Ceci permet d'obtenir une image "de profondeur" comparable à un modèle 3D des objets situés devant la Kinect. A partir de cette image rafraichie 30 fois par secondes, il est ensuite possible de repérer les parties du corps d'un utilisateur comme les bras, les mains, les jambes, …
Le SDK Kinect for Windows
Pour pouvoir exploiter simplement les informations retournées par la Kinect, Microsoft fournie depuis quelques mois, un SDK (encore en version beta) qui permet d'exploiter la Kinect sur un PC sous Windows (alors que la Kinect est initialement conçu et développée pour la XBox). Ce SDK permet aux développeurs d'accéder très rapidement aux informations suivantes:
- tracking du squelette pour une ou deux personnes,
- flux caméra standard en couleur,
- flux camera concernant les données de profondeur (indique la distance d'un objet par rapport à la caméra),
- traitement Audio (avec traitement permettant la suppression du bruit et de l'écho), et intégration avec l'API de reconnaissance vocal de Microsoft (Microsoft Speech recognition API) très performante.
Ce SDK contient aussi les pilotes assurant les communications entre votre application et la Kinect.
A la différence des SDK Open Source déjà dispo, le SDK Kinect fournis par Microsoft est pleinement intégré à l'écosystème .NET. Pour ceux qui craignent de ne pas disposer d'autant de ressources que dans la communauté Open Source Microsoft met à disposition (en plus des exemples et du SDK) une documentation complète, forums, vidéos, articles, galerie de projets, via
le site web dédié et via son site web Channel9. Des ressources (toolkits) sont aussi disponibles sur CodePlex et NuGet à partir de
cette page.
Développement de l'application
Le développement d'une application Kinect se fait avec Visual Studio 2010 en C# ou C++. Pour cette application, nous avons utilisé WPF pour la partie interface utilisateur (et l'outil de design Expression Blend 4) et C# pour le code behind. Côté technologie Esri, nous souhaitions l'usage d'ArcGIS Runtime (actuellement en beta) et son SDK .Net WPF.
Une partie importante de l'application consiste à suivre certaines parties du corps (essentiellement les mains dans notre prototype) pour manipuler la carte (navigation, zoom). L'application doit également reconnaitre les gestes et les postures afin de déclencher des actions sur l'application. Pour cela, des algorithmes spécifiques basés sur la comparaison de vecteurs 3D ont été développés pour l'apprentissage de ces gestes et leur reconnaisse par l'application.
Dans l'application, l'utilisateur peut valider le choix de son point d'intérêt en affichant le contexte de son point dans une vue immersive. Cette vue immersive est issue de la technologie Earthmine dont Esri France est désormais distributeur. Earthmine nous a mis à disposition un SDK .NET (encore en version beta) permettant de disposer d'un contrôle pour la visualisation et la navigation dans cette vue immersive accédant aux services en ligne Earthmine diffusés par leur plateforme de Cloud Computing. Ce dernier a été également utilisé Earthmine pour créer l'Add-In de visualisation des vues immersives Earthmine dans ArcMap. Bien qu'il s'agisse d'un composant de type Winform (et non WPF) son intégration dans l'application a été relativement simple.
Enfin, grâce à l'usage du SDK .Net/WPF d'ArcGIS Runtime cette application offre des fonctionnalités SIG de base comme le géocodage par adresse des points d'intérets sélectionnés par l'utilisateur, la projection à la volée entre la carte (en Lambert 93) et la vue immersive (en Lat/Long WGS 84) ou encore le calcul d'itinéraire.
Bilan sur ce prototype
Evidement, cette application n'est pas destinée à un usage opérationnel. Elle nous a tout d'abord permis de vous démontrer qu'après l'approche tactile (voir
notre démo de l'an dernier avec la table Surface de Microsoft) de nouveaux modes d'interaction entre l'utilisateur et la carte peuvent encore être inventés. Par exemple, en exploitant des approches de NUI (Natural User Interface) comme le permet le capteur Microsoft Kinect. Ensuite, ce prototype a été l'occasion pour nous d'expérimenter pour la première fois la nouvelle solution de développement ArcGIS Runtime (en version beta 1 actuellement) dans un contexte .Net faisant intervenir plusieurs autres composantes (ArcGIS Server, Kinect, Earthmine, ...).
Enfin, je profite de cet article pour remercier à nouveau Simon, le stagiaire qui a travaillé avec nous durant l'été sur ce sujet. Champion de France de
Rubik's Cube à l'aveugle, Simon est désormais aussi un champion en SDK Kinect !