5/1/2011 23:13 El Bruno

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

image

Buenas,

si hace dos días leiste mi post sobre como deterctar un WAVE en Kinect, este post te resultará fácil de leer; si no lo has leido … pues ya le estás dando click al post viejuno aquí.

Como puedes ver en el siguiente ejemplo de código, para detectar acciones de Push, es posible utilizar un objeto del tipo XnMPushDetector, el mismo dispara un evento Push (línea 40) que no indica que se ha producido una acción de PUSH y además un par de datos relativos al mismos, como por ejemplo el ángulo y la velocidad del PUSH.

 

   1: using System;
   2: using System.Threading;
   3: using ManagedNite;
   4:  
   5: namespace DetectingPush
   6: {
   7:     class Program
   8:     {
   9:         private static XnMOpenNIContext _context;
  10:         private static XnMSessionManager _sessionManager;
  11:         private static XnMPushDetector _pushDetector;
  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:             _pushDetector = new XnMPushDetector();
  36:             _pushDetector.Push += PushDetectorPush;
  37:             _sessionManager.AddListener(_pushDetector);
  38:         }
  39:  
  40:         static void PushDetectorPush(object sender, PushDetectorEventArgs e)
  41:         {
  42:             Console.WriteLine("Angle: {0}", e.Angle);
  43:             Console.WriteLine("Velocity: {0}", e.Velocity);
  44:         }
  45:  
  46:         #endregion
  47:  
  48:         #region Update Thread
  49:         private static void InitThreadReader()
  50:         {
  51:             _readerThread = new Thread(ReaderThread);
  52:             _readerThread.Start();
  53:         }
  54:         private static void ReaderThread()
  55:         {
  56:             while (_shouldRun)
  57:             {
  58:                 var rc = _context.Update();
  59:                 if (rc == 0)
  60:                     _sessionManager.Update(_context);
  61:             }
  62:         }
  63:         #endregion
  64:     }
  65: }

Además, la clase XnMPushDetector permite configurar la acción de PUSH a detectar, indicando el intervalo mínimo de acción, el ángulo, etc. En el próximo post, veremos una acción más antes de pasar a un ejemplo mas completo, con seguimiento de mano y acciones asociadas.

 

El ejemplo de código se puede descargar desde aquí http://cid-bef06dffdb192125.office.live.com/self.aspx/Code%20Samples/2011%2001%2005%20Kinect%20DetectingPush.zip

 

Saludos @ Home

El Bruno

   

Archivado en: ,,,
Comparte este post:

# [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