Download - Au coeur d'un projet Kinect innovant
palais des congrès Paris
7, 8 et 9 février 2012
Au cœur d’un projet Kinect InnovantMardi 7 février 2012 – 16h00
Johanna RoweDesigner Industriel – MVP SurfaceWinwise
Nicolas CalviConsultant / Formateur – MVP SurfaceWinwise
Winwise en chiffres : 9,5 M€, 70 collaborateurs, 800 clients qui nous font confiance.
Winwise a été créé en 1996 autour de 2 métiers:- La Formation, centre agréé Microsoft- Le Conseil
Et 3 types d’intervention chez nos clients:- L’expertise- L’accompagnement- La réalisation de projets aux forfaits
Nos clients sont de tout secteur d’activité et sollicitent nos 5 domaines de compétences:- Interfaces Riches et Naturelles- Architecture- Collaboratif- Business Intelligence et Data Management- Infrastructure
Tous nos collaborateurs sont certifiés sur les nouvelles technologies Microsoft.
Problématique de la publicité
Concept de l’application
Technologie Kinect
Problématique des gestuelles
Architecture de l’application
SDK Kinect en action
Sommaire
PROBLEMATIQUE DE LA PUBLICITE
Publicité actuelle
Bannière web (non vues)Affiches publicitaires classiques (non enregistrées par le cerveau)
Publicités ciblées (géolocalisation, personnalisation)Placement produit (clip, émissions, film, ect.)Publicité animés (Métro)Street marketingJeux avec l’image de la marque
Ad-blindnessPublicité trop classique
Publicité actuellePublicité Expérience négative avec la marque « ils me saoule
avec leur pub »
Trop = InefficaceOn ne voit plus On ne retient plus
CONCEPT DE L’APPLICATION
Nouveau Concept
PublicitéExpérience négative avec la marque « ils me saoule avec leur pub »
PublicitéExpérience positive avec la marque « J’ai fais un truc marrant avec la marque iDTGV »
Marquer l’utilisateur au travers d’une expérience ludique (drôle ou non selon l’image de la marque)
Le cerveau associe quelque chose de positif à la marque
Marque
iDTGVMarque fun, jeune et innovante
Ambiance Zen et Zap
« Choisissez avec qui vous voyagez »
Story-board - partie 1
Story-board - partie 2
DEMO
TECHNOLOGIE KINECT
Technologie Kinect
Créer des interactions avec des personnes et ce sans contacts avec un périphérique.
- Reconnaissance de mouvement- Reconnaissance vocale
Technologie Kinect
Le « Moteur » et la « LED »
Le moteur permet d’incliner Kinect sur l’axe vertical afin de régler son champs de vision,
La LED qui peut prendre 3 couleurs (rouge, jaune et vert) est un indicateur de statut.
Technologie Kinect
Le « Microphone Array »
4 Microphones qui permettent la prise de son avec Kinect.
Cette structure permet de savoir d’où provient le son.
Technologie Kinect
La « Caméra vidéo »
Permet la capture vidéo dans différent format :- 640x480 (en 15 et 30 FPS)- 1280x960 (en 12 FPS)
Technologie Kinect
La « Projecteur Infrarouge »
C’est un capteur actif qui projette une grille infrarouge qui servira à la détection de profondeur.
Technologie Kinect
La « Caméra Infrarouge »
C’est elle qui capture la grille et permet de renvoyer de informations de profondeur (Depth sur 11 bits) dans différent formats :- 640x480 (en 30 FPS)- 320x240 (en 30 FPS)- 80x60 (en 30 FPS)
Technologie Kinect
La « Détection du squelette »
Permet de capter 6 personnes dans son champs de vision :
- 2 personnes capté avec le squelette entier.
- 4 personnes avec leurs centre de gravité.
Technologie Kinect
SDK Kinect Commercial
Est un SDK développé par Microsoft Research permettant de programmer Kinect.
Un périphérique dédié avec une meilleurs détection le mode « near »
PROBLEMATIQUE DE GESTUELLES
Problématique des gestuelles
Tactile Beaucoup d’existant (études ergo)Gestuelles identiques souvent réutilisées (donc connues par les utilisateurs)On pose le doigt sur l’interface directementLe bout d’un doigt est toujours identique
Tout le corps Pas d’existant (gestuelles)Trouver les gestuelles naturellesDes morphologies différentesDes manières de bouger différentes les unes des autresPas en situation de jeu
Problématique des gestuelles
Pas d’API pour le faire
Composer avec les aléas de la détection
Eliminer les mouvements parasites
Problématique des gestuelles
Gestuelle « Hello » :
Sur un intervalle donné (configurable)
On capte les différentes positions des points du squelette et on en déduit les angles alpha et beta
Si ces angles sont dans un certain intervalle calculé dynamiquement et qu’on a détecté un mouvement on remonte la gestuelle
Problématique des gestuelles
Gestuelle « Zen » et « sortie (S) »
Sur un intervalle donné (configurable)
On capte les différentes positions des points du squelette et on en déduit les angles alpha, beta, gamma et delta
Si ces angles sont dans un certain intervalle calculé dynamiquement et que la pause est tenue pendant un certain laps de temps on remonte la gestuelle
Problématique des gestuelles
Gestuelle « Clap » :Dans un intervalle de temps donné (configurable)
On capte la position (X,Y,Z) des points et on en déduit les distances d1 et d2
On vérifie que le corps est en face de Kinect® (d2 supérieur à une certaine valeur)
On Valide la position des poignets
On regarde si les poignets sont passés par plusieurs états (écartés, quelconques, joints puis écartés)
ARCHITECTURE DE L’APPLICATION
Architecture de l’application
XNA 4
Kinect SDK Commercial
.Net 4 (en langage C#)
Architecture de l’application
Architecture de l’application
Un processus XNA standard
Un processus de détection des gestuelles
Kinect branché sur le processus XNA
SDK KINECT EN ACTION
SDK Kinect en action
Espace de nom « Microsoft.Kinect »
Récupérer une caméra et gérer son statutprivate void InitializeKinect(){ // On se branche sur le manager des senseurs KinectSensor.KinectSensors.StatusChanged += new EventHandler<StatusChangedEventArgs>(this.KinectSensorsStatusChanged);
// Si il y en a déjà un, on l'ouvre if (KinectSensor.KinectSensors.Count > 0) this.OpenKinect(KinectSensor.KinectSensors.First());}
private void KinectSensorsStatusChanged(object sender, StatusChangedEventArgs e){ if (e.Status == KinectStatus.Connected) this.OpenKinect(e.Sensor); else if (this._kinectSensor == e.Sensor) this.CloseKinect();}
private void OpenKinect(KinectSensor kinect){ this._kinectSensor = kinect;
// Initialisation this._kinectSensor.Start();}
SDK Kinect en actionOuvrir le flux vidéo
this._kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);this._kinectSensor.ColorFrameReady += new EventHandler<ColorImageFrameReadyEventArgs>(this.KinectColorFrameReady);
Ouvrir le flux de profondeurthis._kinectSensor.DepthStream.Enable(DepthImageFormat.Resolution320x240Fps30);this._kinectSensor.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(this.KinectDepthFrameReady);
Démarrer la détection des squelettes// SmoothParamater pour éliminer le bruitTransformSmoothParameters parameters = new TransformSmoothParameters{ Correction = 1.0f, JitterRadius = 0.01f, MaxDeviationRadius = 0.01f, Prediction = 1.0f, Smoothing = 0.9f};
this._kinectSensor.SkeletonStream.Enable(parameters);this._kinectSensor.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(this.KinectSkeletonFrameReady);
Intercepter tous les événements d’un coupthis._kinectSensor.AllFramesReady += new EventHandler<AllFramesReadyEventArgs>(this.AllFramesReady);
SDK Kinect en action
Traiter une information de squeletteprivate void AllFramesReady(object sender, AllFramesReadyEventArgs e){ // On ouvre le buffer qui contient les informtions des squelettes using (SkeletonFrame frame = e.OpenSkeletonFrame()) { // On vérifie qu’il existe bien des informations exploitables if (frame != null && frame.SkeletonArrayLength > 0) { // On copie les données récupérées par Kinect dans un buffer local Skeleton[] skeletons = new Skeleton[frame.SkeletonArrayLength]; frame.CopySkeletonDataTo(skeletons);
// On ne prend que les squelettes qui sont en mode « tracés » var result = from p in skeletons where p.TrackingState == SkeletonTrackingState.Tracked select p;
foreach (Skeleton item in result) { // … ici on fait le traitement … } } }}
SDK Kinect en action
Récupérer les points du corps (20 au total)
Plusieurs états : « Tracked », « Infered » et « NotTracked »
Convertir leurs coordonnées (X,Y,Z)
Faire les traitements adéquat, mais surtout faire des buffers de points pour pouvoir a chaque frame, créer des algorithmes qui se fondent sur une évolutions des positions dans le temps.
DEMO
Johanna RoweBlog : http://www.johannarowe.com/Facebook : Design in ProgressTwitter : @johanna_roweEmail : [email protected]
Nicolas CalviBlog : http://blog.nicolascalvi.com/Facebook : Black BlogTwitter : @nicolascalviEmail : [email protected]
Contacts
Chaque semaine, les DevCampsALM, Azure, Windows Phone, HTML5, OpenDatahttp://msdn.microsoft.com/fr-fr/devcamp
Téléchargement, ressources et toolkits : RdV sur MSDNhttp://msdn.microsoft.com/fr-fr/
Les offres à connaître90 jours d’essai gratuit de Windows Azure www.windowsazure.fr
Jusqu’à 35% de réduction sur Visual Studio Pro, avec l’abonnement MSDN www.visualstudio.fr
Pour aller plus loin
10 février 2012
Live Meeting
Open Data - Développer des applications riches avec le protocole Open Data
16 février 2012
Live Meeting
Azure series - Développer des applications sociales sur la plateforme Windows Azure
17 février 2012
Live Meeting
Comprendre le canvas avec Galactic et la librairie three.js
21 février 2012
Live Meeting
La production automatisée de code avec CodeFluent Entities
2 mars 2012
Live Meeting
Comprendre et mettre en oeuvre le toolkit Azure pour Windows Phone 7, iOS et Android
6 mars 2012
Live Meeting
Nuget et ALM
9 mars 2012
Live Meeting
Kinect - Bien gérer la vie de son capteur
13 mars 2012
Live Meeting
Sharepoint series - Automatisation des tests
14 mars 2012
Live Meeting
TFS Health Check - vérifier la bonne santé de votre plateforme de développement
15 mars 2012
Live Meeting
Azure series - Développer pour les téléphones, les tablettes et le cloud avec Visual Studio 2010
16 mars 2012
Live Meeting
Applications METRO design - Désossage en règle d'un template METRO javascript
20 mars 2012
Live Meeting
Retour d'expérience LightSwitch, Optimisation de l'accès aux données, Intégration Silverlight
23 mars 2012
Live Meeting
OAuth - la clé de l'utilisation des réseaux sociaux dans votre application
Prochaines sessions des Dev Camps