얼굴 검색 데이터 가져오기Get face detection data

이 가이드에서는 특성을 추출할 성별, 연령 또는 자세와 같은 지정된 된 이미지에서 얼굴 감지를 사용 하는 방법을 보여 줍니다.This guide will demonstrate how to use face detection to extract attributes like gender, age, or pose from a given image. 이 가이드에서 코드 조각을 작성 된 C# 를 통해 사용할 수는 동일한 기능을 Face API 클라이언트 라이브러리를 사용 하는 REST API.The code snippets in this guide are written in C# using the Face API client library, but the same functionality is available through the REST API.

이 가이드에 표시 됩니다 하는 방법에:This guide will show you how to:

  • 이미지에서 얼굴의 크기와 위치를 가져옵니다.Get the locations and dimensions of faces in an image.
  • 이미지에서 다양 한 얼굴 랜드마크 (삼아, 코, 말하거나, 및 등)의 위치를 가져옵니다.Get the locations of various face landmarks (pupils, nose, mouth, and so on) in an image.
  • 성별, 연령과 및 emotion 및 검색 된 얼굴의 다른 특성을 추측 합니다.Guess the gender, age, and emotion, and other attributes of a detected face.

설정Setup

이 가이드에서는 이미 생성 된 가정를 FaceClient 라는 개체 faceClient, 얼굴 구독 키 및 끝점 url입니다.This guide assumes you have already constructed a FaceClient object, named faceClient, with a Face subscription key and endpoint URL. 여기에서 호출 하 여 얼굴 감지 기능을 사용할 수 있습니다 DetectWithUrlAsync (이 가이드에 사용) 또는 DetectWithStreamAsync.From here, you can use the face detection feature by calling either DetectWithUrlAsync (used in this guide) or DetectWithStreamAsync. 참조를 얼굴 감지 빠른 시작에 대 한 C# 이를 설정 하는 방법에 대 한 합니다.See the Detect Faces quickstart for C# for instructions on how to set this up.

이 가이드는 검색 호출의 세부 정보에 중점—전달할 수 있는 인수 및 반환된 된 데이터를 사용 하 여 수행할 수 있습니다.This guide will focus on the specifics of the Detect call—what arguments you can pass and what you can do with the returned data. 각 작업에는 데 추가 시간이 소요 되는 대로 필요한 기능에 대 한 쿼리 하는 것이 좋습니다.We recommend only querying for the features you need, as each operation takes additional time to complete.

기본 글꼴 데이터 가져오기Get basic face data

얼굴 찾고 이미지에 해당 위치를 가져올 메서드를 호출 합니다 returnFaceId 매개 변수 설정 true (기본값).To find faces and get their locations in an image, call the method with the returnFaceId parameter set to true (default).

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

반환 된 DetectedFace 해당 고유 Id 및 글꼴의 픽셀 좌표를 제공 하는 사각형에 대 한 개체를 쿼리할 수 있습니다.The returned DetectedFace objects can be queried for their unique IDs and a rectangle which gives the pixel coordinates of the face.

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

참조 FaceRectangle 글꼴의 크기와 위치를 구문 분석 하는 방법에 대 한 정보에 대 한 합니다.See FaceRectangle for information on how to parse the location and dimensions of the face. 이 사각형 눈, 눈 썹, 코, 및 입;를 포함 하는 일반적으로 헤드, 귀, 및 chin 맨 반드시 포함 되지 않습니다.Usually, this rectangle contains the eyes, eyebrows, nose, and mouth; the top of head, ears, and chin are not necessarily included. 전체 헤드 또는 중간 샷 세로 (사진 ID 형식 이미지)을 자르려면 얼굴 사각형을 사용 하려는 경우에 각 방향에는 특정 여백으로 사각형을 확장 하는 것이 좋습니다.If you intend to use the face rectangle to crop a complete head or mid-shot portrait (a photo ID type image), you may want to expand the rectangle by a certain margin in each direction.

얼굴 랜드마크 가져오기Get face landmarks

얼굴 랜드마크는는 삼아 같은 얼굴 찾기 쉽게 점의 집합 또는 코의 팁입니다.Face landmarks are a set of easy-to-find points on a face such as the pupils or the tip of nose. 설정 하 여 얼굴 랜드마크 데이터를 가져올 수 있습니다 합니다 returnFaceLandmarks 매개 변수를 true합니다.You can get face landmark data by setting the returnFaceLandmarks parameter to true.

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

기본적으로 27개의 이정표 지점이 사전 정의되어 있습니다.By default, there are 27 predefined landmark points. 다음 그림에는 모든 27 지점을 보여 줍니다.The following figure shows all 27 points:

레이블이 지정 된 모든 27 개의 특징을 사용 하 여 얼굴 다이어그램

얼굴 사각형 프레임 마찬가지로 픽셀 단위로 지점은 반환 합니다.The points returned are in units of pixels, just like the face rectangle frame. 다음 코드는 코 및 삼아의 위치를 검색할 수 있습니다 하는 방법을 보여 줍니다.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;
}

얼굴 랜드마크 데이터는 정확 하 게 발생 하는 방향을 계산 하려면 데도 사용할 수 있습니다.Face landmarks data can also be used to accurately calculate the direction of the face. 예를 들어 글꼴의 회전 중심 눈에 입 센터에서 벡터로 정의할 수 있습니다.For example, we can define the rotation of the face as a vector from the center of the mouth to the center of the eyes. 아래 코드에서는이 벡터를 계산합니다.The code below 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);

글꼴의 방향의 알고 있으면 더 적절히 맞출 사각형 얼굴 프레임을 회전할 수 있습니다.Knowing the direction of the face, you can then rotate the rectangular face frame to align it more properly. 이미지에서 얼굴을 자르려면 하려는 경우 얼굴 항상 수직 표시 되도록 이미지를 프로그래밍 방식으로 회전할 수 있습니다.If you want to crop faces in an image, you can programmatically rotate the image so that the faces always appear upright.

얼굴 특성 가져오기Get face attributes

얼굴 감지 API는 얼굴 사각형 및 랜드마크 외에도 얼굴의 몇 가지 개념적 특성을 분석할 수 있습니다.Besides face rectangles and landmarks, the face detection API can analyze several conceptual attributes of a face. 내용은 다음과 같습니다.These include:

  • AgeAge
  • 성별Gender
  • 웃는 정도Smile intensity
  • 얼굴의 털Facial hair
  • 안경Glasses
  • 3D 머리 포즈3D head pose
  • EmotionEmotion

중요

이러한 특성을 예측 하는 통계 알고리즘을 사용 하 여 항상 정확 하지 않을 하며These attributes are predicted through the use of statistical algorithms and may not always be accurate. 특성 데이터를 기반으로 결정을 내릴 경우에 주의 해야 합니다.Use caution when making decisions based on attribute data.

얼굴 특성을 분석 하려면 설정 합니다 returnFaceAttributes 매개 변수 목록을 FaceAttributeType 열거형 값입니다.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);

그런 다음 반환된 된 데이터에 대 한 참조를 가져오고 추가로 수행 필요에 따라 작업 합니다.Then, get references to the returned data and do further 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;
}

각 특성에 대 한 자세한 내용은 참조는 용어집합니다.To learn more about each of the attributes, refer to the Glossary.

다음 단계Next steps

이 가이드의 얼굴 감지의 다양 한 기능을 사용 하는 방법을 알아보았습니다.In this guide you learned how to use the various functionalities of face detection. 다음으로, 참조를 용어집 세부 정보를 보려면 검색 한 얼굴 데이터에 대 한 합니다.Next, see the Glossary for a more detailed look at the face data you've retrieved.