[KINECT] HowTo: Detectar un saludo (WAVE) en Kinect con C#

image

Buenas,

después del primer post sobre como hacer un Hola Mundo para Kinect con C#, hoy toca trabajar con la gesture más conocida –> WAVE, que no es otra que el saludo a Kinect. Para este tutorial crearemos una aplicación de consola como en el primer post, pero con algunos cambios sobre el mismo.

Tutorial

1. Crear una aplicación de Consola que permita trabajar con Kinect, para esto es necesario repetir los pasos del 1 al 6 del primer post. En este caso la aplicación se llamará DetectingWave.

2. En la misma agregaremos el siguiente código:

   1: using System;

   2: using System.Threading;

   3: using ManagedNite;

   4:  

   5: namespace DetectingWave

   6: {

   7:     class Program

   8:     {

   9:         private static XnMOpenNIContext _context;

  10:         private static XnMSessionManager _sessionManager;

  11:         private static XnMWaveDetector _waveDetector;

  12:         private static Thread _readerThread;

  13:         private static bool _shouldRun;

  14:  

  15:         static void Main()

  16:         {

  17:             Console.WriteLine("Iniciando acceso a Kinect ...");

  18:             _shouldRun = true;

  19:  

  20:             InitSensorInteraction();

  21:             InitThreadReader();

  22:  

  23:             Console.WriteLine("Kinect online. Saluda para comenzar");

  24:             Console.ReadLine();

  25:             _shouldRun = false:

  26:         }

  27:  

  28:         #region Sensor Interaction

  29:         private static void InitSensorInteraction()

  30:         {

  31:             _context = new XnMOpenNIContext();

  32:             _context.Init();

  33:  

  34:             _sessionManager = new XnMSessionManager(_context, "Wave", "RaiseHand");

  35:             _waveDetector = new XnMWaveDetector();

  36:             _waveDetector.Wave += WaveDetectorWave;

  37:             _sessionManager.AddListener(_waveDetector);

  38:         }

  39:  

  40:         private static void WaveDetectorWave(object sender, EventArgs e)

  41:         {

  42:             Console.WriteLine("WAVE detected");

  43:         }

  44:         #endregion

  45:  

  46:         #region Update Thread

  47:         private static void InitThreadReader()

  48:         {

  49:             _readerThread = new Thread(ReaderThread);

  50:             _readerThread.Start();

  51:         }

  52:         private static void ReaderThread()

  53:         {

  54:             while (_shouldRun)

  55:             {

  56:                 var rc = _context.Update();

  57:                 if (rc == 0)

  58:                     _sessionManager.Update(_context);

  59:             }

  60:         }

  61:         #endregion

  62:     }

  63: }

 

3. En este ejemplo para la detección de un WAVE, utilizando una clase especial llamada XnMWaveDetector (línea 35)

4. La misma se agrega como un listener a la session de trabajo con Kinect (línea 37)

5. Cuando se inicia la session y se detecta un WAVE se lanza el evento definido en la línea 40.

 

Como pueden ver es muy fácil, ya que las APIs exponen esta funcionalidad de una forma muy natural.

El código de este ejemplo lo pueden descargar desde http://cid-bef06dffdb192125.office.live.com/self.aspx/Code%20Samples/2011%2001%2003%20Kinect%20DetectingWave.zip

 

 

Saludos @ Home

El Bruno

   

4 comentarios sobre “[KINECT] HowTo: Detectar un saludo (WAVE) en Kinect con C#”

  1. hello el bruno,

    very good work. i like your samples. they are as simple as good!

    what a pity that your site is in spain :(

    i wanted to ask, if you have any idea, why the samples doesn’t work in win form application instead of console applications?! all my console apps are running, but i don’t manage it to write any win forms or wpf app that runs… i get no error message, but there aren’t any detector events?!?

    thanks a lot for an answer!!!

    regards from germany,
    steven

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *