Hola mundo con Kinect SDK

Kinect, originalmente concebido como un accesorio para la XBOX, ha superado las expectativas de la consola al convertirse en un dispositivo que ha cambiado la manera de interactuar con el ordenador.

En este artículo veremos cómo ha pasado de ser un mero accesorio a una plataforma para la que desarrollar proyectos interesantes. Podremos, además ver un primer ejemplo de código que usa la plataforma.

Un poco de historia

La historia de Kinect se remonta a noviembre de 2010, cuando es presentado en junio de 2009 en el evento E3 como «Project Natal». Posteriormente en noviembre de 2010 sale al mercado como accesorio de la XBOX360. Contaba con una conexión USB que no se había protegido, lo que hizo que la comunidad de desarrolladores le prestase mucha atención, obteniéndose el primer driver de vídeo para Linux a finales de ese mismo mes.

A partir de ese momento la comunidad empezó a trabajar en este inquietante dispositivo hasta el punto de tener drivers bastante completos en poco tiempo. Microsoft decidió reaccionar lanzando una primera beta del SDK no comercial en Junio de este año (que implica que no podemos usar Kinect para vender aplicaciones ni para publicidad, de momento). Esta beta se ha actualizado el pasado Noviembre, y está previsto para principios de 2012 una nueva actualización de caracter comercial.

Nuestro primer Hola Mundo

Para poder trabajar con el SDK necesitamos Visual Studio Express, disponible de manera gratuita en la web de Visual Studio. Una vez instalado, podemos descargar e instalar el SDK, para poder empezar a trabajar con la Kinect.

El primer paso consiste en agregar la referencia al espacio de nombres que se muestra a continuación:

using Microsoft.Research.Kinect.Nui;

Una vez esté agregada, podemos escribir nuestro primer trozo de código. El código a continuación, pese a no estar completo por parámetros de inicialización muestra varias cosas:

//Inicializar el sensor
nui = Runtime.Kinects[0];
nui.Initialize(...);

nui.VideoStream.Open(...);
PlanarImage planarImage = nui.VideoStream.GetNextFrame(1000).Image;

//Cerrar la conexión
nui.Uninitialize();

La primera es que tenemos la posibilidad de contar con varios sensores Kinect, y que en este ejemplo seleccionamos solamente el primero. Posteriormente inicializamos el sensor.

El siguiente paso consiste en abrir una conexión con el flujo de vídeo, esperar 1000 milisegundos y recibir la siguiente imagen. Esta imagen la podremos procesar en nuestro código de la manera que consideremos más oportuna.

Es importante destacar que cuando terminemos de trabajar con Kinect cerremos la conexión llamando al método Uninitialize.

Para ver ejemplos más completos y complejos, en el SDK que enlazo al final del artículo puedes encontrar varios ejemplos de código funcionales.

¿Qué más incluye el SDK?

Lo que se ha visto hasta ahora es cómo obtener una imagen, sin embargo el SDK de Kinect tiene varias características adicionales:

  • Drivers (para que el PC reconozca la Kinect): Esto puede sonar bastante obvio, pero necesitamos que el ordenador reconozca todas las capacidades del dispositivo, las cámaras y los micrófonos.
  • NUI: Se engloban en este área todos los métodos relacionados con las cámaras
    • Imagen de la cámara: Lo que hemos captado antes, una imagen de lo que está captando la cámara principal en estos momentos.
    • Datos de profundidad: Es también una imagen, pero en escala de grises que es capaz de detectar la profundidad de una figura.
    • Seguimiento de esqueleto: Es una de las características más destacadas de Kinect, ya que es capaz de detectar 20 articulaciones de 2 personas diferentes orientadas al sensor.
  • Speech: Por último y no menos importante, este área engloba todos los métodos relacionados con la escucha y comandos de voz.
    • Captura de audio con detección de ruido: El hecho de que Kinect tenga 4 micrófonos permite aislar el ruido y detectar la fuente de las órdenes concretas.
    • Comandos de voz: Además, usando la tecnología de reconocimiento de voz, se pueden crear diccionarios personalizados para que el programa reconozca nuestras órdenes.

Conclusiones

Si tienes una Kinect te animo a que la desenchufes de la consola, la conectes a tu ordenador, descargues el SDK y descubras cómo funciona. Es un accesorio interesante que puede tener mucho futuro en entornos de hogar o incluso corporativos, por no hablar de temas relacionados con robótica.

Recursos:

Console.WriteLine("Felices Fiestas a todos");