Simon Says

Inspiración

"Simón dice" es un juego infantil en el que los jugadores reproducen los comandos de "Simón". Cuando Simón "dice" que se haga algo, uno debe reproducir la acción, pero cuando Simón no da ningún comando, no se debe hacer nada.

Dato divertido: el récord mundial del Guinness para un juego de "Simón dice" fue de 12 215 personas que jugaron el 14 de junio de 2007 en el evento Utah Summer Games. 

Qué hace

Nuestro proyecto está creando una plataforma de "Simón dice" basada en aprendizaje profundo en la que todos pueden acceder al mismo juego internacional con DeepLens para comprobar la acción correcta de cada jugador.

Cómo se desarrolló

Usamos dos proyectos de código abierto, Openpose y mxnet Realtime Pose Estimation, que nos permitieron desarrollar nuestra aplicación. Empezamos optimizando un modelo con entrenamiento previo para ejecutarlo en el motor de inferencias de aprendizaje profundo de Intel. Usamos este modelo para generar un mapa de poses que mostrase la posición del cuerpo. Utilizamos el mapa de poses para clasificar una red menor que generase como resultado la acción de los jugadores.

La red internacional del juego se creó sobre la arquitectura sin servidor de AWS. Empezamos iniciando un evento de CloudWatch por minuto que activa una serie de funciones de Lambda para generar un juego. Una vez que se genera un juego nuevo, se envía a cada dispositivo con el servicio de mensajes de IoT. El dispositivo puede usar este mensaje para descargar los archivos de audio necesarios, generados con AWS Polly, para iniciar el juego. Creemos que esta arquitectura nos permitirá ajustar la escala para poder admitir un mayor número de dispositivos.

Desafíos

Enfrentamos varios desafíos mientras creábamos nuestro proyecto. El más importante fue convertir el modelo al motor de inferencias de Intel. Para empezar, convertimos un modelo MXNet con el convertidor de Python, pero se generaron varios errores relacionados con la falta del atributo axis para la capaconcat. Después de resolver esos errores, nos atascamos con Test failed: This sample accepts networks having only one output,  (Prueba fallida: Esta muestra acepta redes que tengan solo un resultado), lo que significaba que debíamos reestructurar la capa de resultados final u omitir la ejecución en la GPU. CORREGIDO en la versión 1.2.2 - Foros de AWS Support

Logros de los que estamos orgullosos

Muchas veces pensamos que el proyecto era una causa perdida. Como el modelo no optimizaba ni interpretaba los resultados, el camino para lograr una demostración funcional parecía bastante difícil. La primera vez que vimos la fuente del proyecto en funcionamiento con el mapa de poses subyacente fue el punto en el que finalmente supimos que podíamos terminar lo habíamos empezado.

Descargo de responsabilidad

El proyecto no está destinado al uso comercial y debe respetarse la licencia original

Pasos siguientes

A corto plazo, nos gustaría habilitar la detección de varias poses para que un grupo de jugadores pueda usar el mismo dispositivo. Si bien el modelo ya está configurado para hacerlo, necesitamos implementarlo en el juego; para una demostración era más sencillo realizar una configuración para un solo jugador.

A largo plazo, imaginamos un círculo de entrenamiento y clasificación en el que, de manera aleatoria, el sistema solicite al jugador realizar una nueva acción. A continuación, podríamos tomar la pose generada y actualizar el peso de las clasificaciones.

Si pensamos de una manera más amplia, este proceso de estimación y clasificación de poses tiene muchas aplicaciones posibles: el monitoreo de niños, la detección de robos, otros tipos de juegos como de baile o, inclusive, el entrenamiento deportivo. 

Desarrollado con

python
amazon-web-services
deeplens
motor-de-inferencias-de-aprendizaje-profundo-de-intel
mxnet
caffe
aprendizaje-profundo
aws-polly
aws-lambda
iot
aws-api-gateway
aws-athena

Probar