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.








domingo, 20 de abril de 2014

Primera Aplicacion sencilla con Kinect en Visual Studio 2013

Teniendo ya todo listo de lo descrito en el post anterior procederemos a crear una aplicación sencilla que hace uso de la camara RGB de Kinect.

  1. Primero debemos crear un proyecto de tipo aplicación WPF.
  2. Para poder operar con la librería de kinect, debemos agregar la referencia Microsoft.Kinect
  3. Habiendo agregado la referencia, debemos agregar el namespace en el código fuente using Microsoft.Kinect;
  4. Ahora debemos agregar un control image, lo expandimos sobre toda la ventana.
  5. Ya con el control image listo, debemos agregar un evento a la ventana. Desde propiedades buscamos el evento loaded y clic!
Ahora completando el codigo iré documentando que significa cada cosa.

using Microsoft.Kinect;
namespace CamaraWebSencilla
{
    /// <summary>
    /// Lógica de interacción para MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        KinectSensor miKinect;
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Window_Loaded(object sender, RoutedEventArgs e) //nuestro método paso 5
        {
            miKinect = KinectSensor.KinectSensors.FirstOrDefault(); // Almacenamos nuestra kinect en esta variable para así llamar sus funciones. //
            miKinect.Start(); // Aca le indicamos que inicio.
            miKinect.ColorStream.Enable(); //Este método da inicio a la señal de flujo de stream de la cámara (Habilita la cámara).
            miKinect.ColorFrameReady += miKinect_ColorFrameReady; //Con este controlador de eventos le decimos a la aplicación que debe hacer cuando detecte el flujo de datos.
        }
        void miKinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
        {
            using (ColorImageFrame frameImagen = e.OpenColorImageFrame())
            {
                if (frameImagen == null)
                   return;
                byte[] datosColor = new byte[frameImagen.PixelDataLength];
                frameImagen.CopyPixelDataTo(datosColor);
                mostrarVideo.Source = BitmapSource.Create(
                    frameImagen.Width, frameImagen.Height,
                    96,
                    96,
                    PixelFormats.Bgr32,
                    null,
                    datosColor,
                    frameImagen.Width * frameImagen.BytesPerPixel
                    );
            }
        }
    }
}
Ejecutando nuestro proyecto, podremos tener una cámara web sencilla con kinect.


domingo, 13 de abril de 2014

Kinect SDK

Comienzo esta primera entrada comentando de lo que se tratara este blog y los primeros pasos que se darán para el proyecto interactivo multimedia que comenzare con un grupo de compañeros de universidad, Este blog va a ser un tipo de bitácora donde van a ir quedando avances, registros sobre el proyecto. Hemos escogido como herramienta de desarrollo Kinect SDK.
El Primer paso, hacer funcionar la Kinect!
A continuación iré detallando como empezar a programar algo sencillo en el entorno Visual Studio 2013 (express) utilizando Kinect SDK para poder hacerla funcionar, lo primero que necesitaremos es:

Sistema operativo:

Funciona en Windows 7 o superior, 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:

  • Microsoft Visual Studio 2010 o superior ("en todas sus versiones").
  • Windows Software Development Kit for Windows 8
  • Microsoft .NET Framework 4.0

Obtener e instalar el SDK de Kinect

Ir a la página de descarga del SDK de Kinect para Windows SDK, hacer clic 
Latest Kinect for Windows SDK
Latest Kinect for Windows Developer Toolkit

Para empezar la instalación inmediatamente, clic en Ejecutar.

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 ("instrucciones directas del sitio web oficial MS").

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:

  1. Conecte la fuente de alimentación del sensor Kinect a la red eléctrica.
  2. Conecte Kinect en un puerto USB libre del PC y espere a que se reconozcan los componentes del sensor.
  3. Todos los drivers, incluidos los de audio, serán cargados sin problemas.
  4. 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

Primera aplicación sencilla en Visual Studio 2013 .. Lo veremos la próxima semana!