9 de agosto de 2012

Primer programa con el Kinect SDK

Todos los proyectos que realicemos usando el Kinect SDK van a tener varias a cosas en común.

1) Crear un nuevo proyecto

2) Referenciar la librería  Microsoft.Kinect.dll

3) Declarar el namespace del Kinect

Básicamente todos los proyectos que hagamos con el SDK Kinect van a necesitar esos pasos, no importa si estamos haciendo aplicaciones WPF, o aplicaciones Windows Form, un juego XNA o incluso una aplicación de consola.

Para entender correctamente como realizar aplicaciones con el Kinect debemos tener presente que el Kinect es un dispositivo de entrada a nuestro programa. Ademas esta mandando información de color, de profundidad, y de esqueletos todo el tiempo que este conectado y es importante manejar este flujo de datos.

La primera aplicación que vamos a realizar, es un programa de consola. El objetivo del programa es que se nos muestre en consola la información de profundidad que el Kinect entrega.

Para crear una nueva aplicación, abrimos el Visual Studio y creamos un nuevo proyecto de consola.



Una vez creamos el proyecto vamos a encontrarnos con una interfaz similar a esta:


Lo siguiente es referenciar la libreria del SDK Kinect. Hacemos clic derecho en "References" y damos clic en la opción "Agregar referencia"


En la ventana agregar referencia, en la pestaña .NET, buscamos la libreria "Microsoft.Kinect"


Ahora, en la parte de arriba de nuestro código .cs agregamos la linea "using Microsoft.Kinect;" y de esta manera agregamos toda la funcionalidad del SDK Kinect a nuestro proyecto. Ahora ya tenemos nuestro entorno listo para crear nuestro programa.

Vamos a realizar el siguiente código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//Incluimos la siguiente linea para decirle al programa que vamos a trabajar
//con la funciones del SDK Kinect
using Microsoft.Kinect;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Instanciar un objeto sensor de tipo KinectSensor. 
            //El indice "0" indica que es el primer kinect conectado
            KinectSensor sensor = KinectSensor.KinectSensors[0];

            //Inicializar las camaras
            sensor.DepthStream.Enable();
            //Declarar el evento que se ejecuta cuando un cuadro de profundidad
            //este listo para su uso.
            sensor.DepthFrameReady += new EventHandler(sensor_DepthFrameReady);

            //Comenzar a usar el sensor
            sensor.Start();
            //El programa se ejecuta hasta que se presione la tecla espacio
            while (Console.ReadKey().Key != ConsoleKey.Spacebar) { }
        }

        static void sensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            //Asigno a la variable cuadroProfundidad el frame que me entrega el kinect
            var cuadroProfundidad = e.OpenDepthImageFrame();
            //Si el cuadro esta vacio no retorna nada y sale del evento
            if (cuadroProfundidad == null) 
            {
                return; 
            }
            //Creamos un vector del mismo tamaño de los datos de la imagen de profundidad
            short[] datos = new short[cuadroProfundidad.PixelDataLength];
            //Copiamos los datos y los metemos al vector recien creado
            cuadroProfundidad.CopyPixelDataTo(datos);
            //Mostramos en consola el dato numero 1000 de ese vector
            Console.WriteLine(datos[1000]);
        }
    }
}

El kinect nos entrega una imagen de profundidad con unas dimensiones de 640x480 donde cada pixel representa una distancia (desde el kinect hasta el objeto que esta sensando). El kinect entrega esa imagen de profundidad como un vector (cada fila de la imagen una detras de otra en el vector) por lo que tenemos un vector de 307200 posiciones (640*480) cada posición del vector representa un pixel en la imagen de profundidad.

Lo único que hace el programa es mostrar el dato numero 1000 de ese vector cada vez que el Kinect manda una imagen nueva al programa.

No hay comentarios:

Publicar un comentario