[Cognitive Services] Extendiendo Face API SDK para LargeFaceList

Hasta hace casi un par de años, la Face API de Microsoft Azure Cognitive Services ofrecía como únicas opciones para persistir rostros, las APIs de FaceList y PersonGroup. Esta situación cambió cuando se introdujeron LargeFaceList y LargePersonGroup
 PersonGroupLargePersonGroupFaceListLargeFaceList
Containers
(Free-tier)
1,0001,0006464
Groups
(Free-tier)
1,0001,000,00011
Faces
(Free-tier)
2482481,0001,000,000
 PersonGroupLargePersonGroupFaceListLargeFaceList
Containers
(S0-tier)
1,000,0001,000,000641,000,000
Groups
(S0-tier)
10,0001,000,00011
Faces
(S0-tier)
248 (x cada grupo)248 (x cada grupo)10001,000,000
Pero a pesar de que estos dos últimos tienen grandes ventajas en comparación a las primeras opciones, si a través del NuGet Packages Manager descargamos las librerías oficiales para poder consumir los recursos que nos ofrece la Face API nos daremos cuenta que la implementación de FaceServiceClient no cuenta con las funciones que nos permiten aprovechar esas APIs
Una posible solución para manejar esta limitación es crear una clase que simple y llanamente extienda FaceServiceClient.

Pero antes de compartir una primera versión de esta clase personalizada, entendamos primero el flujo de trabajo con LargeFaceList, que es sobre el cual trabajaremos en esta publicación. Todo lo que tenga que ver con LargePersonGroup lo trabajaremos en otra ocasión.

Listar y Crear

Si queremos conocer cuantas listas tenemos activas en nuestra suscripción o cuantos rostros hay registrados dentro de una de ellas necesitamos basarnos en la documentación de LargeFaceList – List y LargeFaceList – List Face. Y si lo que necesitamos es crear una nueva lista, tenemos que basarnos en LargeFaceList – Create

Agregar rostros y entrenar

Una de las principales diferencias entre el LargeFaceList y el FaceList, es que el primero necesita entrenarse (LargeFaceList – Train) cada vez que se agrega un nuevo rostro (LargeFaceList – Add Face) para que pueda ser útil. Si hay más de una rostro en la imagen que deseamos agregar, el parámetro targetFace nos ayuda especificar a través de coordenadas en la imagen qué rostro deseamos agregar, si lo dejamos nulo significa que solo hay un rostro en toda la imagen. Por último vale mencionar que el entrenamiento no necesariamente es inmediato luego de enviar la solicitud.

Encontrar similares

Finalmente toca el turno de encontrar rostros similares en nuestras listas largas a partir de una imagen de nueva. Antes de hacer esto debemos comprobar el estado del entrenamiento de la lista larga, caso contrario estaríamos trabajando con un recurso que no esta listo. Una vez realizada esta comprobación, que por cierto no siempre tenemos que hacer, ya podemos emplear el Face – Find Similar. Vale mencionar que la Face API estará esperando un FaceId como primer parámetro y para poder obtener uno debemos utilizar el Face – Detect.

CustomFaceServiceClient.cs

Explicado todo esto, solo queda compartir una versión del CustomFaceServiceClient e invitar a continuar la construcción de esta clase tomando en consideración LargePersonGroup.

Agregue un comentario

Su dirección de correo no se hará público.