Ya está disponible para descarga el SDK de Kinect para Windows Beta que nos permite crear aplicaciones usando la tecnología de sensores de Kinect.
El Starter Kit incluye:

  • Drivers para el dispositivo de sensores Kinect
  • APIs e interfaces del dispositivo
  • Documentación técnica y documentación de ayuda para la instalación y configuración
  • Código de ejemplo.

¿Qué puedo hacer con el SDK de Kinect?

El SDK nos permite explorar y experimentar con las siguientes funciones:

  • Skeletal tracking para la imagen de una o dos personas que se estén moviendo dentro del campo de visión del dispositivo.
  • Acceso a la cámara RGB y a los datos de profundidad que indican la distancia de un objeto al sensor de Kinect por medio de la cámara de profundidad-XYZ.
  • Procesamiento de audio para el array de 4 micrófonos con cancelación de ruido acústico y de eco. “beam formation” (formación de haz) para identificar la fuente del sonido y la integración con la API de Windows speech recognition.

Para poder experimentar con las capacidades y funcionalidades del SDK los desarrolladores tienen que estar familiarizados con los siguientes entornos y lenguajes:

  • Microsoft Visual Studio® 2010

Para trabajar con los ejemplos y desarrollar tus propias aplicaciones puedes utilizar cualquier versión de Visual Studio. La versión Express está disponible en descarga gratuita. Si eres nuevo en Visual Studio 2010 puedes ver para más información visite nuestro centro de desarrollo de Visual Studio.

  • Lenguajes C# o C++

Muchos ejemplos están disponibles tanto en C# como en C++. Para más información sobre estos lenguajes visite el centro de desarrollo de C# y C++.

  • Desarrollo para Windows 7

Este SDK trabaja sobre Windows 7 con funciones y funcionalidad del SDK de Windows 7. Para aprender más sobre el desarrollo de aplicaciones para Windows 7 vea el centro de desarrollo de Windows.

¿Qué necesito para empezar?

Las aplicaciones desarrolladas con el SDK de Kinect deben ejecutarse en máquinas con Windows nativo, no en máquinas virtuales, porque el driver PCKinect y la SDK deben estar instaladas en el ordenador donde se ejecuta la aplicación.
Sistema operativo:

  • Funciona en Windows 7, tanto x86 como x64

Hardware:

  • El sensor de Kinect para Xbox360
  • Ordenador con doble núcleo, 2.66GHz o superior
  • Tarjeta gráfica que soporte Microsoft DirectX® 9.0c
  • 2 GB de RAM, 4 GB recomendada

Software:

Pasos previos a la instalación

Antes de descargar e instalar el SDK hay que seguir una serie de pasos para la correcta instalación y después configuración tanto del SDK como del dispositivo.

  • Tener las últimas actualizaciones de Windows 7 vía Microsoft Update.
  • No tener conectado el dispositivo Kinect al puerto USB del ordenador.
  • Eliminar cualquier otro driver de PCKinect que tengas previamente instalado. Podría no instalarse correctamente y no funcionar.
  • Asegúrate de tener el software requerido anteriormente descrito.
  • Cierra Visual Studio antes de la instalación.

Obtener e instalar el SDK de Kinect

Para guardar en tu ordenador para instalarlo más adelante, clic en Guardar.

  • Sigue el asistente para completar la instalación

Conectar el sensor Kinect al PC

Una vez descargado e instalado el SDK el siguiente paso es conectar el dispositivo al ordenador. El sensor Kinect se conecta a través del puerto USB pero tiene un firmware algo diferente que el estándar de los dispositivos USB.
Para cargar el driver de PCKinect:

  • Conecte la fuente de alimentación del sensor Kinect a la red eléctrica.
  • Conecte Kinect en un puerto USB libre del PC y espere a que se reconozcan los componentes del sensor.
  • Todos los drivers, incluidos los de audio, serán cargados sin problemas.

Verificar la correcta instalación:

  • Debes ver parpadear el LED verde en el sensor de Kinect
  • En el administrador de dispositivos del panel de control, debajo de Microsoft Kinect deben aparecer los siguientes nodos:
  • Microsoft Kinect Audio Array Control
  • Microsoft Kinect Camera
  • Microsoft Kinect Device

Hay que tener en cuenta que el SDK Beta permite el visor del esqueleto en “standing scenarios” (sólo de pie, no sentado) y no detecta figuras sentadas.
El rango para detectar la profundidad y utilizar el visor del esqueleto es de 1.2 a 3.5 metros de distancia al sensor, en caso contrario no se obtendrá ningún resultado o posiblemente ruido en el visor de profundidad y de esqueleto.

Mi primera aplicación con Kinect SDK para Windows

Con el SDK descargado e instalado y el sensor de Kinect conectado y preparado para funcionar correctamente ya podemos empezar a programar con Visual Studio 2010 nuestra primera aplicación utilizando el sensor de Kinect.

Obtener la imagen de vídeo de la cámara

En nuestra primera aplicación vamos a ver cómo obtener la imagen de vídeo de la cámara del sensor y mostrarla en nuestra aplicación.
Abriremos Visual Studio 2010 y crearemos un nuevo proyecto WPF. Una vez creado añadiremos un elemento Imagen a la pantalla principal y una referencia a librería de Kinect ( Microsoft.Research.Kinect) a nuestro proyecto.
Crearemos un evento Loaded de la ventana principal y en él inicializaremos lo necesario para utilizar el sensor de Kinect.
Lo primero es instanciar un objeto de la clase Runtime, que es la que utilizaremos para usar el sensor y después lo inicializaremos añadiendo las opciones que queramos.

Runtime kinect = new Runtime();
kinect.Initialize(RuntimeOptions.UseSkeletalTracking | RuntimeOptions.UseColor);

Con la enumeración RuntimeOptions vamos habilitando las distintas funcionalidades que tiene el sensor para poder utilizarlas después. En esta ocasión vamos a utilizar 2 (el tracking del esqueleto y la cámara de color).
Lo siguiente es activar la cámara con el método Open de la propiedad VideoStream en este caso. Hay que pasarle una serie de parámetros como son el tipo de flujo que se quiere obtener, la resolución y el tipo de imagen que se va a capturar.

kinect.VideoStream.Open(Microsoft.Research.Kinect.Nui.ImageStreamType.Video, 2,Microsoft.Research.Kinect.Nui.ImageResolution.Resolution640x480,Microsoft.Research.Kinect.Nui.ImageType.Color);

Ahora nos creamos el evento que se producirá al obtener las imágenes del sensor.

kinect.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(kinect_VideoFrameReady);

Definimos las funciones para manejar el evento que será donde trataremos los datos que obtenemos del sensor. Cogeremos el Frame que se captura y crearemos un BitmapSource  con la imagen obtenida. Utilizaremos el elemento Image para enlazar el BitmapSource y se muestre en la pantalla.

void kinect_VideoFrameReady(object sender, ImageFrameReadyEventArgs e)
{
PlanarImage Image = e.ImageFrame.Image;
image1.Source = BitmapSource.Create(Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, Image.Bits, Image.Width * Image.BytesPerPixel);
}

Mostrar la imagen que captura el sensor con la cámara RGB es muy sencillo como acabamos de ver.

Obtener el esqueleto para identificar gestos

Ahora veamos cómo identificar gestos gracias al esqueleto que nos proporciona el sensor de Kinect. Obtendremos los datos del esqueleto para averiguar la posición de las manos para después definir un gesto para que cuando se realice mande una orden al sistema operativo.
Igual que pasa con el vídeo debemos añadir el evento correspondiente al identificador de esqueletos para que cuando obtenga uno podamos capturar esos datos. Lo haremos dentro de la función Loaded.

kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(kinect_SkeletonFrameReady);

El manejador nos devuelve un Frame con los datos de los esqueletos capturados. Cada esqueleto tiene un array con los datos de cada Joint, que son las partes del cuerpo que reconoce el sensor. Con estas Joints podemos saber la posición de cada una gracias al IDJoint que es una enumeración que nos facilita la búsqueda de los elementos dentro del array.
Dentro de la función del manejador obtendremos la posición X de la mano derecha e izquierda, multiplicaremos por 1000 para trabajar con enteros.

SkeletonData skeleton = e.SkeletonFrame.Skeletons[0];
float posR = skeleton.Joints[JointID.HandRight].Position.X * 1000;
float posL = skeleton.Joints[JointID.HandLeft].Position.X * 1000;

Teniendo la posición actual sólo tenemos que compararla con la posición anterior y realizar la orden correspondiente.

if (previusPositionR - 100 > posR)
{
SendKeys.SendWait("{PGDN}");
System.Threading.Thread.Sleep(2000);
}
if (previusPositionL + 100 < posL)
{
SendKeys.SendWait("{PGUP}");
System.Threading.Thread.Sleep(2000);
}
previusPositionR = posR;
previusPositionL = posL;

*Para usar SendKeys hay que añadir una referencia a System.Windows.Forms

De esta forma sabremos si se ha realizado un movimiento con la mano derecha hacia la izquierda o viceversa mandando la orden de subir o bajar página. Para que sólo mande la orden una vez hemos puesto un Sleep para que dé tiempo a realizar el movimiento completamente.

Los retos del verano

Durante este verano os propusimos una serie de retos con el SDK de Kinect donde explicábamos como implementar alguna de las funcionalidades de sensor Kinect y después os proponíamos un reto (con solución).

Ver el primer Reto SDK de Kinect: Desarrolla con Kinect

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

¡A Kinectear!

José Perona – @JVPerona - Developer Evangelist Jr.