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 responses to “[#KINECTSDK] HowTo: Detectar el cambio de estado o desconexion del sensor”

  1. muy bueno brunito !!!!!! me encanta

    Like

    1. Gracias amigo !! ^^

      Like

  2. […] a tener en cuenta es trabajar con el sensor Kinect como una variable local del form. En este post (link) hable un poco al […]

    Like

  3. […] a tener en cuenta es trabajar con el sensor Kinect como una variable local del form. En este post (link) hable un poco al […]

    Like

  4. […] a tener en cuenta es trabajar con el sensor Kinect como una variable local del form. En este post (link) hable un poco al […]

    Like

Leave a comment

Discover more from El Bruno

Subscribe now to keep reading and get access to the full archive.

Continue reading