MSDN España

Noticias, avisos, reflexiones... del equipo que hay detrás de MSDN en España... también tendremos alguna que otra firma invitada :)

Descarga del SDK de Kinect para Windows disponible

Descarga del SDK de Kinect para Windows disponible

  • Comments 5

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.

Leave a Comment
  • Please add 7 and 4 and type the answer here:
  • Post
  • Obtener la imagen de vídeo de la cámara

    En la función void kinect_VideoFrameReady(object sender, ImageFrameReadyEventArgs e), ¿¿¿por qué image1.Source???

  • Hola!

    image1 es un elemento tipo "Image" que hemos añadido en la ventana principal de nuestra aplicación.

    La propiedad Source sirve para especificar el origen de la imagen que queremos mostrar. En este caso la imagen obtenida por medido de la cámara.

    Hay más información sobre este tema en el segundo reto SDK de Kinect:

    blogs.msdn.com/.../reto-kinect-usar-las-c-225-maras-del-sensor.aspx

    Un saludo!

    José Perona - Developer Evangelist Jr.

  • Hola a todos

    Me han ofrecido hacer el proyecto de fin de carrera basado en una aplicación de Kinect y antes de aceptarlo quisiera preguntar una serie de cuestiones..

    ¿Que diferencias habría entre desarrollar aplicaciones para una cámara kinect de XBOX y hacerlo con el paquete que venden de Kinect for windows?

    Los requisitos mínimos que piden para el ordenador son altos, ¿creeis que valdría con un procesador duo a 2.4 GHz (Core2Duo E6600)?

    Y por ultimo la pregunta que más me preocupa, la aplicación que me han encargado se basa en un control de helicóptero, no a modo de mando a distancia y que siga mis instrucciones, sino que una computadora sea capaz de reconocerlo y corregir el error de posición para hacerlo aterrizar en una posición predeterminada. Mi pregunta seria si veis factible hacer que Kinect reconozca un helicóptero, por lo que tengo entendido ya traen funciones para hacer que reconozca un cuerpo humano y sus movimientos, pero no he leido nada acerca de reconocer otras formas. Estoy ahora mismo aprendiendo por mi cuenta programación orientada a objetos en c++ y no se si este es un jardin que de momento me queda demasiado grande...

    Un saludo y muchas gracias

  • Exelente solo quiero saber si puede grabar video del mismo cpu ya que en mi caso el xbox kinect detecta otras personas que no estan es decir fantasmas huuuuyyyyyy que mello pero es verdad no se a quien mas la haya pasado

  • mira me encantaria que me alludacen, vivo en cuba sobra la informacion que mi coneccion es dial-up. ( bamos tremaneda mierda) que puede acer para que el kinet de mi 360 funcione, en mi pc tengo win 7 y win 8 cualquiera de los dos el que sea necesario yo lo pongo me da igual...........mi correo el_vity.gonzalez@yahoo.com...si es posible por favor escrivbirme al correo el que le interese alludar a un amigo cubano

    gracias

Page 1 of 1 (5 items)