[#KINECTSDK] HowTo: Detectar el cambio de estado o desconexion del sensor

image

Buenas,

volvemos un poco al Kinect SDK después de 5 días en los que he dormido bastante poco para migrar una aplicación bastante grande de la Beta 2 a la versión actual de Kinect SDK.

Ahora bien, el nuevo SDK ha cambiado mucho y en algunas cosas es mucho más coherente que el anterior. Por ejemplo al momento de agregar la referencia a nuestro proyecto, en este caso ya tiene un nombre oficial:

Microsoft.Kinect

image

Si seguimos adelante podremos ver que dentro de KinectSensor tenemos un evento especial para la captura de los estados de los sensores: StatusChanged. Este evento además nos puede servir para detectar cuando se conecta o desconecta un sensor al puerto USB.

Un ejemplo, con este código en una aplicación de consola:

   1: static void KinectSensorsStatusChanged(object sender, StatusChangedEventArgs e)

   2: {

   3:     Console.WriteLine("{0} - New Status: {1}", DateTime.Now.TimeOfDay.ToString(), e.Status);

   4:     _kinect = e.Sensor;

   5:     if (e.Sensor != null)

   6:     {

   7:         Console.WriteLine("{0} - Sensor Status: {1}", DateTime.Now.TimeOfDay.ToString(), _kinect.Status);

   8:     }

   9:     else

  10:     {

  11:         Console.WriteLine("{0} - No Sensor", DateTime.Now.TimeOfDay.ToString());

  12:     }

  13: }

Cuando lanzamos la aplicación podremos ver como la marca de tiempo, nos indica una pequeña diferencia entre el sensor conectado y el sensor activo (líneas 2y3 vs líneas 4,5)

   1: 20:23:32.9637224 - Start sample application

   2: 20:23:40.0351074 - New Status: Initializing

   3: 20:23:40.0351074 - Sensor Status: Initializing

   4: 20:23:44.7783652 - New Status: Connected

   5: 20:23:44.7783652 - Sensor Status: Connected

   6: 20:23:51.2279666 - New Status: Disconnected

   7: 20:23:51.2279666 - Sensor Status: Disconnected

   8: 20:23:59.2548372 - New Status: Initializing

   9: 20:23:59.2558370 - Sensor Status: Initializing

  10: 20:24:03.5861851 - New Status: Connected

  11: 20:24:03.5861851 - Sensor Status: Connected

  12: 20:24:08.8158976 - New Status: Disconnected

  13: 20:24:08.8158976 - Sensor Status: Disconnected

Si además queremos aprovechar este evento para inicializar el sensor, tenemos que tener en cuenta que solo podremos hacerlo cuando el estado del sensor sea “connected”.

El siguiente ejemplo completo muestra una forma de hacerlo.

   1: using System;

   2: using Microsoft.Kinect;

   3:  

   4: namespace KinectStatus01

   5: {

   6:     class Program

   7:     {

   8:         private static KinectSensor _kinect;

   9:         static void Main(string[] args)

  10:         {

  11:             Console.WriteLine("{0} - Start sample application", DateTime.Now.TimeOfDay.ToString());

  12:             KinectSensor.KinectSensors.StatusChanged += KinectSensorsStatusChanged;

  13:             Console.ReadLine();

  14:             if(_kinect != null)

  15:             {

  16:                 _kinect.Stop();

  17:             }

  18:         }

  19:  

  20:         static void KinectSensorsStatusChanged(object sender, StatusChangedEventArgs e)

  21:         {

  22:             Console.WriteLine("{0} - New Status: {1}", DateTime.Now.TimeOfDay.ToString(), e.Status);

  23:             _kinect = e.Sensor;

  24:             if (e.Sensor != null)

  25:             {

  26:                 Console.WriteLine("{0} - Sensor Status: {1}", DateTime.Now.TimeOfDay.ToString(), _kinect.Status);

  27:                 if (_kinect.Status == KinectStatus.Connected)

  28:                 {

  29:                     _kinect.DepthStream.Enable();

  30:                     _kinect.ColorStream.Enable();

  31:                     _kinect.SkeletonStream.Enable();

  32:                     _kinect.Start();

  33:                     Console.WriteLine("{0} - Sensor Started", DateTime.Now.TimeOfDay.ToString());

  34:                 }

  35:             }

  36:             else

  37:             {

  38:                 Console.WriteLine("{0} - No Sensor", DateTime.Now.TimeOfDay.ToString());

  39:             }

  40:         }

  41:     }

  42: }

 

Saludos @ Home

El Bruno

image image image
About these ads

5 pensamientos en “[#KINECTSDK] HowTo: Detectar el cambio de estado o desconexion del sensor

  1. Pingback: [#KINECTSDK] HowTo: Pintar un skeleton | El Bruno

  2. Pingback: [#KINECTSDK] HowTo: Pintar un skeleton - El Bruno

  3. Pingback: [#KINECTSDK] HowTo: Pintar un skeleton | Hispafoxing

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s