El poder de Kinect para Windows
Hola, mi nombre es Gavin Gear, y estaré por aquí, en el blog Extreme Windows. Mi experiencia incluye trabajar en el equipo del sensor Windows (vean pláticas recientes de BUILD aquí), y antes de Microsoft me gradué como Ingeniero Mecánico. Algunas de las cosas que disfruto son la fotografía de estudio, producción de video, construir PC, escribir aplicaciones, e inventar/fabricar/arreglar. Espero traerles historias en las que Windows sea un protagonista esencial en experiencias extremas, y para comenzar creo que estaría bien hacerlo con un rápido proyecto de Kinect para Windows. ¡Aquí vamos!
Gavin en BUILD en 2011
¿Qué es Kinect para Windows?
Todos conocemos Kinect: el sorprendente dispositivo externo para Xbox 360 que permite jugar con la consola y tener otras experiencias sin controles. Es fascinante descubrir cómo este dispositivo utiliza micrófonos de matriz, un patrón de punto IR proyectado, una cámara IR y una cámara RGB regular para captar el ambiente que lo rodea. Con esta información, el sensor Kinect puede aislar y grabar sonidos, generar un mapa a profundidad del cuarto, y construir modelos en 3D de rostros humanos y esqueletos. Es justo decir que Kinect cambió el juego.
El patrón de punto IR de Kinect visto a través de una cámara DSLR modificada
Kinect para Windows se trata de permitir que las Windows PC aprovechen Kinect. El SDK de Kinect para Windows 1.5 y el Toolkit se lanzaron en mayo de 2012, e incluyen drivers de Windows para el sensor Kinect, un SDK completo (Kit de Desarrollo de Software) un toolkit (código muestra, herramientas y documentación de soporte.
Aquí una lista de lo que necesitas para comenzar a escribir aplicaciones
- Sensor Kinect *
- Windows PC con Windows 7 o posterior OS Windows
- Visual Studio (Express o completo)
- Descargas Kinect para Windows (SDK y Toolkit)
*Existen en la actualidad dos sensores Kinect que trabajan con el SDK y el Toolkit de Kinect para Windows:
El sensor Kinect para Xbox 360 (dice “XBOX 360” en el frente) – estos dispositivos están autorizados para propósitos de desarrollo, y no soportan el “Modo Cercano”. Esto es lo que utilicé para esta entrada de blog.
El Sensor Kinect para Windows (dice “KINECT” en el frente) – estos dispositivos están optimizados para experiencias en Windows, y están autorizados para uso con Windows PC, y también soportan el “Modo Cercano”.
Los desarrolladores pueden utilizar cualquier sensor para comenzar, pero los desarrolladores necesitan estar en un sensor Kinect para Windows que puede ser comprado en línea aquí. Si te interesa experimentar con, e integrar experiencias Kinect en tus proyectos (y espero que así sea), te recomiendo elegir el sensor Kinect para Windows para que tengas acceso a todas las posibilidades de desarrollo habilitadas en este dispositivo optimizado para PC. Sin embargo, si cuentas con un Kinect para Xbox en tu sala de estar ¡Úsalo!
Ya tenía ganas de escribir una aplicación Windows Kinect. La primera idea que me vino a la mente fue experimentar con detección de presencia humana, algo que investigué mientras trabajaba en la plataforma del sensor de Windows. Parte de esa exploración incluía escribir una aplicación que controlara las experiencias de Windows en términos de un sensor IR de proximidad reflectante de larga distancia. Estos sensores IR reflectantes tienen sus limitantes, una de ellas es que no pueden distinguir entre objetos inanimados (como sillas de oficina) y humanos. Me he preguntado cómo un sensor más poderoso como Kinect podría mejorar la precisión de la detección humana para espacios como las oficinas. ¡Ahora es momento de saberlo!
Reto de aplicación: Kinect como sensor de presencia humana
Me decidí a tomar un reto: En menos de un día, buscaría escribir una aplicación funcional que detectara la presencia humana a través de Kinect con un poco de código C# que había escrito con anterioridad. Este código existente no incorporaba Kinect, y no tenía experiencia con el SDK de Kinect. Este sería un buen reto porque además de escribir la aplicación, también necesitaría documentar todo el proceso en video a través de múltiples cámaras. ¡Suena divertido!
Comencé el día con el SDK de Kinect 1.5 y el Toolkit instalado en caja Windows 7 y un sensor Kinect que aún estaba en su caja. Casi no había cruzado palabras con el equipo de Kinect para Windows para obtener ideas sobre cómo detectar la presencia humana con Kinect. Para citarlos, me dijeron “Da un vistazo al rastreo de rostro, esqueleto y profundidad”. No tenía un código de Kinect en este punto (más que los ejemplos del SDK), y tampoco ligas o documentos o cualquier otra referencia.
Preparándome
De mi experiencia con Kinect para Xbox 360, sabía que necesitaría cerca de 4 a 6 pies de distancia entre el sensor y mi persona (sin embargo esta distancia es sólo de 400mm con el dispositivo Kinect para Windows). Lo primero que hice fue “montar” el sensor sobre y detrás de mis monitores en una orientación en la que pudieran “mirar hacia abajo” cerca de 10 grados hacia mí cuando estuviera sentado. La meta era maximizar el campo de visión y distancia y minimizar la obstrucción de los monitores.
Colocación del sensor Kinect en mi estación de trabajo
A manera personal creo que podría tener un poco de crédito extra por utilizar algunos de los materiales de empaque del sensor Kinect (columna de cartulina para soportar el sensor) para mejorar su configuración. Pensaré en una base más sólida para uso permanente.
Una vez que el sensor contaba con energía y estaba conectado a la PC, era momento de validar que todo trabajara de manera correcta. Corrí algunas de las muestras SDK del toolkit y en unos minutos ya era capaz de correr algunos de los escenarios clave.
Tomas de pantalla de las muestras del SDK Kinect – Básicos de esqueleto (izquierda, muestra posición de pie), Básicos de Rastreo de Rostro (derecha, mientras estoy sentado en el escritorio)
Pasé alrededor de 10 minutos en la improvisación del montaje y para correr los acordes, y cerca de 5 minutos reproduciéndolos. Así que con 15 minutos dedicados al proyecto, estaba listo para comenzar a leer documentos y escribir código.
Entrar en el código
Lo admitiré – no seguí el enfoque de libro de texto de leer documentación y luego escribir el código. En lugar de eso, comencé en Visual Studio, exploré las API con Intellisense (una herramienta de exploración de código) y leí documentación para cosas específicas que necesitaba. Esto resultó ser una forma efectiva de ahorrar tiempo para desarrollar este prototipo.
Tuve un problema al inicio cuando intentaba controlar el ángulo de elevación del sensor Kinect (inclinación). Cuando corrí la aplicación por primera vez, aparecía el siguiente mensaje de error:
Invalid Operation Exception: “Kinect must be running to control the motor” (Excepción Inválida de Operación: “Kinnect debe corer para controlar el motor”)
Si tan solo todos los mensajes de error fueran tan descriptivos. Este mensaje me dio la pista que necesitaba para “arrancar” el sensor antes de utilizarlo. Agregué el código necesario, corrí de nuevo la aplicación, ¡Y el sensor se inclinó! Me emocioné un poco al ver que mi aplicación controlaba una pieza de hardware en tan poco tiempo. El término “satisfacción instantánea” me vino a la mente.
El siguiente paso era conseguir que Kinect detectara la presencia humana. Correr las muestras del SDK resultó ser una gran forma de “visualizar” el tipo de datos que Kinect expone a los desarrolladores. Por lo que vi, decidí utilizar los datos del rastreo de esqueleto porque ofrecía una buena detección de presencia humana.
La lógica que escribí para controlar las experiencias Windows es muy sencilla, y está basada en el número de esqueletos rastreados en cualquier momento (humanos a la vista del sensor Kinect). Cuando cambia el número de humanos detectados, el código que escribí hace lo siguiente:
Cero personas: Pausa medios (si están en reproducción), bloquea estación de trabajo
Una persona: Reproduce medios (si no lo hace ya)
Más de una persona: Pausa medios (si están en reproducción)
La aplicación simple de UI (Interfaz de Usuario) muestra una representación numérica de la cantidad de esqueletos rastreados (humanos presentes), y cuenta con casillas de verificación para permitir que se puedan activar o desactivar características disponibles.
Es obvio que esta aplicación UI no ganará ningún premio de diseño, pero es suficiente para correr estas sencillas demos. Con la UI en su lugar era tiempo de probar la reproducción y pausa de medios. Con la aplicación en funcionamiento, comencé a reproducir un mp3 en Windows Media Player, activé la característica de reproducción/pausa, y salí de mi oficina. La música se detuvo. Cuando entré y me senté de nuevo, la música comenzó a reproducirse. Esto era muy divertido. Después de esto, sólo era cuestión de agregar la característica de “bloquear estación de trabajo”. Pasar cerca de 90 minutos en la escritura de código, leer documentación, buscar en internet, y correr pruebas básicas, ahora estaba a 1:45 del tiempo total del proyecto. Después, cuando uno de mis amigos paró en mi lugar pude probar la característica “pausa mis medios cuando otra persona entre en mi oficina”, impresionante.
Para ver el video del proyecto entren aquí: http://windowsteamblog.com/windows/b/extremewindows/archive/2012/07/11/tapping-into-the-power-of-kinect-for-windows.aspx
Para cerrar
Cuando comencé este proyecto, no estaba seguro de qué esperar. Lo que descubrí es que Kinect para Windows provee a los desarrolladores con un conjunto completo de herramientas, muestras y la documentación y las API son muy sencillas de usar. Lo siguiente que haré con Kinect es conseguir uno de los sensores Kinect para Windows para poder probar mi aplicación en “Modo Cercano”. No puedo esperar a ver más de lo que los desarrolladores lograrán con Kinect para Windows y yo les contaré más adelante algunas ideas que tengo para proyectos adicionales.
Fuentes: