Decouvrir le SDK Intel Perceptual Computing

J ai eu la chance grâce à BeMyApp et Intel d avoir accès a la camera Creative Senz3d. Je vous invite dans ce billet de blog à découvrir les possibilités que ce système autorise.

La réalité augmentée en est a ses balbutiements. Vous pouvez noter 2 courants complémentaires :

  • le premier, amener le digital dans le réel,
  • la second, amener le réel dans le digital

C est au travers du SDK Intel Perceptual Computing que je vous propose d explorer cette seconde voie. Même si il est compatible avec une simple Webcam, vous aurez besoin de la camera Creative Senz3d pour en tirer pleinement partie, notamment pour la capture des gestes, la suppression de l'arrière plan, ...

01-materiel

Quels sont les différences de Creative Senz3d avec Kinect et LeapMotion ?

Kinect a un angle de vue plus large. Vous pouvez capturer analyser les mouvements de 2 personnes au travers de 20 points corporels. La Kinect et la creative Senz3D ont des lentilles très différentes. Sur Kinect, vous devez etre à un mètre de la caméra pour pouvoir l'utiliser efficacement, Senz3D fonctionne directement devant votre écran. Au niveau du SDK, je n ai pas assez d experience avec pour comparer les 2.

LeapMotion permet la capture des doigts dans le même espace que la camera Creative Senz3d en utilisant un simple capteur infrarouge, vu que ce n'est pas une camera, vous n avez pas la possibilité de capture du visage notamment.

J'ai eu besoin de quelques minutes pour installer le SDK. Je connecte la camera au PC, me voici prêt a démarrer.

00-getting-started

Comment ca fonctionne au juste ?

Ci dessous, je résume les différents composants à votre disposition dans le SDK.

Fonctionnement du SDK

Dans celui-ci, vous trouverez un ensemble de classe C++ pour piloter une Webcam ou la camera Senz3d et effectuer certains traitements. Une libraire de classes managées sont disponibles pour d'autres environnements comme :

  • Java
  • C#
  • Unity

Vous les trouverez rassemblé au sein d'une DLL dans le dossier :

C:\Program Files (x86)\Intel\PCSDK\bin\win32\libpxcclr.dll

Par ou commencer ?

Commencons par l'outil Capture Viewer du SDK. Grace à lui, vous pourrez voir les fluxs disponibles sur votre PC.

Liste des flux

Voici un exemple des 3 flux récupérés avec une caméra Senz3D :

FluxVue

Maintenant que nous avons pu voir ce qui etait disponible, nous pouvons nous interesser a comment le mettre en oeuvre. Pour ca, je vous recommande de regarder de plus pres certains exemples. Pour une première exploration, j ai préféré me consacrer aux exemples C#. Je vous propose ce choix car pour les projets C++, chaque projet a sa propre logique (IHM et gestion des classes). En C#, je trouve ça beaucoup plus facile d identifier l architecture du projet, mettre de cote la partie du code IHM et se consacrer au code du SDK. Vous trouverez ces exemples dans le SDK : C:\Program Files (x86)\Intel\PCSDK\framework\CSharp Je vous propose de compiler et executer l exemple raw_stream.

raw_streams

Je vous livre pour ce projet, un diagramme décrivant l organisation du projet, le rôle de chaque classe et ses interactions avec le SDK d Intel :

raw_stream

A present, si nous realisions notre premier Hello World ?

Nous allons réaliser un programme en C# qui capture une image venant de votre WebCam et marque Hello World dessus. Ce programme s exécutera en Console.

project-c#

Avant de vous donner le code, il faut configurer votre projet Visual Studio. Pour cela, ajoutez dans les references de votre projet l assembly System.Drawing (dans le framework .Net) et la DLL libpxcclr que vous trouverez dans le SDK (C:\Program Files (x86)\Intel\PCSDK\bin\win32\libpxcclr.dll).h

reference_manager

namespace HelloWorldSDK
{
    using System;
    using System.Drawing;
    using System.Threading;

    class Program
    {
        static void Main(string[] args)
        {
            // Chargement de l environnement
            PXCMSession session;
            pxcmStatus sts = PXCMSession.CreateInstance(out session);
            if (sts  pxcmStatus.PXCM_STATUS_NO_ERROR)
                    throw new ApplicationException("Fail to acquire a picture");

                // On tag Hello World
                Bitmap bitmap = idata.ToBitmap(640, 480);
                using (var graphic = Graphics.FromImage(bitmap))
                {
                    using (Font arialFont =  new Font("Arial", 36))
                    {
                        graphic.DrawString("Hello World", arialFont, Brushes.Blue, new PointF(200,100));
                    }
                }

                // Sauvegarde de l image
                Console.WriteLine("Nom de la capture ?");
                string filePath = Console.In.ReadLine();
                bitmap.Save(String.Concat(filePath, ".bmp"));

                image.ReleaseAccess(ref idata);
                pp.ReleaseFrame();
            }

            session.Dispose();
        }
    }
}

Voici le résultat :

20131208-HelloWorld

Pour aller plus loin

Il y a beaucoup d exemples a explorer. Nous avons vu l un des plus simples. Nous avons écrit notre premier code, vous êtes a présent en mesure d explorer les fonctions plus avances du SDK. Je vous invite a explorer les liens suivants si vous voulez en découvrir davantage sur les possibilités offertes par ce système.

Pour commencer a developper :

Pour de plus amples informations sur les optimisations de compilation, consultez notre Avertissement concernant les optimisations.