Home




Début Kinect API

posted Apr 25, 2011, 7:23 AM by Romain Bardiau   [ updated May 2, 2011, 9:29 AM ]

Aujourd'hui je vais vous présenter le début de notre API pour Kinect.

Tout d'abords commençons par donner le crédit a ceux qui le doivent.
Nous avons commencer par regarder un exemple qui utilise une micro API simplifier pour utiliser OpenNi (en rappel c'est le SDK qui permet de coder avec Kinect).

Notre objectif est donc de fournir la même simplicité qu'il offre mais de pourvoir avoir la reconnaissance de geste et d'autre fonctionnalités supplémentaire.
Sur le même blog mais dans un autre article nous avons pu voir comment il procédais pour simplement le HandTracking (suivre la main qui fait coucou) et dans un autre article comment récupérer les images vu par Kinect (la camera normal et la Depth, c'est celle qui permet de voir la profondeur).
Ces articles sont respectivement :
et

De plus, l'exemple fournis par OpenNi UserTracker.net nous a montre comment récupérer le squelette, 

A partir de ces exemples, nous avons donc écrit une API qui fournis les images, le squelette ou les coordonnées de la main.
Ensuite nous avons poursuivis par mettre en place une reconnaissance de mouvement basique tel que la main qui vas de bas vers le haut ou de droite vers la gauche.

Pour les gestes, nous avons choisis de faire une méthode de plugin qui permet a n'importe qui d'enrichir notre API avec ses propres gestes.

Avant d'expliquer plus en détails comment utilise l'API pour votre application C# (en WPF pour l'instant, le nouveau format d'interface graphique de Windows), voici une vidéo de ce qui est possible (l’évènement généré n'est pas forcement celui-la c'est au choix du développeur).


Attention : Pour que Kinect commence a suivre votre squelette, vous devez impérativement faire la même pose qui est faite au début de la vidéo ci-dessus, C'est la pose de calibration dont voici un schema


Maintenant je vais vous expliquer comment utiliser notre API :

Si vous voulez le squelette par exemple, il suffit de rajouter a l'initialisation :
        _skeleton = new BodyTracker();
        _skeleton.UsersUpdated += new BodyTracker.UsersUpdatedHandler(Users_Updated);
(ou _skeleton est définis en attribut comme suit private BodyTracker _skeleton;)

Il faut aussi créer un worker (toujours pendant l'initialisation) pour afficher l'image dans le WPF :
        CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
        _bgWorker.DoWork += new DoWorkEventHandler(Worker_DoWork);

        void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            if (!_bgWorker.IsBusy)
            {
                _bgWorker.RunWorkerAsync();
            }
        }

        void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Dispatcher.BeginInvoke((Action)delegate
            {
                imgCamera1.Source = _skeleton.RawImage;
                imgCamera2.Source = _skeleton.DepthImage;
            });
        }

L'affichage suppose d'avoir dans XAML :
        <Image Name="imgCamera1" Height="480" Width="640" VerticalAlignment="Top"/>
        <Image Name="imgCamera2" Height="480" Width="640" VerticalAlignment="Top"/>
(vous pouvez les mettre dans des onglets par exemple)

Maintenant qu'on a récupérer l'image il faut récupérer le squelette, c'est l'handler Users_Updated declarer plus tot :
        void Users_Updated(object sender, UsersEventArgs e)
        {
            Dispatcher.BeginInvoke((Action)delegate
            {
                lock (this)
                {
                    ... ce que vous voulez faire avec le squelette
                }
            }
        }

Pour recuperer le squelette a partir de l'evenement il faut faire :
                    foreach (var user in e.users)
                    {
                            float headX = user.Head.X;
                            float headY = user.Head.Y;
                            float headZ = user.Head.Z;

                            ... (pour chaque partie de User)
                    }
Un User va avoir comme partie :
  • Head
  • Neck
  • LeftShoulder
  • LeftElbow
  • LeftHand
  • RightShoulder
  • RightElbow
  • RightHand
  • Torso
  • LeftKnee
  • LeftHip
  • LeftFoot
  • RightKnee
  • RightHip
  • RightFoot
Voila, vous avez maintenant pu récupérer tout le squelette de chaque utilisateur présent devant Kinect (jusqu’à 6 d’après OpenNi mais on a tester que deux pour l'instant et ça marche), et pouvez les dessiner comme dans la vidéo par exemple.

Le code de l'API avec l'application que vous pouvez voir dans la vidéo se trouve en fichier joints.
Pour le faire marcher, il ne faut pas oublier de rajouter a chacun des projets une référence vers OpenNI.net.dll qui est présent dans l'archive.

Environnement de programmation

posted Apr 17, 2011, 3:34 AM by Romain Bardiau   [ updated May 2, 2011, 8:09 AM ]

Aujourd'hui, nous allons parler de l'environnement avec lequel nous allons travailler afin de coder notre projet.

Le langage étant du C# nous allons utilisé Visual Studio 2010. Grace a l’université on peut télécharger la version Ultimate (qui permet de tout installer sans problème) avec le partenariat avec MSDNA sur le site
(le Login est l'adresse de l’université et pour mot de passe vous pouvez le re-demander sur le site).

Le projet est en ligne est pour y contribuer il faut donc s'inscrire sur le site Codeplex et me demander par mail l'enregistrement en me donner votre Login sur ce site.
L'adresse du projet est : http://kinectapi.codeplex.com/ .

Une fois que c'est télécharger et installer on va donc pouvoir travailler.

Maintenant il faut ajouter le serveur pour récupérer le code du projet et pouvoir y contribuer.
Cliquer sur Connect To Team Foundation Server sur la page d’accueil de Visual Studio puis dans Server... > Add..., l'URL est tfs.codeplex.com et il faut choisir le protocole HTTPS.
Ensuite le login sera "snd\<VotreLoginDeCodeplex>_cp" et password le meme que sur le site de Codeplex.
Enfin le projet a sélectionner est KinectAPI :


Double-cliquez sur Source Control, ensuite choisir le dossier que vous voulez, clique droit dessus et "Get the Latest Version". Maintenant vous avez récupérer le code.
Nous allons faire des application en WPF (Windows Presentation Foundation), ce qui veut dire que l'IHM est decrite dans un fichier .xaml qui est en fait un fichier xml.
Visual studio nous offre un interface WYSIWYG afin de creer l'interface tout en nous montrant le code genere et nous permettre de le modifier.


Le code exécuté par cette fenêtre sera dans le fichier du même nom que l'interface mais avec en plus l'extension .cs (l'extension pour les fichier en C#). Donc le fichier se finira par ".xalm.cs".
Pour modifier le code on retrouve l'interface classique de tout bon IDE avec la coloration syntaxique, la compilation a la volée, l'auto-complétion, l'auto-formatage, etc... bref tout ce que vous pouvez trouver dans Eclipse.


Les principaux raccourcis clavier pour Visual Studio sont : 
  • F5 pour lancer l’exécution 
  • Ctrl + E, C pour commenter la sélection
  • Ctrl + E, U pour de-commenter la sélection
  • Ctrl + E, F pour commenter la sélection
  • F12 pour aller a la définition de l'objet ou méthode sélectionnée
  • Ctrl + K, R pour trouver les références de l'objet ou méthode sélectionnée
  • F2 pour le refactor (rename)
Visual Studio intégré aussi un debugger qui se lance automatiquement s'il y a une erreur a l’exécution si vous êtes en mode Debug (par défaut, vous pouvez vérifier en haut a cote du triangle vert Default ou Release) dans lequel vous pouvez regarder les valeurs des variables, regarder la pile d'appels, etc.

Installation de Kinect

posted Apr 14, 2011, 8:31 AM by Romain Bardiau   [ updated Apr 14, 2011, 10:54 AM ]

Pour expliquer comment installer les drivers nécessaires à la reconnaissance et programmation de Kinect sur un Windows, je vais me baser sur le tutoriel de xboxgen.fr situe ici : http://www.xboxgen.fr/installer-kinect-pc-article-4815-1.html.
Leurs tutoriel est très bien expliqué et je vais donc faire une version rapide ici. Ce tutoriel doit marcher pour les versions de Windows 32 et 64 bits de XP, Vista et Seven.

0) Tout d’abord, il faut commencer par télécharger les fichiers à ce post. Vous pouvez aussi le trouver dans l'onglet "Project Documents"

1) Ensuite il faut installer OpenNi sur l'ordinateur. Lancez donc (1) OpenNI-Bin-Win32-v1.0.0.25.exe.

2) Maintenant il faut installer le driver pour Kinect. Lancez donc (2) SensorKinect-Win32-5.0.0.exe qui se trouve dans "Pilote Kinect 0124bd2\Bin".

3) Toujours pour le driver, lancez (3) dpinst-x86.exe pour une version 32 bits ou (3) dpinst-amd64.exe pour une version 64 bits qui se trouvent dans "Pilote Kinect 0124bd2\Platform\Win32\Driver".

4) On passe maintenant a l'installation de NITE de PrimeSense qui va s'ajouter a OpenNI. Lancez donc (4) NITE-Bin-Win32-v1.3.0.18.exe. Durant l'installation il va demander une licence qui est celle-ci : 0KOIk2JeIBYClPWVnMoRKn5cdY4=

5) Il ne vous reste plus qu'a brancher le Kinect sur l'ordinateur. 
Attention: Pour Windows XP, il risque de demander a installer le nouveau périphérique connecté. Il faut le faire en lui disant de chercher automatiquement. Il devrait le demander deux ou trois fois (une fois la camera, une autre le moteur, et enfin l'audio)

Normalement Kinect est installé mais on va quand même tester.

6) Ppour le tester il faut lancer NiViewer.exe à partir du dossier d'installation de OpenNI. Par défaut il se trouve à "C:\Program Files\OpenNI\Samples\Bin\Release" pour un Windows 32 bits ou "C:\Program Files (x86)\OpenNI\Samples\Bin\Release" pour un Windows 64 bits.

Vous devriez normalement obtenir une image comme ca : 



Et voila, Kinect est bien installé sur votre ordinateur.

Maintenant il n'y a plus qu'a essayer quelques Hacks ou programmer les siens

Bonne chance

Presentation du TER

posted Apr 13, 2011, 11:21 PM by Romain Bardiau   [ updated Apr 14, 2011, 9:55 AM ]

Bonjour,

Le premier post sera a propos de la présentation de notre sujet de TER.

Notre groupe est composé de : 
  • BARDIAU Romain
  • CRACIUN Anamaria
  • DANILUC Dora
  • SAVU Alexandra
  • SOUTI Bilal
Notre projet sera de faire une API de reconnaissance de geste en C# pour le capteur Kinect de Microsoft.
Pour cela nous utiliserons OpenNi, le driver officiel pour Kinect qui offre la reconnaissance du squelette d'un personne avec Kinect.
Cette API sera facile d'utilisation et pourra facilement être intégré dans toute application facilement grâce aux évènements lancé a la reconnaissance d'un geste, ou pose, qui pourrons remplacer les évènements précédemment générés par la souris.
Enfin nous montrerons son application au travers d'une application qui permettra de contrôler le robot Lego Mindstorm NXT 2.0 avec Kinect grâce a notre API.

Voila pour la présentation de notre sujet, vous trouverez en fichier joint les slides de notre présentation.

Dans le prochain post on expliquera comment installer les driver de Kinect sur l'ordinateur.

1-4 of 4

Comments