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
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
![]() |
![]() |
![]() |
muy bueno brunito !!!!!! me encanta
LikeLike
Gracias amigo !! ^^
LikeLike