Eventos

[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

PersonGroup LargePersonGroup FaceList LargeFaceList
Containers
(Free-tier)
1,000 1,000 64 64
Groups
(Free-tier)
1,000 1,000,000 1 1
Faces
(Free-tier)
248 248 1,000 1,000,000

PersonGroup LargePersonGroup FaceList LargeFaceList
Containers
(S0-tier)
1,000,000 1,000,000 64 1,000,000
Groups
(S0-tier)
10,000 1,000,000 1 1
Faces
(S0-tier)
248 (x cada grupo) 248 (x cada grupo) 1000 1,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.

No hay comentarios.:

Publicar un comentario

Epicalsoft — Superheroic Software Development Blog Designed by Templateism.com Copyright © 2014

Con tecnología de Blogger.