Las tecnologías de reconocimiento facial están demostrando ser muy útiles a día de hoy y, sobre todo, dada la actual situación sanitaria. Gracias a ellas podemos identificar rápidamente a una persona con una única imagen de su cara y esto supone una mejora significativa a nivel de seguridad.

Azure ha implementado una serie de servicios que simplifican el uso de esta tecnología permitiendo así que cualquier desarrollador pueda usarlos en sus aplicaciones con mayor comodidad, sin la necesidad de tener que lidiar con sistemas de inteligencia artificial, etc.

Esto es algo muy a tener en cuenta a la hora de elegir si optamos por una solución desarrollada desde cero o si preferimos hacer uso de éstos servicios ya optimizados y empaquetados que nos proporciona Azure. Hay que tener en cuenta que el desarrollo de sistemas de inteligencia artificial capaces de realizar éstas tareas no es algo trivial en términos de esfuerzo y que puede variar considerablemente en base a los conocimientos que posean los integrantes del equipo ya que, éstas tecnologías, no son tan comunes en la mayoría de proyectos de desarrollo y requerirían de una mayor inversión en investigación y estudio.

Los Azure Cognitive Services nos aportan una capa de abstracción muy valiosa ya que nos permiten reducir todo el complejo tratamiento de la inteligencia artificial a unas simples llamadas a una API; además, teniendo la certeza de que esa API es eficaz, eficiente y autónoma (no nos encargaremos de gestionar el hardware que la sostenga).

En este artículo vamos a mostrar una prueba de concepto básica sobre el uso de algunos de los servicios de Azure Cognitive Services, desde la creación de los mismos hasta una demostración básica de su uso; al final del post realizaremos una estimación de gastos para dar un poco de visibilidad a los costes que puede presentar la contratación de estos servicios en Azure con respecto a la implementación desde cero de los mismos.

El servicio que vamos a tratar recibe el nombre de “Face” y está dentro del paquete de “Azure Cognitive Services”. Mostraremos como reconocer a una persona con una imagen de su cara y cómo detectar similitudes entre diferentes caras. Éstos son algunos enlaces muy interesantes que pueden ser de utilidad para la planificación y desarrollo de esta utilidad: API del servicio “Face”, resumen y quickstart y disponibilidad por región.

Creación del servicio (API) de reconocimiento facial en Azure

Para comenzar, crearemos el servicio “Face” en el portal de Azure.

reconocimineto facial azure 1

Tenemos la posibilidad de elegir un tier gratuito para nuestras pruebas.

reconocimiento facial azure 2

Creación de un cliente de consola (.NET Core) para consumir la API

Para consumir la API y mostrar algunas de sus funcionalidades más interesantes haremos uso de un cliente de consola básico desarrollado en .NET Core.

visual studio - creación de proyecto

Es necesario que instalemos el paquete NuGet oficial de la “Face API” para que podamos consumir el recurso recién creado. En el momento de escribir este post, el NuGet sigue en una versión pre-release por lo que recordad habilitar el check de “Include prerelease” en Visual Studio.

visual studio - nuget api Face
Reconocimiento facial con Azure Cognitive Services

Para poder realizar pruebas vamos a usar imágenes de 3 actores famosos, recibirán los nombres de Tony, Peter y Steve. Hemos añadido las imágenes como recursos del proyecto para que me sea más fácil tratarlas.

visual studio - imágenes de muestra

Face API

Antes de comenzar, es recomendable repasar algunos requerimientos básicos de la “Face API” de Azure:

  • Todas las imágenes detectadas para reconocimiento o búsqueda de similitudes serán eliminadas a las 24 horas y tan sólo se almacenará durante ese periodo las características faciales necesarias para aplicar las comparativas. Si se quieren persistir datos es necesario hacer uso de grupos o listas (“FaceList” y “PersonGroup”, se explicarán más adelante).
  • Formatos permitidos: JPEG, PNG, GIF (el primer frame) y BMP.
  • Tamaños permitidos para las imágenes: de 1KB a 6MB.
  • Tamaños permitidos por cara (para que puedan ser detectadas) dentro de la imagen: de 36×36 pixels hasta 1920×1080.
  • Se pueden detectar un máximo de 100 caras por imagen.
  • En la búsqueda de caras similares existen 2 modos distintos:
    • matchPerson: es el valor por defecto, intenta encontrar imágenes de la misma persona si es posible usando determinados parámetros internos, éste método puede ser interesante para intentar detectar imágenes de alguien ya conocido (del que se hayan registrado imágenes previamente en el modelo).
    • matchFace: busca similitudes entre todas las imágenes independientemente de si pueden ser de la misma persona o no. Es el valor que utilizaremos en esta prueba.

Como ya hemos comentado el inicio del documento, probaremos las funcionalidades de reconocimiento facial y búsqueda del grado de similitud entre caras. Para ambas necesitamos crear una instancia de la “Face API” de Azure especificando el Endpoint de la misma y una de las API Keys disponibles. Tanto el Endpoint como las claves se pueden obtener directamente del portal de Azure.

Reconocimiento facial con Azure Cognitive Services

Para la prueba de concepto usaremos una clase padre llamada FaceAPI que unificará la construcción del cliente de la “Face API”.

Reconocimiento facial con Azure Cognitive Services

Para el reconocimiento facial y la búsqueda de similitudes utilizaremos 2 clases distintas que heredarán de ésta última.

Reconocimiento Facial

Una de las funcionalidades más interesantes (y principales) que nos ofrece la API es la de poder identificar/reconocer caras. El modelo se estructura en grupos de personas, es decir, nos permite crear grupos donde iremos creando a su vez nuevas personas y, para cada una de ellas, podremos agregar imágenes de su cara con las que entrenar el modelo. Cuando queramos reconocer una cara en una imagen deberemos especificar el grupo en el que queremos “buscar” a los candidatos.
Al crear el grupo contenedor de personas, debemos especificar un ID que siga un determinado patrón y un nombre.

FaceApiRecognitionConstructor

Después será necesario crear personas dentro de ese grupo y agregarles imágenes de sus caras con las que se entrenarán el modelo.

Reconocimiento facial con Azure Cognitive Services

Reconocimiento Facial

Una vez se haya entrenado el modelo con varias personas y sus correspondientes imágenes, podemos empezar a reconocer caras de imágenes nuevas. Para ello primero necesitamos detectar la cara o caras dentro de la imagen para identificarlas; en este ejemplo controlado siempre cogeremos la primera cara detectada.

FaceApiRecognize

Todas las caras identificadas tienen una serie de candidatos y éstos a su vez presentan un valor de “confianza” que indica el nivel de coincidencias que ha detectado el modelo durante el reconocimiento facial. La confianza se mide de 0 a 1 y cuanto mayor sea su valor, mayor seguridad tendremos de que el candidato es el adecuado. Puede darse el caso en el que la API no sea capaz de reconocer la cara y no nos devuelva ningún candidato.

Reconocimiento facial con Azure Cognitive Services

Aquí podéis observar un ejemplo de ejecución utilizando el código previamente mostrado:

Reconocimiento facial con Azure Cognitive Services
FaceApiRecognitionExecution

Similitudes entre caras

La “Face API” de Azure nos permite comparar una cara con un listado de caras previamente registrado en una lista. El servicio se encargará de comparar determinados aspectos de la cara detectada con todas las imágenes registradas en la lista; devolverá, para cada una de esas imágenes, el grado de similitud que tienen con la imagen a comparar (llamado “confianza”).
En este caso ya no utilizamos la distribución Grupo-Persona que teníamos con el reconocimiento facial, sino que haremos uso de listas.

FaceApiSimilarityConstructor

Una vez tenemos creada la lista, podemos cargar imágenes y entrenar el modelo.

Reconocimiento facial con Azure Cognitive Services

De igual manera que con el reconocimiento facial, primero debemos detectar la cara dentro de la imagen proporcionada y después utilizar la función de búsqueda de caras similares.

FaceApiSimilar

La función devolverá una lista de caras con un grado de confianza para indicar cuál de ellas es más similar a la cara proporcionada. Al igual que con el reconocimiento facial, el valor de confianza varía entre 0 y 1, cuanto más alto sea mayor será la similitud con la imagen proporcionada.
A diferencia del reconocimiento facial, la búsqueda de similitudes siempre devuelve un resultado aunque la confianza sea baja. Aquí tenéis un ejemplo de ejecución del código anterior.

reconocimineto facial azure 3
FaceApiSimilarityExecution

Tiers disponibles y cálculo de costes

Azure nos permite cambiar el Tier contratado en cualquier momento. Ahora mismo sólo existen 2 Tiers para la “Face API”: Free y Standard.

Reconocimiento facial con Azure Cognitive Services

Para un entorno productivo no recomendamos el Tier gratuito ya que se puede quedar corto el número de llamadas a la API, sobre todo cuando se hacen grandes cargas de imágenes (sólo disponemos de 20 peticiones por minuto), además de que no se podrían persistir los datos de las caras en el modelo. Podemos utilizar la calculadora de Azure para hacer estimaciones de los costes aproximados que nos puede llevar este servicio.

Por poner un ejemplo sencillo, una empresa mediana que necesite autenticar (para fichaje, por ejemplo) unos 150 empleados diariamente podría utilizar los siguientes datos como guía de los costes aproximados de utilizar estos servicios ya construidos frente a implementarlos desde cero:

  • 150 empleados
  • 4 imágenes por empleado: se almacenarán 600 imágenes en total)
  • 6 reconocimientos fáciles al día por empleado: entrada a trabajar – salida/entrada para almuerzo – salida/entrada para comer – salida de trabajar. Serán unos 900 reconocimientos por día
  • 5 peticiones a la “Face API” por cada reconocimiento facial: estimamos a la alza unas 5 peticiones por reconocimiento facial basándonos en nuestra experiencia pero esto puede variar mucho dependiendo de la implementación. Esto haría un total de 4500 peticiones diarias, si multiplicamos ésta cantidad por 30 obtenemos unas 135 mil peticiones al mes estimando al alza.
  • Suponemos que el primer mes se duplicará el número de peticiones debido a la carga inicial de datos que es necesario realizar para entrenar a la API con las imágenes de los empleados. El primer mes estimamos unas 270 peticiones.

Aquí podemos ver los precios aproximados que deberíamos afrontar. Para el primer mes:

Reconocimiento facial con Azure Cognitive Services

Para el resto de meses:

Reconocimiento facial con Azure Cognitive Services

Y éste sería un resumen total de costes acumulados en relación al número de peticiones que se realizarán:

Tiempo

Peticiones acumuladas

Coste acumulado (€)

1 mes

270.000

227,70

6 meses

945.000

796,95

1 año

1.755.000

1.480,05

2 años

3.375.000

2.846,25

3 años

4.995.000

4.212,45

 

En lo referente a la implementación desde cero onpremise, hemos tenido en cuenta proyectos públicos de reconocimiento facial y hemos encontrado distribuciones de esfuerzo similares a la siguiente:

 

Planificación inicial

5 días

Revisión del estado del arte

4 días

Análisis (arquitectura, requisitos…)

20 días

Diseño

5 días

Implementación

40 días

Pruebas

7 días

Documentación

20 días

Como se puede ver, la implementación completamente desde cero puede necesitar de unos 40 días. Evidentemente, estos valores son orientativos y pueden cambiar mucho dependiendo de la eficacia que se busque, los conocimientos de los desarrolladores, la calidad/adopción de las librerías externas…, pero nos sirve como base para establecer una comparativa de costes.

Suponiendo que sean necesarios unos 40 días para desarrollar el modelo de reconocimiento facial (teniendo en cuenta un único desarrollador) los costes podrían ascender a 8.640 € (40 días x 8 horas x 27 €/hora) sin tener en cuenta los costes del resto de etapas del proyecto ni del mantenimiento del hardware/software.

Por lo tanto, podemos ver que los costes de realizar únicamente la implementación del reconocimiento facial (8.640 €) ya duplican el coste de utilizar el servicio Face de Azure durante 3 años (4.213 €). Si contabilizamos el mantenimiento del hardware/software la diferencia es aún mayor ya que el servicio Face está completamente gestionado por Microsoft pero en la opción onpremise debe ser mantenido por la propia organización.

Conclusión

La “Face API” de Azure nos permite trabajar cómodamente con tecnologías de reconocimiento facial sin la necesidad de tener que lidiar con inteligencia artificial, redes neuronales, etc. Simplifica el trabajo al desarrollador ofreciendo un servicio confiable y de rendimiento/eficacia asegurados sin tener que preocuparnos por su implementación ni aprovisionamiento. Es una buena opción a tener en cuenta para complementar cualquier sistema de seguridad.

Podéis encontrar el código utilizado en esta prueba en nuestro GitHub, sólo es necesario que creéis vuestro recurso “Face” en Azure y modifiquéis la clase “StaticConfiguration” con vuestro endpoint/apiKey para que podáis ejecutarlo.

Los Azure Cognitive Services también aportan servicios muy interesantes como traducción o análisis de textos, comprensión de lenguajes, reconocimiento de voz, etc. Todos ellos aportan una buena barrera de abstracción y tiers gratuitos para que los desarrolladores podamos jugar sin problema, esto es café para cafeteros 🙂 

Máster en Business Intelligence & Advanced Analytics

Si eres un entusiasta del mundo de los datos y quieres estar al día en las últimas tecnologías analíticas, conviértete en un experto en Business Intelligence con nosotros. 

Quiero saber más
0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like