Busca en makito

martes, 26 de julio de 2011

Mi primer contacto con el SDK de Windows (KINECT)

En esta oportunidad tuve el placer de leer la documentación del SDK y ver unos cuantos videos para entrar en el mundo del Kinect a nivel de desarrollo, elaboré dos ejemplos básicos que pueden mostrar el inicio del desarrollo de aplicaciones realmente interesantes y totalmente nuevas y diferentes al estilo "Minority Report" o llamada en español "Sentencia previa", donde nos muestran un futuro totalmente desarrollado con HCI donde el protagonista interactúa con una pantalla interactiva sin necesidad de tener contacto físico con ella. (la recomiendo)

Por el momento estoy tratando de entender la matemática y el concepto del manejo de la opción depth o reconocimiento de la profundidad de los objetos detectados con la camara infrarroja del kinect, en esta oportunidad les dejo dos pequeños ejemplos donde en el primero muestro la opción del titl o ángulo de inclinación del motor junto con la aplicacion "hello world" para kinect donde en un extremo superior muestro la captura de video de la cámara RGB y en el otro la camara infrarroja que determina la profundidad de los objetos que para este ejemplo en específico podemos ver como se diferencian cada uno de ellos con diferentes intensidades de grises deacuerdo a la distancia que se encuentren del kinect.

En la segunda aplicación, mediante el manejo de la profundidad (u opcion Depth) en el Kinect, determino si está presente una persona; si la reconoce, éste me la muestra de color amarillo para distinguirlo de los demas objetos y entorno aunque se encuentre cerca o lejos, adicionalmente muestro la distancia que separa el kinect de la persona en metros, esta última parte está aún en proceso de desarrollo por la tanto existe un retardo molesto que no es eficiente y espero aliviar y corregirlo.

23 comentarios:

Gustavo dijo...

¡¡Hola!! Me parece bastante interesante lo que has hecho.
¿Crees que podrías proporcionarme el código o explicarme como lo has hecho?
Mi correo es guss.yaa@gmail.com
Saludos

Miguel Gonzalez dijo...

mmmm, podría elaborar otro post donde puedo explicar el proceso de instalación y adecuación del entorno para el desarrollo porq aún sigo comprendiendo como funciona a nivel de desarrollo y matemática implicada y poco a poco mostrar aplicaciones liberando codigo.

en cuanto a la aplicacion mostrada en el video es una version que no he desarrollado bien aún y por eso es lenta, pero ps si quieres de todas formas el código, claro! no hay problema

Gus dijo...

¡¡Si, muchas gracias!! Te lo agradecería si me puedes proporcionar el código y poder entender. También estoy en eso =D Saludos

Miguel Gonzalez dijo...

ok, vale, en esta semana publicarè otro post donde adecùo el entorno de desaroollo y algunas cosas bàsicas a tener en cuenta.

Marçal dijo...

Hola,

Yo tambien estoy trabajando con el SDK de kinect y todavia voy un poco perdido.

En lo que me he centrado primero es en intentar que el Kinect me devuelva los parametros con los que el trabaja y mostrarlos por pantalla. He empezado con la distancia a la que estan los objetos pero no hay manera.

Veo que tu lo has conseguido pero en el vídeo no se ve todo el código y no avanzo :S.

Si puedieras enviarme el código te estaría muy agradecido. Mi correo es marcal.montserrat@gmail.com

Gracias de antemano!

Marçal dijo...

Hola,

Yo tambien estoy trabajando con el SDK de kinect y todavia voy un poco perdido.

En lo que me he centrado primero es en intentar que el Kinect me devuelva los parametros con los que el trabaja y mostrarlos por pantalla. He empezado con la distancia a la que estan los objetos pero no hay manera.

Veo que tu lo has conseguido pero en el vídeo no se ve todo el código y no avanzo :S.

Si puedieras enviarme el código te estaría muy agradecido. Mi correo es marcal.montserrat@gmail.com

Gracias de antemano!

Miguel Gonzalez dijo...

Marçal que más!, viejo, he avanzado mucho desde esa publicación!, incluso estamos a marzo del 2012 y la última versión del SDK del kinect for windows salió el 1ro de febrero. estaba en un proyecto con el Kinect y no me ha quedado tiempo para abarcar toda la actualización, sé como utilizarlo, sé y tengo muchos conceptos teóricos del SDK ya acentuados e hice un traslado de mi aplicación a la nueva versión pero aún no manejo muchos conceptos nuevos q crearon en esta última versión del sdk, y lo q tu necesitas, claro q te puedo ayudar, incluso ese es el objetivo, q el habla hispana o simplemente por facilidad del idioma la gente conozca y sepa del SDK y lo mejor q puedan utds mismos proporcionar código y elaborar proyectos propios. Cualquier inquietud estaré atento, te responderé lo mas pronto posibley estaré muy pronto (semana santa - primera semana de abril) dedicándole tiempo a actualizar este blog con todo lo nuevo que traigo para utds. un abrazo.

bryamk dijo...

hola amigo, estoy tratando de hacer un sistema de reconocimiento facieal utilizando el kinect y apenas estoy empezando la investigación me interesaría mucho tu codigo me podrías colaborar por favor

bryamcota2@hotmail.com
si no has avanzado nada no importa, total yo quiero es mirar por reojo la logica de tu programa muchas gracias

bryamk dijo...

amigo me podrias colaborar con el codigo? estoy haciendo un sistema de reconocimiento facial en ed con el kinect y me serviría mucho tus avances
muchas gracias

bryamcota2@hotmail.com

Miguel Gonzalez dijo...

Saludos bryamk, ps no sé si te sirva, pero yo estoy elaborando ya aplicaciones y demás pero con el SDK de Microsoft, claro!, de este post a lo que hago ahora he avanzado muchísimo... podría colaborarte.

Me parece interesantísimo la parte de reconocimiento facial!, de hecho quiero hacer algo con ello, podríamos hablar y discutirlo si te interesa e incluso ayudarnos mutuamente. me avisas cualquier cosa.

bryamk dijo...

si amigo me interesa, me gustaria entrar en contacto contigo dame un email o algo para comunicarnos, como te dije anterior mente estoy empezando y estoy muy motivado, m gustaria chekear tu codigo muchas gracias

Miguel Gonzalez dijo...

ok, vale estaré en contacto... este es tu mail ?? marcal.montserrat@gmail.com, de q país sos ? (para saber si podemos coincidir en horas)

Saludos.

guillaume cepa dijo...

ola miguel! estou a fazer um projeto com o kinect e um robot! consegui visualizar a profundidade atraves do depht data, mas nao consigo obter a distancia como voçé tem no video. uso o visual studio c# 2010 procurei nas toolbox mas nao sei como mostrar a distancia! poderia me explicar resumidamente por favor.

cumps guillaume cepa.

Miguel Gonzalez dijo...

guillaume cepa, tu puedes obtener el valor de la distancia muy fácil. En el video, calculé la distancia pero pixel a pixel por eso se demora en procesar, pero eso era mientras aprendía a manejarlo, después escontré que la mejor forma de hacerlo es muy diferente.

Ahora bien, puedes obtener la distancia (en metros) de cada joint (articulación), así pues éste sería el código teniendo en cuenta que esta línea va en el evento AllFramesReady()

C#
float fDistance;

fDistance = first.Joints[JointType.HandRight].Position.Z;

la variable fDistance contiene la distancia en metros de la Mano derecha, para determinar la del cuerpo completo, puedes utilizar el centro de la cadera (HipCenter)por ejemplo... si necesitas mas ayuda info o explicación puedes preguntar tranquilamente.

este código funciona con el último SDK V1.5.

Monica dijo...

¡Hola! Estoy intentando que la kinect me calcule la distancia que hay hasta a un objeto y no me aclaro demasiado, así que te agradecería muchísimo si me pudieras pasar el código que has utilizado. Mi mail es: monicatorrellas.4@gmail.com


Muchisimas gracias!!! :)

Monica dijo...

¡Hola! Estoy intentando que la kinect me calcule la distancia que hay hasta aun objeto y no me aclaro demasiado, así que te agradecería muchísimo si me pudieras pasar el código que has utilizado. Mi mail es: monicatorrellas.4@gmail.com


Muchisimas gracias!!! :)

Monica dijo...

¡Hola! Estoy intentando que la kinect me calcule la distancia que hay hasta aun objeto y no me aclaro demasiado, así que te agradecería muchísimo si me pudieras pasar el código que has utilizado. Mi mail es: monicatorrellas.4@gmail.com


Muchisimas gracias!!! :)

Monica dijo...

¡Hola! Estoy intentando que la kinect me calcule la distancia que hay hasta aun objeto y no me aclaro demasiado, así que te agradecería muchísimo si me pudieras pasar el código que has utilizado. Mi mail es: monicatorrellas.4@gmail.com


Muchisimas gracias!!! :)

Miguel Gonzalez dijo...

Hola mónica, que versión del SDK tienes ?, yo estoy trabajando con el último sdk (version 1.5)... desde ese ejemplo (primera version beta) he avanzado mucho... luego no podría pasarte ese código porque es viejo y no te funcionaría, podría hacerte un nuevo código determinando la distancia mediante colores, o las distancias de las articulaciones del cuerpo (joints), pero determinar la distancia específica de un objeto no sé si se pueda con el SDK únicamente (no he intentado, pero creo q no), lo que podrías hacer es utilizar unas librerías que sí te permitirían hacer cosas como las que quieres. cualquier inquietud o si te envío el ejemplo o mas info, escríbeme nuevamente y te haré llegar la informacion.
saludos

monicatorrellas dijo...

Miguel, tengo la versión de SDK que utilizas tu, la 1.5. ¡Muchas gracias por los consejos! Me vendría de maravilla el código, si no son muchas molestias me encantaría que me lo enviases, sino es posible cualquier información es bienvenida ¡saludos!

Miguel Gonzalez dijo...

listo, ok, entonces estaré haciendo un ejemplo en C# (q es lo que manejo) con los respectivos comentarios en el código y te lo enviaré este fds ya que ahora me encuentro ocupado (si has utilizado el sdk antes o has estado trabajando en ello, te darás cuenta que determinar la distancia de un joint o articulación es muy simple, es una sola linea de código - currentSkeleton.Joints[JointType.HandLeft].Position.Z-), si quieres, puedes ir avanzando en el manejo de la librería que te permitiría detrminar un objeto, es prácticamente opencv (tratamiento digital de imágenes)para .net c#. se llama AForge.

monicatorrellas dijo...

No se si te acuerdas pero hace unos días te pedí si me podías enviar el código que utilizaste para calcular las distancias. Te agradecería mucho que me o enviases por favor, solo quería que lo recordases. Si no puedes o es un problema para ti no passa nada.

Muchas gracias!

Miguel Gonzalez dijo...

Hola mónica, he estado muy ocupado, siento no haberte respondido antes, aora voy para una instalación, sin embargo, tengo los dos ejemplos básicos de cómo utilizar el sensor para obtener los datos de rgb(color) y profundidad (depth) debidamente comentariados de forma específica para q te resulte más fácil entenderlo. te los envío al correo. cuando los hayas visto y hayas entendido todo, te envío el de skeleton y una ejemplo general donde utilice todos los complementos y pueds tu iniciarte en el desarrollo de tu aplicación. si tienes alguna duda puedes escribirme sin problema.

saludos