Compartir vía


Especificación de un modelo de detección de caras

En esta guía se indica cómo especificar un modelo de detección de caras para el servicio Face de Azure AI.

El servicio Face emplea modelos de aprendizaje automático para realizar operaciones en caras humanas de imágenes. Seguimos mejorando la precisión de nuestros modelos gracias a los comentarios de los clientes y los avances en la investigación, y estas mejoras se ofrecen como actualizaciones del modelo. Los desarrolladores pueden especificar qué versión del modelo de detección de caras les gustaría usar; pueden elegir el modelo que mejor se adapte a sus casos de uso.

Siga leyendo para obtener información sobre cómo especificar el modelo de detección de caras en ciertas operaciones de caras. El servicio Face usa la detección de caras cada vez que convierte la imagen de una cara en otro tipo de datos.

Si no está seguro de si debe usar el modelo más reciente, vaya a la sección Evaluación de modelos diferentes para evaluar el nuevo modelo y comparar los resultados con el conjunto de datos actual.

Requisitos previos

Debe estar familiarizado con el concepto de detección de caras de inteligencia artificial. Si no lo está, consulte la guía conceptual de detección de caras o la guía paso a paso:

Evaluación de modelos diferentes

Los diferentes modelos de detección de caras están optimizados para llevar a cabo distintas tareas. En la tabla siguiente encontrará información general sobre las diferencias.

Modelo Descripción Notas sobre el rendimiento Puntos de referencia
detection_01 Opción predeterminada para todas las operaciones de detección de caras. No está optimizado para caras pequeñas, de perfil o borrosas. Devuelve puntos de referencia de la cara si se especifican en la llamada de detección.
detection_02 Publicado en mayo de 2019 y disponible de forma opcional en todas las operaciones de detección de caras. Precisión mejorada en caras pequeñas, de perfil o borrosas. No devuelve puntos de referencia de caras.
detection_03 Publicado en febrero de 2021 y disponible de forma opcional en todas las operaciones de detección de caras. Mayor precisión, también en caras más pequeñas (64 x 64 píxeles) y orientaciones de caras giradas. Devuelve puntos de referencia de la cara si se especifican en la llamada de detección.

Los atributos son un conjunto de características que se pueden detectar opcionalmente si se especifican en la llamada de detección:

Modelo accesorios desenfoque exposición gafas headPose mask noise occlusion qualityForRecognition
detection_01 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ (para recognition_03 o 04)
detection_02
detection_03 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ (para recognition_03 o 04)

La mejor manera de comparar el rendimiento de los modelos de detección es usarlos en un conjunto de datos de ejemplo. Se recomienda llamar a la API Detect con cada modelo de detección en varias imágenes diferentes, sobre todo en imágenes con muchas caras o con caras difíciles de ver. Preste atención al número de caras que devuelve cada modelo.

Detección de caras con el modelo especificado

La detección de caras encuentra las ubicaciones del cuadro delimitador de caras humanas e identifica sus puntos de referencia visuales. Extrae las características de la cara y las almacena para su uso posterior en operaciones de reconocimiento.

Al usar la API Detect, puede asignar la versión del modelo con el parámetro detectionModel. Los valores disponibles son:

  • detection_01
  • detection_02
  • detection_03

Una dirección URL de solicitud para la API de REST Detect tendrá este aspecto:

https://westus.api.cognitive.microsoft.com/face/v1.0/detect?detectionModel={detectionModel}&recognitionModel={recognitionModel}&returnFaceId={returnFaceId}&returnFaceAttributes={returnFaceAttributes}&returnFaceLandmarks={returnFaceLandmarks}&returnRecognitionModel={returnRecognitionModel}&faceIdTimeToLive={faceIdTimeToLive}

Si usa la biblioteca cliente, puede asignar el valor de detectionModel si pasa una cadena adecuada. Si lo deja sin asignar, la API usará la versión predeterminada del modelo (detection_01). Consulte el siguiente ejemplo de código de la biblioteca cliente .NET.

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceLandmarks: false);
var faces = response.Value;

Adición de una cara a un objeto Person con el modelo especificado

El servicio Face puede extraer datos de los rostros de una imagen y asociarlos a un objeto Person con la API Add Person Group Person Face. En esta llamada API, puede especificar el modelo de detección igual que en Detect.

Consulte el ejemplo de código .NET siguiente.

// Create a PersonGroup and add a person with face detected by "detection_03" model
string personGroupId = "mypersongroupid";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Group Name", ["recognitionModel"] = "recognition_04" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}", content);
}

string? personId = null;
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Name" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    using (var response = await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons", content))
    {
        string contentString = await response.Content.ReadAsStringAsync();
        personId = (string?)(JsonConvert.DeserializeObject<Dictionary<string, object>>(contentString)?["personId"]);
    }
}

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}/persons/{personId}/persistedfaces?detectionModel=detection_03", content);
}

Este código crea un objeto PersonGroup con el identificador mypersongroupid y le agrega un objeto Person. Después, agrega una cara a este objeto Person mediante el modelo detection_03. Si no se especifica el parámetro detectionModel, la API usará el modelo predeterminado (detection_01).

Nota:

No es necesario usar el mismo modelo de detección para todas las caras en un objeto Person ni usar el mismo modelo de detección al detectar caras nuevas para compararlas con un objeto Person (en la API Identify From Person Group, por ejemplo).

Adición de una cara a un objeto FaceList con el modelo especificado

También puede especificar un modelo de detección al agregar una cara a un objeto FaceList existente. Consulte el ejemplo de código .NET siguiente.

using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My face collection", ["recognitionModel"] = "recognition_04" }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}", content);
}

string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["url"] = imageUrl }))))
{
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    await httpClient.PostAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}/persistedfaces?detectionModel=detection_03", content);
}

Este código crea un objeto FaceList denominado My face collection y le agrega una cara con el modelo detection_03. Si no se especifica el parámetro detectionModel, la API usará el modelo predeterminado (detection_01).

Nota:

No es necesario usar el mismo modelo de detección para todas las caras en un objeto FaceList ni usar el mismo modelo de detección al detectar caras nuevas para compararlas con un objeto FaceList.

Pasos siguientes

En este artículo, ha aprendido a especificar el modelo de detección que se debe usar con diferentes tipos de Face API. A continuación, siga un inicio rápido para empezar a trabajar con la detección y el análisis de caras.