lunes, 9 de julio de 2012
Tutorial KINECT camaras RGB y de profundidad (DEPTH)
Hola
Empezaremos por lo básico, en Visual Studio 2010 creamos un nuevo proyecto WPF y en mi caso le llamare KinectPruebaCamaras.
Ahora bien una vez creado el proyecto con sus archivos iniciales nos vamos a agregar la referencia para trabajar con nuestra KINECT
Ok hasta este punto ahora vamos a nuestro código XAML de nuestra aplicación e insertamos dos controles de imagen dentro del Grid inicial donde la primera le llamaremos VideoImage y a la otra DepthImage
Bien ahora vamos a lo que en realidad tenemos que hacer, nos vamos al code behind de nuestro archivo MainPage.xaml y empezamos por lo siguiente agregando la Referencia con el siguiente código.
using Microsoft.Kinect;
ahora declaramos una variable de tipo KinectSensor que yo llamare sensor y dos variables una de tipo byte que llamare pixeldata y otra de tipo short que llamare pixel.
KinectSensor sensor = KinectSensor.KinectSensors[0];
byte[] pixelData;
short[] pixel;
Ahora debemos de habilitar las camaras con estas dos rutinas, uno para la cámara de RGB y la otra para la cámara de profundidad (DEPTH), debemos de indicar al Kinect que vamos a utilizar en este caso las dos camaras antes mencionadas.
public partial class MainWindow : Window
{
KinectSensor sensor = KinectSensor.KinectSensors[0];
byte[] pixelData;
short[] pixel;
public MainWindow()
{
InitializeComponent();
sensor.ColorStream.Enable();
sensor.DepthStream.Enable();
}
}
“Vamos bien ahí”… bueno ahora necesitamos indicar tanto iniciar el KINECT al correr la aplicación y cuando cerremos la aplicación con estas dos sencillas rutinas Start() y Stop()... (“sencillo no!?”) y en la sección del método Window_Loaded vamos a crear dos eventos ruteados dentro de la variable sensor que yo llame que contiene toda la información del dispositivo que son ColorFrameReady y DepthFrameReady.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
sensor.ColorFrameReady += new EventHandler<ColorImageFrameReadyEventArgs>(sensor_ColorFrameReady);
sensor.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(sensor_DepthFrameReady);
sensor.Start();
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
sensor.Stop();
}
Bien ya creamos los objetos, tenemos las librerías de Kinect, inicializamos y cerramos nuestro dispositivo ahora bien falta capturar lo que nos llega de las dos camaras y guardarlas en una variable y mostrarlas en nuestra aplicación para poder empezar a trabajar en nuestro KINECT ahora vamos al método sensor_ColorFrameReady y colocamos el siguiente código.
void sensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
bool receivedData = false;
using (ColorImageFrame CFrame = e.OpenColorImageFrame())
{
if (CFrame == null)
{
}
else
{
pixelData = new byte[CFrame.PixelDataLength];
CFrame.CopyPixelDataTo(pixelData);
receivedData = true;
}
}
if (receivedData)
{
BitmapSource source = BitmapSource.Create(640, 480, 96, 96,
PixelFormats.Bgr32, null, pixelData, 640 * 4);
VideoImage.Source = source;
}
}
En el código que acabo de colocar creamos una variable de tipo boleana para detectar mediante una condición para capturar lo que nos arroja la cámara copiando los datos de lo que nos contiene CFrame y después volvemos a preguntar por nuestra variable boleana y de ser verdadero procede a crear un BitmapSource en el cual abrimos dándole los parámetros que demuestro en el código, detenerme a explicar los parámetros no son necesarios por ahora para este tutorial rapido pero en mi primer tutorial son los mismos parámetros que describi y explique, la novedad en esa función es que se pueden jugar ahora con valores superiores o inferiores en escalas proporcionales a la que colocamos por default que es 640 x 480.
Entonces bien ahora vamos a la siguiente cámara que es la de profundidad dando este codigo
void sensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
bool receivedData = false;
using (DepthImageFrame CFrame = e.OpenDepthImageFrame())
{
if (CFrame == null)
{
}
else
{
pixel = new short[CFrame.PixelDataLength];
CFrame.CopyPixelDataTo(pixel);
receivedData = true;
}
}
if (receivedData)
{
BitmapSource source = BitmapSource.Create(320, 240, 96, 96,
PixelFormats.Gray16, null, pixel, 320 * 4);
DepthImage.Source = source;
}
}
Es el mismo tratamiento que explique en el método anterior pero lo que cambia es el formato de Pixeles y le colocamos Gray16 (PixelFormats.Gray16) y cambiamos la resolución a 320 x 240 claro también podemos colocarle la resolución de la otra cámara 640 x 480
Ahora corremos nuestra aplicación y tenemos las 2 camaras, tanto la de profundidad como la RGB funcionando y habilitadas para trabajar con nuestra KINECT, es importante destacar que estos son los métodos básicos para tener en funcionamiento estas 2 camaras, ya el resto queda de parte de nuestra creatividad
Estoy trabajando actualmente en el siguiente Tutorial para reconocimiento del personaje y de las librerías Skeleton para hacer infinidades de cosas con nuestro KINECT.
Salu2
martes, 3 de julio de 2012
Skeletons?... el desarrollo de una interfaz verdaderamente natural..
Hola una vez mas estoy aca para explicarles a fondo sobre las funciones y nociones
basicas para poder desarrollar aplicaciones con este gran dispositivo de
interfaz natural de usuario NUI KINECT.
Esta
vez hablaremos acerca de Skeletons de una manera teorica, luego
posteare un Tutorial basico de trabajo con estas funciones para
reconocimiento de personas en una aplicacion…
Entonces veamos un poco que es Skeletons?... Son funciones que nos definen un patron de la anatomia del cuerpo humano reconocido a travez del KINECT para ser colocado dentro las aplicaciones a traves de la libreria de datos dinamica MICROSOFT.KINECT en su version 1.5 al ser esta la mas ultima liberada por Microsoft.Bien
para una gran resumen veamos el siguiente grafico..
Joints:
de forma mas española es la definicion de coyunturas o extremidades que
son partes del cuerpo humano que unen sus extremidades, es esto la base
de nuestra definicion de Skeletons en la SDK de KINECT, en la grafica se muestran cada una de sus Joints
Entonces bien esta nueva SDK nos ofrece 2 nuevas funciones añadidas tales como:
Modo de seguimiento del esqueleto en forma sentada
Proporciona la capacidad de rastrear el cuerpo de los usuarios superior (10 Joints), y dan a la parte inferior del cuerpo si no son visibles o relevantes para la aplicación. Además, permite la identificación de usuario cuando se sienta en un objeto de silla, sillón o de otro inanimado.
Proporciona la capacidad de rastrear el cuerpo de los usuarios superior (10 Joints), y dan a la parte inferior del cuerpo si no son visibles o relevantes para la aplicación. Además, permite la identificación de usuario cuando se sienta en un objeto de silla, sillón o de otro inanimado.
Mejorar el seguimiento del esqueleto
En el rango cercano, los usuarios que están sentados o de pie, se puede seguir dentro de 40 cm (16 pulgadas) del sensor. Además, el motor de seguimiento del esqueleto es ahora más rápido, hacer un mejor uso de la CPU y la ampliación de los recursos informáticos. Además, la información que acaba de agregar la orientación conjunta de los esqueletos es ideal para escenarios de animación Avatar y la detección sencilla postura.
En el rango cercano, los usuarios que están sentados o de pie, se puede seguir dentro de 40 cm (16 pulgadas) del sensor. Además, el motor de seguimiento del esqueleto es ahora más rápido, hacer un mejor uso de la CPU y la ampliación de los recursos informáticos. Además, la información que acaba de agregar la orientación conjunta de los esqueletos es ideal para escenarios de animación Avatar y la detección sencilla postura.
En
el siguiente post empezaremos desde cero con una aplicacion Skeletons
para KINECT de una forma bien explicada y portable que podras usar en
todas tus nuevas aplicaciones..
Salu2
Etiquetas:
.NET,
Desarrolladores,
Developers,
Kinect,
Microsoft,
MSDN,
SDK
lunes, 2 de julio de 2012
Nuevos Tutoriales de KINECT en Español
Hola, como veran y por falta de tiempo no he podido actualizar este
sitio, pero es cuestion de horas para aclarar las dudas en español en
cuanto a lo que tiene y nos ofrece esta nueva SDK de KINECT en su
version 1.5, claro previo estaba la 1.0 pero vayamos a lo ultimo que de
todos modos cambiaron ligeros detalles en su API pero no habra problemas
a la hora de entender las funciones nuevas porque en lo que respecta la
forma de trabajar ahora desarrollando aplicaciones de este tipo esta
siendo cada vez mas sencilla y dinamica, el resto seria solamente de
creatividad por parte del o los desarrolladores de un proyecto o
cualquier Aplicacion que queramos crear con esta potente Herramienta NUI
Explicar entre las nuevas capacidades el uso del reconocimiento de voz, una demo de prueba para iniciar rapidamente las 2 camaras, la de profundidad y la de RGB, uso de las librerias Skeletons para el reconocimiento de personas e interaccion con las aplicaciones!..
Explicar entre las nuevas capacidades el uso del reconocimiento de voz, una demo de prueba para iniciar rapidamente las 2 camaras, la de profundidad y la de RGB, uso de las librerias Skeletons para el reconocimiento de personas e interaccion con las aplicaciones!..
Suscribirse a:
Entradas (Atom)