Seleccionar página

THE AWESOME!

FACIAL
TEMPERATURE
& MASK
DETECTION

chapter one

LET’S MAKE TECH

Acompáñanos en esta historia

Al habla nuestro maestro innovador

«El fondo de la iniciativa es compartir con cualquier individuo o empresa que lo necesite, nuestros conocimientos en digitalización y tecnologías, con el objetivo de facilitar la reapertura y vuelta a la actividad después del periodo de confinamiento al que nos hemos visto obligados por la COVID-19»

STAGE#1

La fase ocurrencia

STAGE#2

La fase cacharreo

STAGE#3

La fase oh!

STAGE#4

La fase duda

STAGE#1

also known as
LA FASE OCURRENCIA

Oye una cosilla: por qué no…

«Vete por ahí», «qué dices» o «con la que tenemos encima» hubiesen sido respuestas adecuadas a la sugerencia de Jesús, nuestro Jefe de Innovación. Pero nos pareció mejor «ya estás tardando»

La idea es sencilla y directa: vamos a diseñar y construir un dispositivo capaz de medir la temperatura superficial de una persona, y de detectar si lleva colocada una mascarilla. Fácil, ¿verdad? Pero qué hay de nuevo en eso. Lo nuevo es que lo vamos a hacer con dispositivos sencillos y tecnologías Open Source. Lo nuevo es que lo vamos a compartir con la comunidad para que cualquiera pueda utilizarlo y por supuesto mejorarlo a un coste mínimo. Lo nuevo es que lo vamos a hacer con todo el cariño del mundo.

Pero qué necesitamos, por dónde empezamos. La receta es humilde: una Raspberry Pi, una cámara común, una cámara IR, una pantalla táctil y una carcasa de diseño propio que convierta toda esa amalgama tecnológica en una cosa muy coqueta.

¿Y cómo va a funcionar? Habrá que hacer un software que lo orqueste todo, ¿no? Configuración, modelo de aprendizaje, gestión de imágenes, detección, etc. Lo que suele llamarse «la magia», al fin y al cabo. De todo eso hablaremos más adelante.

Pues manos a la obra: se planifica y crea el proyecto en Jira, se reparten las historias de usuario y se empieza a palpar la ilusión. Rastreamos un poco Internet para la compra de nuestros nuevos amigos… y ¡tachán! comienza el juego.

 

Si hay un canal específico en Slack, es que esto va en serio

En un día ya empiezan a salir cosas. Esto pinta bien

Hay modelos que empiezan a resolver problemas de detección

Pero sabemos a lo que nos enfrentamos. ¡Hay mucho por hacer!

La búsqueda del Grial

Comienza la búsqueda y adquisición de los distintos cacharritos que conformarán nuestro dispositivo. Y no es fácil. Hay mucha gente haciendo cosas locas, y eso se nota en el stock. No obstante, conseguimos que vayan llegando nuestros nuevos amigos.

STAGE#2

also known as
LA FASE CACHARREO

Tal y como adelantábamos en el primer capítulo de esta aventurilla, la receta es bien sencilla. Para poner en marcha el tema, necesitaremos: una Raspberry Pi, una cámara térmica, una cámara de toda la vida, y una pantalla táctil.

Optamos, como no, por las nuevos modelos de Raspberry Pi 4 Modelo B, un ordenadorcito nada desdeñable: potente y hasta de 4GB de memoria, ojito. En cuanto a las cámaras, nada del otro mundo (¡las cosas no son tan complicadas!), la Raspberry Pi Camera Module v2 para hacer fotitos y capturar vídeo, y la Adafruit MLX90640, un chisme muy coqueto que captura el calor de las cosas. Antes todo eso era de ciencia ficción, hoy en día fijaos a qué se reduce (los dedos no son de James Bond ni de ningún espía secreto, son de Jesús).

Por último, en cuanto a la pantalla táctil, otra elección sencilla: Raspberry Pi Touch Display. Con esto y un bizcocho, tenemos un aparato de lo más completo y funcional, hasta con una pantallita para que el usuario pueda hacer sus cosas.

La conexión de los distintos componentes a la Raspberry es bien simple: cable, cable y cable. No obstante, ¿vamos a dejar todos los elementos «al aire»? La respuesta evidentemente es no. Vamos a diseñar una carcasa propia que se ajuste a las necesidades y empaquete todos los cacharritos de una forma elegante y personal. ¡Y que se pueda fabricar con impresoras 3D!

Con este panorama, ya tenemos el dispositivo listo para la acción. ¿El siguiente paso? Comenzar a trabajar en la magia: el maravilloso software que hará funcionar todo esto. Para nuestro truco, necesitaremos Deep Learning. Pero eso para el próximo capítulo.

STAGE#3

also known as
LA FASE OH!

Esto empieza a hacer cosas

Bueno, por dónde empezamos. ¿Qué necesitamos? Detectar caritas humanas. ¿Qué queremos? Comprobar si tienen mascarilla. ¿Y la temperatura? Pues también la quiero saber.

Mientras nuestros compis manitas siguen con la bricomanía (ya veréis los avances sobre el dispositivo tan cuqui que están haciendo), los cerebritos de la operación empiezan a trabajar sobre el software propiamente dicho. En concreto, sobre la magia Deep Learning. Para este truco, necesitamos primero detectar una cara en una imagen y, sobre ella, determinar a través de un modelo de clasificación si lleva o no mascarilla.

Para la detección de caras sobre fotogramas, no hay que reinventar la rueda. Probamos OpenCV con resultados muy buenos. No nos engañemos, la detección de caras no es la panacea de la novedad a estas alturas. Pero ¿y la detección de uso de mascarilla? Eso es harina de otro costal. El objetivo es construir un buen modelo Deep Learning con un buen entrenamiento. Hemos comenzado por trabajar con un banco de 20.000 imágenes, imagen arriba imagen abajo, que creo que Jesús ha clasificado a mano :_____) Las primeras aproximaciones no son nada malas. Aquí lo podéis ver. Pero hay que seguir mejorando, siempre, mucho y bien.

Entra y activa tu cámara para ver los primeros avances. Tranquilo, no pertenecemos a ninguna organización internacional de espionaje y travesuras varias, no almacenamos un solo dato. Y sí, sabemos que la página es mejorable visualmente, pero esto es Deep Learning, no el Museo del Prado

Vale, dejemos a esta gente trabajar sobre ello. Pero, ¿qué hay de la temperatura? Pues también han empezado los jueguecitos. El bichito térmico que utilizamos devuelve una matriz de temperaturas. Lo que tenemos que hacer es quedarnos con la más alta y ya está, qué fácil ¿verdad? Pues no, no es fácil. Pensemos que la detección de uso de mascarilla y de temperatura deben hacerse sobre la misma región de un fotograma, y que tenemos dos cámaras distintas… Reescalado e interpolación, amigos y amigas del riesgo y la aventura.

Ese que sale ahí, aunque parezca increíble, es nuestro compi Pablo. Más allá de que se le da bien esto del cacharreo, parece que sigue con una temperatura corporal adecuada 😀

Probemos un nuevo sabor

Removiendo un poco la arquitectura software que planteamos al inicio. Porque esto es un laboratorio que hacemos porque queremos. ¡Es nuestra pelota y jugamos cuando nos da la gana!

STAGE#4

also known as
LA FASE DUDA

En Sixphere somos muy fans de un supuesto individuo griego, muy sabio según cuentan, que dijo que «el que nada duda, nada sabe». Fans más que nada porque nos aporta una coartada para no parar de trastear y buscar alternativas. Al principio pensamos en una arquitecturita (en diminutivo, porque usamos Raspberry) muy robusta y clásica. Toda la carga de modelos y procesamiento en backend Python, y el frontend ligerito Electron. Y eso funciona. Pero por qué parar aquí.

Así fue como llegamos a FaceAPI.js y OpenCV.js. Hagamos unas pruebas de rendimiento, porque sin un buen rendimiento esto no tiene sentido. Y porque somos serios y hacemos mediciones. Pero como todo en la vida, nadie dijo que esto fuese fácil. La verdad, no quedamos del todo convencidos.

 

Escenario de prueba En PC En RPi
Haciendo uso de face-api.js con SSD MobileNet 70ms 8000ms
Haciendo uso de face-api.js con Tiny 30ms 1500ms
Haciendo uso de OpenCV.js con SSD RestNet10 320ms 2200ms
Haciendo uso de OpenCV y tflite en Python 270ms

 

Como podemos ver, en RPi hay resultados que no nos vienen muy bien para la solución que pretendemos implementar, seamos justos, y ante esto hay dos opciones: o volver a la arquitecturita original o… mejorar la potencia de la maquinita con algún nuevo cacharro. ¿Cuál elegimos? Pues claro, la segunda opción. Y así fue como se unió a la familia nuestro «Coral Accelerator». Ya os contaremos qué tal va 🙂

STAGE#5 LA FASE BUENO BUENO

TO BE CONTINUED…