얼굴 감지 데이터 가져오기Get face detection data

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

이 가이드에서는 다음을 수행 하는 방법을 보여 줍니다.This guide shows you how to:

  • 이미지에서 얼굴의 위치와 크기를 가져옵니다.Get the locations and dimensions of faces in an image.
  • 이미지에서 pupils, 코, 입 등 다양 한 얼굴 랜드마크의 위치를 가져옵니다.Get the locations of various face landmarks, such as pupils, nose, and mouth, in an image.
  • 검색 된 면의 성별, age, emotion 및 기타 특성을 추측 합니다.Guess the gender, age, emotion, and other attributes of a detected face.

설정Setup

이 가이드에서는 얼굴 구독 키와 끝점 URL을 사용하여 라는 FaceClientfaceClient 개체를 이미 생성 했다고 가정 합니다.This guide assumes that you 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, which is used in this guide, or DetectWithStreamAsync. 이 기능을 설정 하는 방법에 대 한 지침은 빠른 시작 중 하나를 수행 합니다.For instructions on how to set up this feature, follow one of the quickstarts.

이 가이드는 전달할 수 있는 인수와 반환 된 데이터로 수행할 수 있는 작업을 비롯 하 여 검색 호출의 세부 사항을 중점적으로 설명 합니다.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. 필요한 기능만 쿼리 하는 것이 좋습니다.We recommend that you query for only the features you need. 각 작업을 완료 하려면 추가 시간이 필요 합니다.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. 이 설정은 기본값입니다.This setting is the default.

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

반환 된 DetectedFace 개체의 고유 id와 표면의 픽셀 좌표를 제공 하는 사각형을 쿼리할 수 있습니다.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;
}

글꼴의 위치 및 크기를 구문 분석 하는 방법에 대 한 자세한 내용은 FaceRectangle를 참조 하세요.For information on how to parse the location and dimensions of the face, see FaceRectangle. 일반적으로이 사각형에는 눈, eyebrows, 코 및 입가 포함 됩니다.Usually, this rectangle contains the eyes, eyebrows, nose, and mouth. Head, 귀 및 chin의 위쪽은 반드시 포함 되는 것은 아닙니다.The top of head, ears, and chin aren't necessarily included. 표면 사각형을 사용 하 여 완전 한 헤드를 자르거나, 영상 ID 유형 이미지의 경우 각 방향으로 사각형을 확장할 수 있습니다.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.

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

얼굴 랜드마크 는 pupils 또는 코의 팁과 같이 얼굴에서 찾기 쉬운 점으로 이루어진 집합입니다.Face landmarks are a set of easy-to-find points on a face, such as the pupils or the tip of the nose. 얼굴 랜드마크 데이터를 가져오려면 returnFaceLandmarks 매개 변수를 true로 설정 합니다.To get face landmark data, set the returnFaceLandmarks parameter to true.

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

다음 코드는 코 및 동공의 위치를 검색하는 방법을 보여줍니다.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;
}

얼굴 랜드마크 데이터를 사용 하 여 면의 방향을 정확 하 게 계산할 수도 있습니다.You also can use face landmarks data to accurately calculate the direction of the face. 예를 들어, 고의 중심에서 눈 중심까지 표면의 회전을 벡터로 정의할 수 있습니다.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. 다음 코드는이 벡터를 계산 합니다.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);

얼굴 방향을 알고 있는 경우 사각형 얼굴을 회전 하 여 더 정확 하 게 정렬할 수 있습니다.When you know the direction of the face, you can rotate the rectangular face frame to align it more properly. 이미지에서 얼굴을 자르려면 모양이 항상 수직이 되도록 이미지를 프로그래밍 방식으로 회전할 수 있습니다.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. 전체 목록은 Face 특성 개념 섹션을 참조 하세요.For a full list, see the Face attributes conceptual section.

얼굴 특성을 분석 하려면 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 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;
}

각 특성에 대해 자세히 알아보려면 얼굴 검색 및 특성 개념 가이드를 참조 하세요.To learn more about each of the attributes, see the Face detection and attributes conceptual guide.

다음 단계Next steps

이 가이드에서는 얼굴 검색의 다양 한 기능을 사용 하는 방법을 알아보았습니다.In this guide, you learned how to use the various functionalities of face detection. 다음으로, 심층 자습서를 수행 하 여 이러한 기능을 앱에 통합 합니다.Next, integrate these features into your app by following an in-depth tutorial.