Intel Perceptual SDK - Capture des gestes

Dans la suite de la découverte de l'Intel Perceptual SDK, je vous invite a explorer un domaine qui me laisse rêveur, la capture de la gestuelle de l'utilisateur.

Vous souvenez vous de Tom Cruise manipulant avec fluidité les visions des precogs dans Minority Report ?

Le reve evoque par Philipp K Dick

Aujourd'hui, c'est devenu bien réel. La réalité dépasse la fiction. Dans minority report, il fallait des gants pour interagir avec l'ordinateur. Dans notre cas, nul besoin, la camera Senz3D vous permet de le faire en utilisant seulement vos mains. Avant de découvrir comment le mettre en oeuvre dans une de vos applications, je vous propose d'explorer certains concepts concernant les interfaces naturelles.

Les interfaces naturelles

Ce sont des formes d'interaction intuitive permettant a un utilisateur d'agir directement sur son application. Dans l'idéal, elle ne demanderait aucun apprentissage de sa part. Mimer le fait d'attraper un objet avec les mains pour le faire tourner, c'est un mouvement intuitif. Souvenez vous des premiers jeux Wii Sport proposant au joueur de reproduire une partie du mouvement pour faire bouger son avatar. Nous sommes en plein dedans.

Article wikipedia sur les interfaces naturelles

Les outils de l'interaction naturelle vont bien au-delà de la détection de gestes :

  • Capture et interprétation de commandes vocales
  • Présence ou absence d un individu, Position dans la piece
  • Capture d autres points du corps
  • ...

Aucun obstacle a l utilisation d un logiciel ?

Si l'utilisateur ne comprend pas votre logiciel, ou si celui-ci lui demande de faire des actions contre nature, il partira vers de nouveaux horizons. Tous les logiciels ne se portent pas a l'utilisation d'interfaces naturelles.

La première raison c'est que les interactions doivent être intégrées par le développeur en fonction des outils a sa disposition. Chaque fois qu'il doit rajouter une nouvelle forme d'interaction, la complexité du logiciel explose. C'est vite impossible a gérer. Bien souvent, un logiciel tactile n'est pas adapte a une utilisation clavier souris et inversement.

La deuxième raison c est que les interactions peuvent être difficile a faire cohabiter par leur nature même. Comment zoomer sans lacher le clavier souris, si nous avons une interface tactile ou le nombre d actions présentes a l utilisateur est limite ?

A la recherche de nouveaux usages

Je crois aux nouveaux usages de ce type d interface. Elles adressent des problèmes qui aujourd'hui ne sont pas du tout traite par l informatique et donc des applications totalement novatrice. Prenons l exemple d un opérateur dans une usine. Il a des dizaines de raison de ne pas vouloir toucher un ecran ou un clavier. Les interfaces naturelles permettent d interagir par la voix, ou le geste. Ça peut être d un grand confort.

Imaginons un scenario :

  • Un technicien doit realiser une experimentation. Pour ca il a besoin de 3 pieces et doit passer par 1 machine
  • Il sélectionne la commande a réaliser sur un terminal. Son visage est scannée.
  • Il va dans l entrepôt, récupère les 3 pièces qu'il scanne devant une camera
  • Il va dans l atelier, se place devant la machine, son visage est reconnu, les informations de la commande et la procédure s affiche
  • Il fait défiler par la voix ou par un mouvement les spécificités de la commande
  • ...

Dans ce type de cas, l interface naturelle assiste l opérateur dans son travail ou ses mains sont indisponibles pour manipuler la machine ou les produits.

Vous avez peut être repéré la faiblesse du scénario ci dessus. Plusieurs gestes doivent être interprétés et compris par une machine. Une machine n accepte pas le hasard.

Comment differencier un mouvement significatif d un mouvement parasite ?

C est un vaste domaine de recherche. Les interfaces naturelles ont besoin de code, comme les interfaces tactiles en ont eu besoin. A ce niveau, tout est encore a inventer. Qui dit code, dit nécessiter de former les gens a ces codes. C est la valeur ajoutee d un SDK. Il permet au developpeur de faire abstraction de tout ce traitement et de simplement traiter les interactions utilisateurs.

Fini les grands mots, comment jouer avec les gestes ?

Intel Perceptual SDK reconnait une dizaine de geste. Je vous propose de les experimenter. Pour executer ce programmer, vous aurez besoin de la camera Creative Senz3D.

Les differents gestes

Comme pour le HelloWorld precedent, je vous propose un programme en C# faisant l essentiel. Vous pourrez sans difficulté a partir de cette base, l intégrer dans votre propre application.

namespace CaptureGestureIntelSDK
{
    using System;
    using System.Threading;

    class Program
    {
        public static bool EndRequested = false;

        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 TypeLoadException("Fail to instanciate PXCM Session");
            }

            
            Console.Out.WriteLine("Press any key to start capture");
            Console.ReadKey(true);
            Console.Out.WriteLine("Press ESC to end capture");

            // Ce thread permet de capturer l appui sur ESCAPE par l utilisateur
            // pour arreter le programme
            Thread KeyListener = new Thread(new ThreadStart(ListenEscape));
            KeyListener.Start();

            // Chargement du flux d une webcam. Voir la classe en bas du fichier source SimpleGestureUtilMPipeline
            // On surcharge UtilMPipeline
            using (var pp = new SimpleGestureUtilMPipeline())
            {
                // Fonction lambda pour afficher le resultat des captures des gestes dans la console
                pp.OnGestureCaptured += (o, e) =>
                {
                    Console.WriteLine(String.Format("{0} - {1} - confidence {2}", e.body.ToString(), e.label.ToString(), e.confidence));
                };
                
                pp.Init();
                do
                {
                    // Capture une image, si vous ne le faites pas, le moteur de gesture ne
                    // s activera pas
                    if (!pp.AcquireFrame(true)) break;
                    if (!pp.ReleaseFrame()) break;
                } while (!EndRequested);
            }

            session.Dispose();

            Console.Out.WriteLine("End of capture, press any key to quit the program");
            Console.ReadKey(true);
        }

        static void ListenEscape()
        {
            do
            {
                if (Console.ReadKey(true).Key == ConsoleKey.Escape)
                {
                    EndRequested = true;
                }

                Thread.Sleep(50);
            } while (!EndRequested); 
        }
    }

    /// 
    /// Surcharge de la classe UtilMPipeline pour activer le capture des gestures
    /// 
    public class SimpleGestureUtilMPipeline : UtilMPipeline
    {
        public event EventHandler OnGestureCaptured;

        public SimpleGestureUtilMPipeline()
            : base()
        {
            // On a besoin de la camera de profondeur pour capturer les gestes
            this.EnableImage(PXCMImage.ColorFormat.COLOR_FORMAT_DEPTH, 320, 240);
            this.EnableGesture();
        }

        public override void OnGesture(ref PXCMGesture.Gesture data)
        {
            if (OnGestureCaptured != null)
                this.OnGestureCaptured(this, data);
        }
    }
}

Voici ce que vous obtenez dans la console :

Exemple obtenu avec ce programme

Si vous faites l'essai, vous noterez que le SDK ne distingue pas vraiment la main gauche de la main droite (C'est une limite mentionnée dans la documentation). En dehors de ça, les mouvements sont pour la plupart bien captures.

Pour conclure

La reconnaissance de gestes en est encore a ses débuts. Dans l'univers ludique c'est presque devenu le standard. Quand je me rappelle qu'il a fallu près de 30 a 40 ans pour faire sortir le tactile des laboratoires, je pense que les interfaces naturelles vont aussi avoir besoin de temps pour devenir incontournable dans la vie courante, voir le monde professionnel.

En utilisant le SDK d Intel, c est l occasion de découvrir une des approches possibles. Un regret, il n offre pas de mécanismes pour qu'un développeur l'enrichisse avec de nouveaux gestes.

En decouvrir plus :

Reportez-vous à notre Notice d'optimisation pour plus d'informations sur les choix et l'optimisation des performances dans les produits logiciels Intel.