Dog Park
Inspiración
Quería saber con qué funciones listas para usar contaba AWS DeepLens. La mayoría de los usuarios nuevos de DeepLens tendrá poca experiencia en aprendizaje automático o aprendizaje profundo. Amazon SageMaker es una herramienta eficiente, pero se demora un poco en alcanzar un buen ritmo de trabajo. Por ese motivo, quería saber qué se podía hacer con las aplicaciones de muestra. Descubrí que se puede hacer bastante.
Qué hace
Dog Park ejecuta un modelo "hotdog o no hotdog" y registra las probabilidades para las coincidencias más altos. A continuación, examina la coincidencia más alta para verificar si es un perro. Esto se realiza mediante la búsqueda de coincidencias en el subconjunto de 1000 categorías de perros. Si el resultado es positivo, verifica la probabilidad. Si es mayor a un cierto umbral (definido de manera arbitraria en 0,5), entonces asegura que ha encontrado un perro. Luego, busca en la próxima coincidencia de categoría y determina si es un perro. De ser así, graba la imagen de tamaño completo (no el fotograma más pequeño sobre el cual se realiza el reconocimiento) en un bucket de S3 y escribe la URL de la imagen y las dos probabilidades de raza principales en un tema de MQTT. Es posible monitorear los resultados en la consola de AWS IoT. Una segunda función de Lambda (escrita en Node.js) llamada DogParkNotifier recibe el mensaje del tema y extrae los campos correspondientes con una instrucción SQL. Se les da formato a los campos para restringir la probabilidad a un número entero y se los envía al usuario con SNS. A continuación, el envío se puede realizar por email o mensaje de texto SMS. Es necesario realizar un paso adicional (crear un tema y verificar el email) para configurar el recorrido del email.
El resultado más visual es el envío de un mensaje de texto SMS al teléfono, donde se presenta la imagen del perro junto con los resultados de probabilidad. Es bastante sorprendente recibir un resultado tan solo unos segundos después de apuntar la cámara de DeepLens a un perro.
Lo que me pareció interesante es que las probabilidades cambian con cada fotograma. Como es muy raro que los perros se queden quietos, las probabilidades de reconocimiento cambian, algunas hasta un 10 %, en función de los movimientos del animal.
A las personas les interesa formar parte de un experimento tecnológico. Estaban muy interesados en saber qué decía Deep Lens sobre sus perros.
Autor: Dan Brennan
Cómo se desarrolló
Empezamos con la aplicación de muestra que utiliza el modelo "hotdog o no hotdog". Descubrí que podía reconocer una amplia variedad de razas de perros y consideré que sería un caso de uso excelente para los principiantes. El código que creé se puede reutilizar con facilidad. El usuario debe tener una cuenta de AWS, crear un bucket de S3 en la misma región en la que se implementarán las funciones de Lambda, definir el rol de IAM en el bucket de S3 e incluir un rol de IAM en la función de Lambda que cuente con los privilegios necesarios. Tiene marcadores de posición para [YOUR_BUCKET_NAME]. También se debe obtener acceso a la aplicación de muestra con el modelo "Hot Dog o no Hot Dog" de DeepLens.
La función de Lambda DogParkNotifier es la segunda parte de la aplicación. En esta sección, es posible usar el número telefónico o la dirección de email del usuario para enviar notificaciones de SNS.
Desafíos
Creé más de 100 compilaciones para llegar a esta versión de demostración. Sinceramente, me llevó más de 100 horas durante cuatro semanas. Fue una curva de aprendizaje enorme. Me llevó un poco de tiempo acostumbrarme a la depuración de código de Lambda en Python. El dispositivo DeepLens se registró rápidamente. Las instrucciones eran buenas. Simultáneamente, aprendía sobre Node.js para DogParkNotifier. Además, por supuesto que se me presentó el error de actualización automática de sistema operativo, que provocó que la conexión de wifi fallase. Sin embargo, el equipo de AWS para DeepLens me proporcionó una solución rápidamente.
Uno de los desafíos era determinar de qué manera se le suministraría energía a DeepLens para poder usarlo al aire libre. Probé con una batería de CC, como la que se usa para cargar los celulares, pero el amperaje de salida era de 3,2 A y DeepLens necesita 4,0 A. El sistema intentaría cargarse, pero fallaría después de transcurridos algunos segundos. Encontré otras baterías CC en el mercado con una salida de 4,8 A, pero tenía miedo de quemar el DeepLens. Entonces opté por la opción más segura, el suministro de energía de CA. La ventaja es que almacena mucha energía y logra que DeepLens funcione durante al menos 10 horas. La desventaja es su gran tamaño. El costo fue de 79 USD, un poco más de lo que hubiera gastado en una batería de CC.
Después de unos cientos de mensajes, mi proveedor de telefonía (Verizon) bloqueó los mensajes de texto entrantes que provenían de Dog Park. No pude restablecer ese valor y no hay documentación de Verizon en relación con este límite. AWS intentó transmitir los mensajes e informó un error total por parte de la compañía telefónica en relación con la entrega. La solución fue entregar el mensaje por email.
Hubo factores climáticos que afectaron la cantidad de pruebas que pude realizar. El clima estaba muy frío en Nueva Jersey y nadie salía a pasear sus perros. Luego, hubo varios días de lluvia constante a pocos días de que finalizara el certamen. Sin embargo, pudimos salir al parque dos veces y los resultados fueron sorprendentemente precisos.
Otro problema fue la conectividad a Internet. DeepLens necesita conexión a Internet para enviar imágenes a S3 y completar el tema MQTT. Mi teléfono funcionó como punto de acceso wifi y como receptor de los mensajes de texto. Lo que descubrí fue que la conexión con punto de acceso wifi se cerraba cuando no había demanda y DeepLens no hacía intentos para volver a conectarse. La solución fue doble. Traje un iPad y lo configuré para que utilizase el punto de acceso wifi. Por algún motivo, el iPad conserva activa la conexión con el punto de acceso wifi en mi teléfono y eso permite que DeepLens permanezca conectado. En segundo lugar, quité las conexiones inalámbricas opcionales del sistema Ubuntu de DeepLens. Tenía una conexión inalámbrica de alta velocidad para las tareas de desarrollo y una para el punto de acceso wifi destinada al uso remoto. Cuando el punto de acceso wifi quedaba fuera de alcance, el dispositivo intentaba reconectarse a la red wifi de alta velocidad, lo que por supuesto no podía hacer en el parque para perros. Y así quedaba, jamás volvía al punto de acceso wifi. Por ese motivo, quité las demás conexiones wifi de la lista antes de salir de casa para ir al parque.
Tuve un problema misterioso: las funciones de Lambda se implementaban en DeepLens, pero la luz de la cámara no se encendía. El archivo de registro de Python del dispositivo no mostraba ningún error. El equipo de AWS (durante una de las #officehours (horas de atención al público)) me sugirió realizar runa prueba:
Escribir lo siguiente en el tipo de sistema de DeepLens: aws_cam@Deepcam:~$ git clone https://github.com/boto/boto3.git aws_cam@Deepcam:~$ cd boto3 aws_cam@Deepcam:~$ sudo cp -r boto3 /usr/local/lib/python2.7/dist-packages aws_cam@Deepcam:~$ sudo pip install awscli –force-reinstall –upgrade
Funcionó. El truco lo hizo la reinstalación de la CLI de AWS.
Logros de los que estoy orgulloso
Lo que aprendí
El futuro de Dog Park
Desarrollado con
lambda
deeplens
python
node.js
s3
amazon-sns