Reto SDK de Kinect: Desarrolla con Kinect
Imprescindible
Descargar el SDK de Kinect para Windows y tener alguna versión de Visual Studio 2010. Te puedes bajar la versión gratuita de Visual Studio 2010 Express o de la Ultimate Trial.
Para programar con el SDK utilizaremos la herramienta de desarrollo Visual Studio 2010 y Windows 7. Para ver más información sobre requerimientos previos y qué se puede hacer con la SDK de Kinect visita el post referente al SDK de Kinect en nuestro blog de MSDN.
Estamos atentos a tus comentarios en el twitter de @esmsdn y en el hashtag #retosmsdn.
Antes de empezar…
Antes de desarrollar aplicaciones con Kinect vamos a explicar un poco qué es Kinect. Kinect es un dispositivo creado para jugar a los videojuegos de Xbox360 sin necesidad de ningún mando o controlador. Nos da la posibilidad de poder interactuar con nuestro propio cuerpo en el videojuego.
El sensor Kinect posee 2 cámaras de profundidad por infrarrojos y una cámara RGB. Con los datos de profundidad se realiza un seguimiento esquemático de nuestro cuerpo (Skeletal Tracking) para poder llevarlo al juego. También tiene una serie de micrófonos para diferenciar el sonido del juego y ambiental del de nuestra voz y una base motorizada para cambiar el ángulo de visión.
Junto con el sensor de Kinect debemos tener un cable USB con fuente de alimentación para conectarlo a la corriente y al ordenador.
Primeros pasos
Una vez tenemos el sensor Kinect y un ordenador con Windows 7 y Visual Studio 2010 podemos proceder a descargarnos el SDK de Kinect para Windows eligiendo la versión de 32-bit o 64-bit.
Cuando esté descargado hay que tener en cuenta antes de instalar que no debemos tener instalado ningún otro driver de Kinect, el sensor no debe estar conectado ni Visual Studio abierto. Si esto se cumple podemos proceder a la instalación del SDK ejecutando el archivo descargado.
Después de pasar la pantalla de inicio de la instalación, donde nos informan que se va a instalar el “SDK de Kinect para Windows Beta”, nos aparece un mensaje avisándonos que ciertos ejemplos que vienen con el SDK necesitan el último directX SDK. Seguiremos los pasos del asistente para instalar correctamente el SDK.
Ya tenemos el SDK, ahora vamos a enseñar el proceso para conectar el sensor Kinect al ordenador.
Cogemos la fuente de alimentación y la conectamos a la corriente.
El siguiente paso es conectar el otro extremo del cable (con el LED en verde) de la fuente de alimentación al sensor por medio del cable USB
Por último conectamos el cable USB que sale de la fuente de alimentación a un puerto USB libre del ordenador.
Si está conectado correctamente tiene que parpadear el LED verde del sensor.
Cuando lo conectemos nos aparece en pantalla un mensaje informándonos de que se está instalando un driver de un dispositivo nuevo.
Si hacemos clic podemos ver más información sobre el proceso. Se muestra el estado de la instalación de los driver para utilizar el dispositivo, el control de audio, la cámara y el control del array de los micrófonos.Cuando se acaba de instalar los diferentes drivers ya estamos listos para usar el sensor.
Si vamos a “Panel de control-> Sonido y hardware-> Administrador de dispositivos” nos aparece el sensor instalado:
Para asegurarnos que funciona nos dirigimos a “C:\Program Files\Microsoft Research KinectSDK” o la ruta que hayamos elegido para la instalación del SDK y ejecutamos el programa Skeletal Viewer o Shape Game que son 2 programas de ejemplo que se instalan con el SDK.
Shape Game Skeletal Viewer
Shape Game es un juego en el que el propósito es golpear las figuras que caen. También tiene reconocimiento de voz (en inglés) pudiendo dar órdenes sobre el tipo de figuras que caen, tamaño, color, velocidad…
Con el Skeletal Viewer podemos ver el funcionamiento de los 2 tipos de cámaras que tiene el sensor, profundidad a la izquierda y RGB a la derecha, y del Skeletal Tracking en el centro.
Preparar el proyecto
Ya toca ponerse manos a la obra. Vamos a crear un proyecto para iniciarnos en la programación con el SDK de Kinect para Windows y que servirá como proyecto base para tus aplicaciones.
Abriremos Visual Studio 2010 y nos crearemos un proyecto WPF (Windows Presentation Foundation).Le damos un nombre y aceptamos.
Cuando finalice el proceso de creación y preparación de la solución se abrirá el panel de diseño con la ventana principal (MainWindows.xaml) de la aplicación y el explorador de proyectos a la derecha. Desplegaremos el nodo de MainWindow.xaml para acceder al fichero MainWindow.xaml.cs (el code-behind de la ventana) para empezar a programa en él.
Para poder programar con el SDK de Kinect deberemos agregar una referencia a nuestro proyecto. Presionamos con el botón derecho del ratón encima de “References” elegimos “añadir referencia”. Nos aparecerá un cuadro de diálogo en el que seleccionaremos la referencia al SDK “Microsoft.Research.Kinect” y aceptamos. Después de aceptar veremos como se ha agregado una nueva referencia a nuestro proyecto que corresponde al SDK.
Con la referencia agregada añadiremos el espacio de nombres a junto con los demás usings de nuestro fichero para poder utilizar las clases y métodos del SDK.
using Microsoft.Research.Kinect.Nui; |
Dentro del constructor (método MainWindow()) de nuestra ventana añadiremos el evento Loaded, donde pondremos el código para inicializar el sensor, y el evento Closed para finalizar el uso. Esto nos creará, presionando la tecla “Tab”, los 2 métodos (MainWindow_Loaded y MainWindow_Closed) que capturarán los eventos creados y se ejecutará el código que pongamos en ellos cuando estos eventos se produzcan.
public MainWindow() { InitializeComponent(); Loaded += new RoutedEventHandler(MainWindow_Loaded); Closed += new EventHandler(MainWindow_Closed); } |
Crearemos un atributo de la clase Runtime, clase que hace referencia al sensor Kinect y que instanciaremos e inicializaremos más adelante.
Runtime kinect; |
Dentro del método MainWindow_Loaded creamos la instancia para controlar el sensor e inicializaremos el sensor con las opciones que queremos usar. Tenemos 4 opciones para especificar el uso de la cámara RGB, de la de profundidad y del Skeletal Tracking.
La cámara de profundidad se puede usar con la opción de sólo profundidad o profundidad con índice de jugador. Si ponemos la segunda opción los datos de la cámara de profundidad contendrán también un índice para saber si los datos corresponden a un jugador u otro o a ninguno. Como ejemplo vamos a inicializar con 3 opciones. Color, profundidad con índice de jugador y Skeletal Tracking.
void MainWindow_Loaded(object sender, RoutedEventArgs e) { kinect = new Runtime(); kinect.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking); } |
Por último en el método MainWindow_Closed finalizaremos el uso del sensor. Cuando se cierre la aplicación ya no lo estaremos usando.
void MainWindow_Closed(object sender, EventArgs e) { kinect.Uninitialize(); } |
Con esto ya tenemos la estructura de nuestro proyecto preparada para empezar a utilizar las funcionalidades que nos ofrece el SDK en nuestra aplicación.
Tu turno… ¡el Reto! – Kinect arriba y Kinect abajo
Con el SDK aparte de poder utilizar las cámaras y el Skeletal Tracking podemos cambiar el ángulo de visión de las cámaras gracias al motor que tiene el sensor. Como reto te propongo crear una interfaz para poder manejar este motor y puedas subir y bajar el sensor.
Pista: NuiCamera
Recursos: Post sobre Kinect en el blog de MSDN, documentación sobre el SDK de Kinect y centro de desarrollo de WPF
Solución: https://msdn.microsoft.com/es-es/windows/hh433427
Participa: twitter de @esmsdn o hashtag #retosmsdn.
¡A Kinectear!
José Perona – @JVPerona - Developer Evangelist Jr.
Ver el segundo Reto SDK de Kinect: Usar las cámaras del sensor
Ver el tercer Reto SDK de Kinect: Detectar posturas con Skeletal tracking
Ver el cuarto Reto SDK de Kinect: Reconocer gestos con Skeletan tracking