Innovación con AWS Deeplens

Daniel de la Peña
The Cocktail Engineering
6 min readSep 12, 2019

--

AWS Deeplens es la primera cámara de vídeo del mercado dirigida a desarrolladores interesados en el empleo de modelos de aprendizaje profundo. Se trata de un dispositivo con sistema operativo basado en Ubuntu que emplea un procesador Intel Atom, y su cámara incorporada permite al dispositivo ejecutar y evaluar modelos de aprendizaje visuales entrenados con los marcos de trabajo MXNet, Caffe o TensorFlow.

El gran valor de este nuevo dispositivo está en su perfecta integración con el resto de servicios de AWS, que aportan la versatilidad en el desarrollo de proyectos de todo tipo.

Más concretamente, el sistema operativo instalado en la cámara incorpora un runtime de AWS Lambda, el cual es responsable de que la funcionalidad de la cámara sea totalmente programable. Simplemente con la llamada a una función desde Lambda se pueden ejecutar estos modelos de aprendizaje profundo, acceder a un objeto que hemos subido a S3 (servicio de almacenamiento escalable), o tal vez consultar o añadir una entrada a una tabla de DynamoDB… la DeepLens está integrada como dispositivo IoT en el ecosistema AWS Greengrass y puede acceder de forma transparente a cualquier recurso AWS para el cual le hayamos configurado un rol de acceso IAM.

El funcionamiento de la cámara es sencillo y gira alrededor del concepto “Proyecto Deeplens”:

Cada proyecto consta de un modelo entrenado para detectar elementos en imágenes (caras, cuerpos, animales, objetos…) y una función Lambda encargada de llamar al modelo, tomar los datos inferidos y utilizarlos como deseemos. El despliegue de este modelo y su correspondiente función Lambda se realiza mediante AWS Greengrass.

Al encender la cámara esta empieza automáticamente a capturar vídeo. La función Lambda recibe el vídeo y puede procesar cada frame mediante la invocación del modelo, generando así el output de nuestro proyecto. No hay que realizar configuración alguna del hardware de vídeo que incorpora la cámara, que es totalmente transparente a la implementación del código del modelo.

La consola online de Amazon hace que sea muy sencillo desplegar cada proyecto en la cámara. Tan solo tenemos que indicar una función Lambda, el modelo a utilizar y seleccionar en qué dispositivo queremos cargar el proyecto. Además, la consola también permite consultar en remoto los registros de ejecución de todo el proceso, incluidos los outputs de las funciones Lambda.

En The Cocktail hemos tratado de dar con algunas aplicaciones útiles de este dispositivo, dado su gran potencial y simplicidad, por lo que hemos lanzado tres pruebas de concepto a modo de exploración de las posibilidades de esta plataforma.

Proyecto 1: “GateKeeper”:

Con este proyecto podemos hacer que la puerta de nuestra oficina se abra al reconocer las caras de los empleados.

Para conseguirlo, haremos que la cámara suba las caras que detecte a la nube (S3), y con cada una de ellas usaremos Rekognition, el servicio de Amazon de reconocimiento facial, para identificar a la persona y saber si debemos abrir la puerta o no.

El modelo del proyecto, por tanto, se dedicará a la detección facial. La Función Lambda con cada cara detectada irá recortando el trozo de frame que la contiene y subiéndolo como una imagen a S3.

Por otro lado disponemos de otra función AWS Lambda (ajena al runtime Lambda desplegado en la cámara) que se activa cada vez que subimos una cara a S3. Esta función usará Rekognition para analizar los rasgos del rostro y generar un identificador único para esa persona, el cuál se busca en nuestra tabla de empleados almacenada con el servicio de bases de datos DynamoDB. Si en esta tabla aparece ese id (que habríamos generado previamente con Rekognition) habremos identificado a la persona.

Para tener una referencia visual contamos con un frontal desplegado en Heroku al cual enviamos los datos de la persona identificada (nombre, número de teléfono, etc) para mostrarlos por pantalla.

Para abrir la puerta empleamos una nueva tabla en DynamoDB, con el propósito de notificar que hay alguien identificado que quiere entrar en la oficina. Con un pequeño script corriendo en la propia cámara estamos constantemente consultando esta tabla, y cuando se informa de la presencia de una cara conocida, enviará las peticiones pertinentes al sistema de control de accesos a través de nuestra red privada para abrir la puerta.

Hacemos uso también de otra tabla para aspectos de configuración. La función Lambda y el script para abrir la puerta consultarán esta tabla para establecer, entre otras cosas, sus horarios de funcionamiento o entrar en modo de depuración.

Proyecto 2: “Storefront”:

Este proyecto trata de crear un “escaparate inteligente”. En él hacemos uso de las capacidades del servicio Rekognition para poder mostrar a la persona en frente de la cámara publicidad personalizada teniendo en cuenta, entre otras cosas, su edad, género o emociones.

El modelo y función Lambda de inferencia son exactamente los mismos que con el proyecto anterior, pero esta vez la segunda función Lambda, la que se activa con cada cara subida a S3, en vez de generar índices únicos y tratar de identificar la persona usa Rekognition para analizar el rostro, enviando información sobre la edad, género, emociones, gafas, vello facial y mucho más al frontal.

El frontal, al recibir estos datos, los analiza y muestra una imagen con el producto que considere más ajustado a los rasgos de la persona. Junto con esta imagen se muestran todos los datos recibidos con información sobre el rostro, un emoji que cambia teniendo en cuenta las emociones de la persona y la imagen con la cara subida a S3.

Proyecto 3: “Posetracker”:

Manejar la reproducción de un vídeo simplemente con gestos corporales es algo que podemos realizar de manera relativamente sencilla con nuestro AWS Deeplens.

En este proyecto, nos hemos hecho con un modelo (Intel Optimized Realtime Pose) entrenado para detectar figuras humanas, específicamente para dar con las coordenadas en pantalla de las posiciones de cada parte del cuerpo.

Conociendo estas posiciones el modelo realiza una predicción de la postura de la persona en frente de la cámara.

De esta manera, la Función Lambda del proyecto va analizando cada frame, enviando en cada caso la predicción que ha hecho el modelo y también las coordenadas de los puntos corporales al frontal.

En el frontal (desplegado también en Heroku) contamos con un reproductor de vídeo que vamos a manejar con la pose que estemos haciendo:

Si la persona junta las manos parará o reanudará la reproducción, si levanta la mano derecha subirá el volumen y si levanta la izquierda lo bajará.

Simplemente esperamos a la llegada de los datos. Al recibir la predicción del modelo, la cual nos dice la posición en la que está la persona en este momento, manejamos el reproductor de vídeo y además, empleamos las coordenadas de los puntos corporales para pintar una figura humanoide sencilla y tener una referencia de qué está viendo la cámara en cada momento.

Conclusión

Con estas tres pruebas de concepto hemos sido capaces de manejar un vídeo sin tocar ningún botón ni pantalla, identificar a empleados para abrirles la puerta de la oficina y además podemos entrar a una tienda y encontrarnos con pantallas que nos informan sobre productos que nos pueden interesar. La nueva cámara de Amazon, con su extensa documentación y su fácil creación y despliegue de proyectos ofrece una gran cantidad de posibilidades.

Con estos proyectos hemos podido comprobar de primera mano cómo el manejo de modelos de deep learning está cada vez aún más al alcance del desarrollador medio, y podemos asegurar que nos espera un futuro con apasionantes y útiles proyectos.

--

--