6/1/2011 19:54 El Bruno

[KINECT] HowTo: Detectar cuando se hace un círculo con la mano en Kinect con C#

image

Buenas,

hoy también toca un post cortito que estamos en reyes y ya falta menos para poner la demo completa este fin de semana. Hoy veremos como utilizando la clase XnMCircleDetector podremos detectar cuando una vez detectada una mano en Kinect, la misma hace un círculo. Entre los valores que podemos analizar del círculo, los más útiles son la ubicación del punto central del círculo y el radio del mismo.

Como siempre, el código de ejemplo:

   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 XnMCircleDetector _circleDetector;
  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:             _circleDetector = new XnMCircleDetector();
  36:             _circleDetector.Circle += CircleDetectorCircle;
  37:             _sessionManager.AddListener(_circleDetector);
  38:         }
  39:  
  40:         static void CircleDetectorCircle(object sender, CircleEventArgs e)
  41:         {
  42:             Console.WriteLine("Circle Center: {0}", GetPointData(e.CircleCenter));
  43:             Console.WriteLine("CircleRadius: {0}", e.CircleRadius);
  44:             Console.WriteLine("Confident: {0}", e.Confident);
  45:             Console.WriteLine("Value: {0}", e.Value);
  46:         }
  47:  
  48:         private static string GetPointData(XnMPoint point)
  49:         {
  50:             return string.Format("X: {0} Y: {1} Z: {2}", point.X, point.Y, point.Z);
  51:         }
  52:  
  53:         #endregion
  54:  
  55:         #region Update Thread
  56:         private static void InitThreadReader()
  57:         {
  58:             _readerThread = new Thread(ReaderThread);
  59:             _readerThread.Start();
  60:         }
  61:         private static void ReaderThread()
  62:         {
  63:             while (_shouldRun)
  64:             {
  65:                 var rc = _context.Update();
  66:                 if (rc == 0)
  67:                     _sessionManager.Update(_context);
  68:             }
  69:         }
  70:         #endregion
  71:     }
  72: }

 

Y el proyecto para descargar desde aquí: http://cid-bef06dffdb192125.office.live.com/self.aspx/Code%20Samples/2011%2001%2006%20Kinect%20DetectingCircle.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