In my last blog post we discussed about the basics to get started with Kinect programming, today we will see how we can detect a connected Kinect device and Enable its stream and start that device. We will start by creating a sample application in WPF that uses the Kinect device.Open Visual studio and create a new WPF Application. Next we need to add reference to Microsoft.Kinect dll. This will enable us to use Kinect with our application.
In MainWindow.xaml.cs add the using directive for Microsoft.kinect, now we are ready to use kinect device, with our application.
Before we move further, it is important to know different status a kinect sensor can have. These statuses as defined in the KinectStatus enumeration, are:
Status |
Description |
Connected |
The Kinect is fully connected and ready. |
DeviceNotGenuine |
The Kinect is not genuine. |
DeviceNotSupported |
The Kinect is not supported. |
Disconnected |
The Kinect is not connected to the USB connector. |
Error |
An error has occurred. |
Initializing |
The Kinect is initializing. |
InsufficientBandwidth |
The USB connector does not have sufficient bandwidth. |
NotPowered |
The Kinect is not powered up. |
NotReady |
Some part of the kinect is not yet ready. |
Undefined |
The status is not defined. |
We will use some of these statuses in our code, which is as follows:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
using Microsoft.Kinect; namespace KinectBiginner { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { private KinectSensor sensor = null ; public MainWindow() { InitializeComponent(); } private void Window_Loaded( object sender, RoutedEventArgs e) { getKinect(); // assigns the kinect sensor device to KinectSensor object. //tracks the change in the kinect's status. KinectSensor.KinectSensors.StatusChanged += new EventHandler<StatusChangedEventArgs>(KinectSensors_StatusChanged); if (sensor != null ) { lblKinectStatus.Content = "Kinect Conected." ; } else { lblKinectStatus.Content = "No device found." ; } } /// <summary> /// Assigns the first kinect detected to the KinectSensor object. /// Enables Skeletonstream and starts the device. /// </summary> private void getKinect() { sensor = KinectSensor.KinectSensors.FirstOrDefault(s => s.Status == KinectStatus.Connected); if (sensor != null ) { sensor.SkeletonStream.Enable(); sensor.Start(); } } /// <summary> /// This is called each time, when there is a change in the kinect device status. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void KinectSensors_StatusChanged(Object sender, StatusChangedEventArgs e) { switch (e.Status) { case KinectStatus.Initializing: if (sensor == null ) { lblKinectStatus.Content = "Initializing Kinect..." ; } break ; case KinectStatus.Connected: if (sensor == null ) { getKinect(); if (sensor != null ) { lblKinectStatus.Content = "Kinect Connected." ; } } break ; case KinectStatus.Disconnected: if (sensor == e.Sensor) { lblKinectStatus.Content = "Kinect was disconnected." ; if (sensor != null ) { sensor.Stop(); sensor = null ; } } break ; case KinectStatus.NotPowered: if (sensor == e.Sensor) { lblKinectStatus.Content = "Kinect not powered.Please check the power supply." ; if (sensor != null ) { sensor.Stop(); sensor = null ; } } break ; } } } } |
This application will show the current status of the Kinect device, as can be seen in below screen shots:
- Initially if the device is not connected
- <spanclass=”Kinect” >Kinect device is initializing
- When the status of the kinect is connected and is ready to be used
- When status of kinect is disconnected
- When the power adapter of kinect is not powered
For any commercial Kinect application it is important to track the status of Kinect device in real time.
In next blog we will see how we can track user skeleton using Kinect.