El pasado 18 de enero, participé como ponente en uno de los eventos señalados del calendario, NetCoreConf de Barcelona y, como acostumbro últimamente, lo hice junto con mi gran amigo Diego Zapico. Este evento, el primero de la temporada, contó con un plantel de lujo y puso el nivel muy alto para los eventos que están por venir, incluidos el resto de NetCoreConf que se celebrarán en Valencia, Asturias y Madrid.
El evento
Antes que nada me gustaría hablar un poco sobre el evento al que le doy un sobresaliente en organización, localización y selección de ponencias. En esta ocasión pude disfrutar de valiosísimas sesiones y destacaría las impartidas por Carlos Mendible sobre cómo administrar las credenciales que generalmente ponemos en nuestras soluciones y mantenerlas «secretas« y, cómo no, la sesión de mi compañero Adrián Díaz en la que habló sobre buenas prácticas a la hora de desarrollar nuestras APIs REST.
Como siempre, el ambiente fue muy bueno y la acogida por parte de los asistentes inmejorable. Destacaría a los valientes que se animaron a preguntarnos todo tipo de detalles en nuestra sesión. Además, en esta ocasión, las sesiones fueron grabadas y podemos disfrutar de ellas en diferido y recuperar lo que nos haya impactado.
La demo
En esta ocasión, Diego y yo nos decantamos por crear una solución integral que aúna múltiples servicios de Azure como Functions, Cognitive Services, App Service, App Configuration, etc., orquestados gracias a .Net Core 3.1 desde el backend hasta el frontend. Todo ello construido en un tiempo récord (pese a la distancia y al poco tiempo del que disponíamos para organizarnos tras mi jornada laboral) y también, gracias a las facilidades que ofrece desarrollar con .Net Core y Visual Studio 2019.
Cerberus
Cerberus es el nombre que dimos a nuestra solución demo y con la que intentaremos hacer un tour por diferentes eventos mostrando siempre diferentes visiones y servicios, además de ir completando la solución con nuevos servicios y nuevas capas de presentación.
El fin de Cerberus es el de servir como «guardia de seguridad inteligente» recepcionando, procesando y analizando imágenes en las que es capaz de detectar si hay personas y si éstas son conocidas o no gracias a los servicios cognitivos que son llamados desde Azure Functions orquestadas mediante una Azure Durable Function. Posteriormente, el resultado del análisis se almacena en CosmosDB para mantener un registro de lo que hemos ido detectando y, finalmente, se notifica al usuario mediante correo electrónico.
Computer Vision Api
Computer Vision Api es uno de los servicios cognitivos de Azure perteneciente a la categoría Vision. Lo usamos para realizar un análisis previo de las imágenes y detectar si hay personas ya que este servicio nos devuelve si hay caras y algunos detalles generales de las mismas como la posición, el género, etc. En caso de detectar caras, generamos una notificación de información que guardaremos en CosmosDB y enviamos al usuario vía correo electrónico.
Face Api
Face Api es otro servicio cognitivo de la categoría Vision que usamos para, una vez hemos hecho el preprocesamiento con Computer Vision Ap y si se han detectado caras, comprobar si es una de las personas «conocidas» que hemos entrenado. Esta lista de personas conocidas, digamos que es la white list de personas admitidas. En caso de detectar una persona desconocida, generaríamos una notificación de alerta.
Azure Durable Functions y Azure Functions
Azure Functions son «pequeños» fragmentos de código que ejecutan un proceso concreto en un contexto serverless. Así pues, por ejemplo, una function es el envío de un correo electrónico para notificar al usuario, otra se encarga de guardar la notificación en CosmosDB y tenemos sendas functions que envían las imágenes a analizar a los diferentes servicios cognitivos.
Para gestionar todo el proceso, implementamos una Azure Durable Function que orquesta el flujo de ejecución de las diferentes functions y que podría asemejarse a la receta o a pseudocódigo fácilmente entendible sólo con verla.
CosmosDB
CosmosDB es la base de datos que hemos elegido para almacenar la información ya que consideramos que ésta es desestructurada y que podemos sacar un mayor beneficio de guardar las notificaciones como documentos Json que incluyan el resultado del análisis de los servicios cognitivos. CosmosDB es un servicio de base de datos NoSQL que propone Microsoft dentro de su gran oferta de servicios en Azure
Conclusión
Como se puede ver, con pocos servicios y gracias a .Net Core, hemos construido un auténtico guardia de seguridad inteligente que detecte accesos no controlados a las áreas que estemos vigilando. Pronto publicaré el código en GitHub para que podáis ver el ejemplo de lo que hemos montado y podáis aventuraros a probarlo en vuestras casas.
Espero que os haya gustado la sesión a los que pudisteis asistir y a los que no, os invito a ver la grabación.