86. Sensor Kinect, inteligencia artificial al alcance de todos

Published: June 28, 2016, 4:52 a.m.

Muchas veces no sabemos la tecnología que tenemos entre manos. A diario tratamos con dispositivos como móviles, tablets, televisiones y demás aparatos eléctricos cotidianos en nuestro día a día. Uno de esos dispositivos es del que te voy a hablar hoy, el sensor Kinect.

Estos dispositivos tienen, en muchas ocasiones, software y hardware que los dotan de cierta inteligencia artificial.

Si escuchas más podcast sobre tecnología, oirás cómo se habla de este u otro aparato, el móvil que acaba de salir de última generación. Estamos acostumbrados a que todos los años se produzcan mejoras tanto a nivel de software como a nivel de hardware.

Es interesante pararse un momento a pensar, ¿qué es lo que hay detrás de una tecnología o dispositivo? Hoy te voy a hablar del sensor Kinect de Microsoft. Voy a destripar este dispositivo para ver la complejidad y el trabajo que puede haber detrás de este aparato eléctrico.

Te invito a que tú también lo hagas. Investiga qué hay detrás de las tecnologías que usas todos los días. No seas solo un mero espectador, intenta comprender el mundo que nos rodea. Puedes empezar por los cursos del Campus de Programarfacil.

Software vs hardware

El software es infinito. Sin embargo, ya podemos tener el mejor algoritmo del mundo que si no tenemos un hardware que se adapte a los requerimientos del software, no nos servirá de nada.

Las cámaras digitales llevan con nosotros mucho tiempo. Desde los primeros prototipos diseñados a principios de los años 70, hasta el primer modelo comercializado, la Daycam Model 1, a principios de los años 90.

En la actualidad encontramos diferentes tipos de cámaras digitales, con más o menos prestaciones. Pero lo que realmente ha cambiado la forma de entender la fotografía digital, ha sido la evolución del software que se esconde detrás de las cámaras digitales.

Raro es el dispositivo móvil que no puede reconocer las caras en su pantalla a la hora de hacer una foto. Encontramos imágenes panorámicas, en 3D, fotografías de alto rango dinámico HDR (del inglés High Dynamic Range) y multitud de funcionalidades más.

Existe una estrecha vinculación entre el software y el hardware. Lo realmente interesante es mantener esta balanza equilibrada. Por mi experiencia, puedo asegurar que se pueden reducir los costes de un proyecto, poniendo la atención en el software y minimizando los recursos del hardware.

Como conclusión podemos decir que, no hay hardware que haga bueno un software pero si hay software que hace bueno a un hardware. El caso del que voy a hablar hoy, es un fiel exponente de esta situación.

¿Qué es el sensor Kinect?

El sensor Kinect fue diseñado para cambiar la manera de jugar con las videoconsolas en los hogares. Fue el primer dispositivo que permitía manejar una consola, sin el contacto directo con un mando. Solo a través de sus sistemas visuales somos capaces de controlar las funcionalidades del dispositivo.

Vió la luz en el años 2009, en la Electronic Entertrainment Expo 2009. Su nombre original fue “Project Natal”. Se puede definir como un controlador de juego y entretenimiento libre y su creador fue Alex Kipman. Microsoft decidió desarrollarlo para la videoconsola Xbox 360.

En el año 2011 salió la segunda versión para PC con Windows 7 y Windows 8. La característica que lo hace diferente, es la capacidad de reconocer gestos, comandos de voz y objetos en imágenes.

Se trata de una tecnología innovadora, detrás de la cual hay una combinación de cámaras, micrófonos y software. Todo esto está contenido dentro de Kinect.

Partes básicas del sensor Kinect

Cámara de vídeo de color RGB. Funciona a modo de webcam, capturando las imágenes en vídeo. El sensor Kinect utiliza esta información para obtener detalles sobre objetos y personas en la habitación.
Emisor IR. El emisor de infrarrojos es capaz de proyectar una luz infrarroja en una habitación. Según la luz infrarroja incide sobre una superficie, el patrón se distorsiona. Esta distorsión es leída gracias a su otro componente, una cámara de profundidad.
Cámara de profundidad. Analiza los patrones infrarrojos emitidos por el emisor y es capaz de construir un mapa 3D de la habitación y de todos los objetos y personas que se encuentran dentro de ella.
Conjunto de micrófonos. El sensor Kinect tiene incorporado cuatro micrófonos de precisión capaces de determinar de dónde vienen los sonidos y las voces. También es capaz de filtrar el ruido de fondo.
Motor de inclinación. Este motor tiene la capacidad de ajustar sobre la base, el sensor Kinect. Es capaz de detectar el tamaño de la persona que está delante, para ajustarse arriba y abajo según convenga.
Todo viene perfectamente ensamblado en una barra horizontal de unos 28 cm, sobre una base cuadrada redondeada donde se apoya.

kinect-versiones

Pero lo que realmente dota a este dispositivo de inteligencia, es el software. Kinect es capaz de capturar una cantidad increíble de datos. Siempre fijando su objetivo en las cosas que se mueven en su entorno. Gracias al procesamiento de estos datos a través de una algoritmo de inteligencia artificial y a métodos de aprendizaje de máquinas, Kinect puede llegar a mapear los datos visuales que obtiene a través de sus sensores.

El objetivo es ser capaz de detectar a los seres humanos y entender en qué posición se encuentra cada persona detectada.

Software

Una vez que los sensores captan la información, son inmediatamente procesados por un software de inteligencia artificial. Es capaz de clasificar los diferentes objetos que hay dentro de una escena. Reconoce a los seres humanos por su cabeza y extremidades.

Kinect entiende cómo se mueve un ser humano y asume, por ejemplo, que somos incapaces de girar la cabeza 360º y demás acciones imposibles que podemos realizar. Esto es muy sencillo para nosotros, pero para una máquina conlleva un periodo de aprendizaje largo.

A este tipo de aprendizajes se le conoce como aprendizaje de máquina o machine learning en inglés. Consiste en analizar una cantidad ingente de datos de la vida real, para encontrar patrones. Así es como aprendemos los seres humanos, a base de observar y aprender.

Kinect captura el movimiento de las personas a través de más de 48 puntos de articulación. Esto se lleva a cabo a través de un algoritmo bastante complejo, que tiene en cuenta múltiples factores.

No voy a entrar en detalle de cómo funciona esta parte del software. Primero, porque no es objeto de este artículo y segundo porque es demasiado complejo. Solo voy a citar los pasos que sigue hasta conseguir entender la posición del cuerpo humano.

Construir una imagen de profundidad a través del emisor de IR y la cámara de profundidad. Esto se hace por triangulación, igual que cuando se calcula la distancia a la que están las estrellas fuera del sistema solar.
Detectar las partes del cuerpo de una persona. Este se hace utilizando un árbol de decisión. Los patrones para tomar esas decisiones se obtuvieron en la fase de aprendizaje con más de un millón de ejemplos.
Esto es una manera muy abreviada de cómo funciona el algoritmo. Detrás de todo esto existe una base matemática muy extensa. Se utiliza probabilidad y estadística, cálculos de multivariable, álgebra lineal, análisis complejo, algoritmos de grafos, geometría, ecuaciones diferenciales, topología, etc...

Crea tu propio proyecto con Kinect

Lo primero es comprar un Kinect. Lo encontramos desde 38€ usado en Amazon. Te dejo a continuación una serie de enlaces donde comprar con diferentes precios.

Kinect V1 (desde 39 €)
Kinect V2 (desde 80 €)
Existen varias alternativas a la hora de utilizar Kinect en nuestros proyectos. La mejor y más óptima sería trabajar con la SDK que ofrece Microsoft para los desarrolladores.

Existen dos SDK dependiendo de la versión de Kinect que tengas. La versión 1.8 para Kinect v1 y la versión 2.0 para Kinect v2.

Puedes desarrollar aplicaciones con Kinect dentro del Visual Studio con los lenguajes nativos de Microsoft C# y Visual Basic.

Existen otras alternativas más “sencillas”. Una de ellas es trabajar con Processing. Para ello necesitamos configurar nuestro equipo. Debemos poner especial cuidado en la SDK y en lo drivers. Otra opción sería programar con Python.

Muchas gracias a todos por los comentarios y valoraciones que nos hacéis en iVoox, iTunes y en Spreaker, nos dan mucho ánimo para seguir con este proyecto.