domingo, 27 de abril de 2014

Proyecto con kinect // motricidad gruesa con niños.

Ya con haber hecho una pequeña introducción de kinect sdk, iré desarrollando los conceptos de kinect sdk para llevar a cabo este proyecto. En esta oportunidad hablaremos del sensor de profundidad de kinect y lo que podemos hacer con el de forma individual.



Como se puede ver hay 2 sensores que tiene que ver con la profundidad, uno es el infrarrojo que emite puntos infrarrojos (izquierda de la imagen) y el otro ("o cámara infrarroja") a la derecha es el que captura estos puntos infrarrojos que emite el otro sensor de la izquierda.
Ahora como trabajamos con estos puntos

Cuando inicializamos el envió de datos de profundidad 

miKinect.DepthStream.Enable();
, este nos enviara una gran cantidad de distancias (En imagen, el primer recuadro representa estas distancias enviadas) , pero estas distancias no son del mismo tamaño como los pixeles de color , estos requieren ser almacenados en un array de tipo short[](" porque con este tipo de datos podemos almacenar datos de 16 bits"). Viendo la imagen nos podemos dar cuenta que hay 3 cuadros de color amarillo (3 bits), estos corresponden a los datos de los esqueletos que para esta oportunidad no trabajaremos con ellos y que para el caso practico cuando almacenemos estas distancias:

int valorDistancia = datosDistancia[i] >> 3; // la parte que queda en rojo, quita los 3 últimos bits del arreglo que no ocuparemos.
//datosDistancia[i], sera nuestro arreglo de tipo short!

Desde esta forma podemos ir controlando estos datos, como por ejemplo desde nuestro código con un eventhandler para capturar este flujo de información

for (int i = 0; i < framesDistancia.PixelDataLength; i++ )
{
int valorDistancia = datosDistancia[i] >> 3;

} //Aquí almacenamos cada distancia del arreglo short!.

y luego con estos podemos usar el método DepthStream.UnknownDepth para comparar si nuestra kinect esta detectando una distancia desconocida e emitir un color en un aplicación por ventana.

if (valorDistancia == miKinect.DepthStream.UnknownDepth)
{

colorImagenDistancia[posColorImagenDistancia++] = 0; //Azul
colorImagenDistancia[posColorImagenDistancia++] = 0; //Verde
..

En la semana subiré un código completo documentado para ejecutar un ejemplo con lo que explicado en este post.








1 comentario: