Llamada a la API de detección
Precaución
El acceso al servicio Face está limitado en función de los criterios de idoneidad y uso para apoyar nuestros principios de inteligencia artificial responsable. El servicio Face solo está disponible para clientes y asociados administrados por Microsoft. Use el formulario de admisión de reconocimiento facial para solicitar acceso. Para obtener más información, consulte la página Acceso limitado de Face.
Precaución
Microsoft ha retirado o limitado las funcionalidades de reconocimiento facial que se pueden usar para intentar deducir los estados emocionales y los atributos de identidad que, si se usan incorrectamente, pueden someter a personas a estereotipos, discriminación o denegación de servicios injustos. Las funcionalidades retiradas son emociones y géneros. Las funcionalidades limitadas son las de edad, sonrisa, cabello facial, cabello y maquillaje. Envíe un correo electrónico a Azure Face API si tiene un caso de uso responsable que se beneficiaría del uso de cualquiera de las funcionalidades limitadas. Aquí puede encontrar más información sobre esta decisión.
En esta guía se muestra cómo usar la API de detección de caras para extraer de una imagen determinada atributos. Conocerá las distintas maneras de configurar el comportamiento de esta API para satisfacer sus necesidades.
Los fragmentos de código de esta guía están escritos en C# usando la biblioteca cliente Face de Azure AI. La misma funcionalidad está disponible mediante la API REST.
Configurar
En esta guía se da por supuesto que ya ha construido un objeto FaceClient llamado faceClient
, usando una clave y una dirección URL de punto de conexión de Face. Para obtener instrucciones sobre cómo configurar esta característica, siga uno de los inicios rápidos.
Envío de datos al servicio
Para buscar caras y obtener sus ubicaciones en una imagen, llame a DetectAsync. Toma una cadena de dirección URL o el archivo binario de imagen sin formato como entrada.
var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
IReadOnlyList<FaceDetectionResult> faces = response.Value;
El servicio devuelve un objeto FaceDetectionResult, que puede consultar para obtener distintos tipos de información, especificados a continuación.
Para obtener información sobre cómo analizar la ubicación y las dimensiones de la cara, consulte FaceRectangle. Normalmente, este rectángulo contiene los ojos, las cejas, la nariz y la boca. La parte superior de la cabeza, las orejas y la barbilla no están incluidas necesariamente. Para usar el rectángulo facial con el fin de recortar una cabeza completa u obtener un retrato intermedio, expanda el rectángulo en cada dirección.
Determinación de cómo procesar los datos
Esta guía se centra en los detalles de la llamada de detección, como los argumentos que se pueden pasar y lo que puede hacer con los datos devueltos. Se recomienda consultar solo las características que necesita. Cada operación tarda más tiempo en completarse.
Obtener Id. facial
Si establece el parámetro returnFaceId en true
(solo clientes aprobados), podrá obtener el Id. único de cada cara, que podrá utilizar en posteriores tareas de reconocimiento facial.
foreach (var face in faces)
{
string id = face.FaceId.ToString();
FaceRectangle rect = face.FaceRectangle;
}
El parámetro opcional faceIdTimeToLive especifica cuánto tiempo (en segundos) debe almacenarse el Id. facial en el servidor. Una vez transcurrido este tiempo, se elimina la Id. facial. El valor por defecto es 86 400 (24 horas).
Obtención de los puntos de referencia faciales
Los puntos de referencia faciales son un conjunto de puntos fáciles de encontrar en una cara como, por ejemplo, las pupilas o la punta de la nariz. Para obtener datos de los puntos de referencia faciales, establezca el parámetro detectionModel en FaceDetectionModel.Detection03
y el parámetro returnFaceLandmarks en true
.
// Note DetectionModel.Detection02 cannot be used with returnFaceLandmarks.
var response2 = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceLandmarks: true);
IReadOnlyList<FaceDetectionResult> faces2 = response2.Value;
Obtención de los atributos de la cara
Además de los rectángulos y los puntos de referencia faciales, la API de detección de caras puede analizar varios atributos conceptuales de una cara. Para obtener una lista completa, consulte la sección conceptual Atributos de una cara.
Para analizar los atributos de una cara, establezca el parámetro detectionModel en FaceDetectionModel.Detection03
y el parámetro returnFaceAttributes en una lista de valores FaceAttributeType Enum.
var requiredFaceAttributes = new FaceAttributeType[] {
FaceAttributeType.Detection03.Blur,
FaceAttributeType.Detection03.HeadPose,
FaceAttributeType.Detection03.Mask,
FaceAttributeType.Recognition04.QualityForRecognition
};
// Note DetectionModel.Detection02 cannot be used with returnFaceAttributes.
var response3 = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false, returnFaceAttributes: requiredFaceAttributes);
IReadOnlyList<FaceDetectionResult> faces3 = response3.Value;
Obtención de resultados a partir del servicio
Resultados de los puntos de referencia faciales
El código siguiente muestra cómo podría recuperar las ubicaciones de la nariz y las pupilas:
foreach (var face in faces2)
{
var landmarks = face.FaceLandmarks;
double noseX = landmarks.NoseTip.X;
double noseY = landmarks.NoseTip.Y;
double leftPupilX = landmarks.PupilLeft.X;
double leftPupilY = landmarks.PupilLeft.Y;
double rightPupilX = landmarks.PupilRight.X;
double rightPupilY = landmarks.PupilRight.Y;
También puede usar los datos de los puntos de referencia faciales para calcular con precisión la dirección de la cara. Por ejemplo, se puede definir la rotación de la cara como un vector desde el centro de la boca hasta el centro de los ojos. El código siguiente calcula este vector:
var upperLipBottom = landmarks.UpperLipBottom;
var underLipTop = landmarks.UnderLipTop;
var centerOfMouth = new Point(
(int)((upperLipBottom.X + underLipTop.X) / 2),
(int)((upperLipBottom.Y + underLipTop.Y) / 2));
var eyeLeftInner = landmarks.EyeLeftInner;
var eyeRightInner = landmarks.EyeRightInner;
var centerOfTwoEyes = new Point(
(int)((eyeLeftInner.X + eyeRightInner.X) / 2),
(int)((eyeLeftInner.Y + eyeRightInner.Y) / 2));
var faceDirectionVectorX = centerOfTwoEyes.X - centerOfMouth.X;
var faceDirectionVectorY = centerOfTwoEyes.Y - centerOfMouth.Y;
}
Cuando conoce la dirección de la cara, puede girar el marco rectangular de la cara para alinearlo más correctamente. Para recortar caras de una imagen, puede girar mediante programación la imagen para que siempre aparezcan en vertical.
Resultados del atributo face
En el siguiente código se muestra cómo recuperar los datos del atributo face que solicitó en la llamada original.
foreach (var face in faces3)
{
var attributes = face.FaceAttributes;
var blur = attributes.Blur;
var headPose = attributes.HeadPose;
var mask = attributes.Mask;
var qualityForRecognition = attributes.QualityForRecognition;
}
Para más información acerca de cada uno de los atributos, consulte la guía conceptual Detección de caras y atributos.
Pasos siguientes
En esta guía ha obtenido información sobre cómo utilizar las diversas funcionalidades de la detección y el análisis de caras. A continuación, integre estas características en una aplicación para agregar datos faciales de los usuarios.