NetCoreConf Barcelona 2020

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 he hecho junto con mi gran amigo Diego Zapico. Este evento, el primero de la temporada 2020, ha contado con un plantel de lujo y ha puesto 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 ha sido 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, parece que todas las sesiones han sido grabadas y podremos disfrutar de ellas en diferido y recuperar lo que nos haya impactado.

La demo

En esta ocasión, Diego y yo nos hemos decantado por crear una solución integral que aúne 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 lo hemos construido en un tiempo récord y pese a la distancia y al poco tiempo del que disponíamos para organizarnos tras mi jornada laboral y, también todo ello ha sido posible a las facilidades que ofrece desarrollar con .Net Core y Visual Studio 2019.

Cerberus

Cerberus es el nombre que le hemos dado 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.

Diagrama de arquitectura de Cerberus

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 hemos usado 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 enviaremos al usuario vía correo electrónico.

Face Api

Face Api es otro servicio cognitivo de la categoría Vision que hemos usado para, una vez hemos hecho el preprocesamiento con Computer Vision Api, 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, hemos implementado 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

Materiales

Aunque el código aún no lo haremos público porque queremos ampliar primero con algunos servicios más, sí que hemos puesto a vuestra disposición las slides que usamos en el evento. Además, ya está disponible el vídeo de nuestra sesión.

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 pudísteis asistir y a los que no, os invito a ver la grabación que pronto estará publicada.