Obtención de los datos de detección de carasGet face detection data

Esta guía muestra cómo usar la detección de caras para extraer atributos como el sexo, la edad o la postura de una imagen determinada.This guide demonstrates how to use face detection to extract attributes like gender, age, or pose from a given image. Los fragmentos de código de esta guía están escritos en C# con la biblioteca cliente Face API de Azure Cognitive Services.The code snippets in this guide are written in C# by using the Azure Cognitive Services Face API client library. La misma funcionalidad está disponible mediante la API REST.The same functionality is available through the REST API.

Esta guía le muestra cómo:This guide shows you how to:

  • Obtener las ubicaciones y las dimensiones de las caras de una imagen.Get the locations and dimensions of faces in an image.
  • Obtener las ubicaciones de diversos puntos de referencia faciales, como las pupilas, nariz y boca, de una imagen.Get the locations of various face landmarks, such as pupils, nose, and mouth, in an image.
  • Adivinar el sexo, edad, emoción y otros atributos de una cara detectada.Guess the gender, age, emotion, and other attributes of a detected face.

ConfiguraciónSetup

En esta guía se da por supuesto que ya ha construido un objeto FaceClient llamado faceClient, con una clave de suscripción y una dirección URL de punto de conexión de Face.This guide assumes that you already constructed a FaceClient object, named faceClient, with a Face subscription key and endpoint URL. A partir de aquí, puede usar la característica de detección de caras mediante una llamada a DetectWithUrlAsync, que se usa en esta guía o una llamada a DetectWithStreamAsync.From here, you can use the face detection feature by calling either DetectWithUrlAsync, which is used in this guide, or DetectWithStreamAsync. Para obtener instrucciones sobre cómo configurar esta característica, consulte la Guía de inicio rápido de detección de caras para C# .For instructions on how to set up this feature, see the Detect faces quickstart for C#.

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.This guide focuses on the specifics of the Detect call, such as what arguments you can pass and what you can do with the returned data. Se recomienda consultar solo las características que necesita.We recommend that you query for only the features you need. Cada operación tarda más tiempo en completarse.Each operation takes additional time to complete.

Obtención de los datos básicos de la caraGet basic face data

Para encontrar caras y obtener sus ubicaciones en una imagen, llame al método con el parámetro returnFaceId establecido en true.To find faces and get their locations in an image, call the method with the returnFaceId parameter set to true. Esta es la configuración predeterminada.This setting is the default.

IList<DetectedFace> faces = await faceClient.Face.DetectWithUrlAsync(imageUrl, true, false, null);

Puede consultar los objetos DetectedFace devueltos para obtener sus identificadores únicos y un rectángulo que proporciona las coordenadas en píxeles de la cara.You can query the returned DetectedFace objects for their unique IDs and a rectangle that gives the pixel coordinates of the face.

foreach (var face in faces)
{
    string id = face.FaceId.ToString();
    FaceRectangle rect = face.FaceRectangle;
}

Para obtener información sobre cómo analizar la ubicación y las dimensiones de la cara, consulte FaceRectangle.For information on how to parse the location and dimensions of the face, see FaceRectangle. Normalmente, este rectángulo contiene los ojos, las cejas, la nariz y la boca.Usually, this rectangle contains the eyes, eyebrows, nose, and mouth. La parte superior de la cabeza, las orejas y la barbilla no están incluidas necesariamente.The top of head, ears, and chin aren't necessarily included. Para usar el rectángulo facial para recortar una cabeza completa u obtener un retrato intermedio, quizás para una imagen de tipo foto de carnet, puede expandir el rectángulo en cada dirección.To use the face rectangle to crop a complete head or get a mid-shot portrait, perhaps for a photo ID-type image, you can expand the rectangle in each direction.

Obtención de los puntos de referencia facialesGet face landmarks

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.Face landmarks are a set of easy-to-find points on a face, such as the pupils or the tip of the nose. Para obtener los datos del punto de referencia facial, establezca el parámetro returnFaceLandmarks en true.To get face landmark data, set the returnFaceLandmarks parameter to true.

IList<DetectedFace> faces = await faceClient.Face.DetectWithUrlAsync(imageUrl, true, true, null);

El código siguiente muestra cómo podría recuperar las ubicaciones de la nariz y las pupilas:The following code demonstrates how you might retrieve the locations of the nose and pupils:

foreach (var face in faces)
{
    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.You also can use face landmarks data to accurately calculate the direction of the face. 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.For example, you can define the rotation of the face as a vector from the center of the mouth to the center of the eyes. El código siguiente calcula este vector:The following code calculates this vector:

var upperLipBottom = landmarks.UpperLipBottom;
var underLipTop = landmarks.UnderLipTop;

var centerOfMouth = new Point(
    (upperLipBottom.X + underLipTop.X) / 2,
    (upperLipBottom.Y + underLipTop.Y) / 2);

var eyeLeftInner = landmarks.EyeLeftInner;
var eyeRightInner = landmarks.EyeRightInner;

var centerOfTwoEyes = new Point(
    (eyeLeftInner.X + eyeRightInner.X) / 2,
    (eyeLeftInner.Y + eyeRightInner.Y) / 2);

Vector faceDirection = new Vector(
    centerOfTwoEyes.X - centerOfMouth.X,
    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.When you know the direction of the face, you can rotate the rectangular face frame to align it more properly. Para recortar las caras de una imagen, puede girar mediante programación la imagen para que las caras siempre aparezcan verticales.To crop faces in an image, you can programmatically rotate the image so that the faces always appear upright.

Obtención de los atributos de la caraGet face attributes

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.Besides face rectangles and landmarks, the face detection API can analyze several conceptual attributes of a face. Para obtener una lista completa, consulte la sección conceptual Atributos de una cara.For a full list, see the Face attributes conceptual section.

Para analizar los atributos de una cara, establezca el parámetro returnFaceAttributes en una lista de valores FaceAttributeType Enum.To analyze face attributes, set the returnFaceAttributes parameter to a list of FaceAttributeType Enum values.

var requiredFaceAttributes = new FaceAttributeType[] {
    FaceAttributeType.Age,
    FaceAttributeType.Gender,
    FaceAttributeType.Smile,
    FaceAttributeType.FacialHair,
    FaceAttributeType.HeadPose,
    FaceAttributeType.Glasses,
    FaceAttributeType.Emotion
};
var faces = await faceClient.DetectWithUrlAsync(imageUrl, true, false, requiredFaceAttributes);

A continuación, puede obtener referencias a los datos devueltos y realizar más operaciones según sus necesidades.Then, get references to the returned data and do more operations according to your needs.

foreach (var face in faces)
{
    var attributes = face.FaceAttributes;
    var age = attributes.Age;
    var gender = attributes.Gender;
    var smile = attributes.Smile;
    var facialHair = attributes.FacialHair;
    var headPose = attributes.HeadPose;
    var glasses = attributes.Glasses;
    var emotion = attributes.Emotion;
}

Para más información acerca de cada uno de los atributos, consulte la guía conceptual Detección de caras y atributos.To learn more about each of the attributes, see the Face detection and attributes conceptual guide.

Pasos siguientesNext steps

En esta guía, ha aprendido cómo utilizar las diversas funcionalidades de la detección de caras.In this guide, you learned how to use the various functionalities of face detection. A continuación, puede integrar estas características en la aplicación siguiendo un tutorial en profundidad.Next, integrate these features into your app by following an in-depth tutorial.