3/1/2011 21:01 El Bruno

[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

   

Archivado en: ,,,,
Comparte este post:

# [KINECT] HowTo: Detectar una acción de PUSH de una mano en Kinect con C#

Wednesday, January 5, 2011 11:13 PM by El Bruno

Buenas, si hace dos días leiste mi post sobre como deterctar un WAVE en Kinect , este post te resultará

# [KINECt] HowTo: Capturar la posicion de una mano utilizando C# (y ya que estamos movemos el mouse !!!)

Tuesday, January 11, 2011 10:10 PM by El Bruno

Buenas, después de ver cómo capturar diferentes gestos con C# utilizando Kinect ( Wave , Circle , Push

# [KINECT] Posts para comenzar con C# y Kinect utilizando OPenNI y ManagedNite

Wednesday, January 12, 2011 3:04 PM by El Bruno

Buenas, hoy es día de poca inspiración, así que toca una recopilación de los posts que explican como

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

Wednesday, May 25, 2011 9:52 PM by Steven

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