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

5 comments

Leave a comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: