다음을 통해 공유


얼굴 감지 모델 지정

이 가이드에서는 Azure AI Face 서비스의 얼굴 감지 모델을 지정하는 방법을 보여 줍니다.

Face 서비스는 기계 학습 모델을 사용하여 이미지 속 사람 얼굴에 대한 작업을 수행합니다. 사용자 피드백에 따라 모델의 정확도를 지속적으로 향상시키고 연구를 진행하면서 이러한 향상된 기능을 모델 업데이트로 제공합니다. 개발자는 사용할 얼굴 감지 모델의 버전을 지정할 수 있습니다. 사용 사례에 가장 잘 맞는 모델을 선택할 수 있습니다.

특정 얼굴 작업에서 얼굴 감지 모델을 지정하는 방법에 대해 자세히 알아보세요. Face 서비스는 얼굴 이미지를 다른 형태의 데이터로 변환할 때마다 얼굴 감지 기능을 사용합니다.

최신 모델을 사용해야 하는지 확실하지 않은 경우 다른 모델 평가 섹션으로 바로 이동하여 새 모델을 평가하고 현재 데이터 세트를 사용하여 결과를 비교합니다.

필수 조건

AI 얼굴 감지의 개념에 대해 잘 알고 있어야 합니다. 그렇지 않은 경우 얼굴 감지 개념 가이드 또는 방법 가이드를 참조하세요.

여러 모델 평가

다양한 얼굴 감지 모델은 다양한 작업에 최적화되어 있습니다. 차이점에 대한 개요는 다음 표를 참조하세요.

모델 설명 성능 참고 사항 랜드마크
detection_01 모든 얼굴 감지 작업에 대한 기본값입니다. 작은 얼굴, 측면 얼굴 또는 흐린 얼굴에는 최적화되지 않았습니다. 감지 호출에서 지정된 경우 얼굴 랜드마크를 반환합니다.
detection_02 2019년 5월에 출시되었으며 필요에 따라 모든 얼굴 감지 작업에 사용할 수 있습니다. 작은 얼굴, 측면 얼굴, 흐린 얼굴에 대한 정확도가 향상되었습니다. 얼굴 랜드마크를 반환하지 않습니다.
detection_03 2021년 2월에 출시되었으며 필요에 따라 모든 얼굴 감지 작업에 사용할 수 있습니다. 더 작은 얼굴(64x64픽셀) 및 회전된 얼굴 방향을 포함하여 정확도가 더욱 향상되었습니다. 감지 호출에서 지정된 경우 얼굴 랜드마크를 반환합니다.

특성은 검색 호출에서 지정된 경우 선택적으로 검색할 수 있는 기능 집합입니다.

모델 액세서리 흐리기 노출 안경 headPose 마스크 노이즈 occlusion qualityForRecognition
detection_01 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ (recognition_03 또는 04의 경우)
detection_02
detection_03 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ (recognition_03 또는 04의 경우)

감지 모델의 성능을 비교하는 가장 좋은 방법은 샘플 데이터 세트에서 사용하는 것입니다. 각 검색 모델을 사용하여 다양한 이미지, 특히 여러 얼굴 또는 표시하기 어려운 얼굴의 이미지에 대해 검색 API를 호출하는 것이 좋습니다. 각 모델에서 반환하는 얼굴 수에 주의해야 합니다.

지정된 모델을 사용하여 얼굴 감지

얼굴 감지는 사람 얼굴의 경계 상자 위치를 찾고 관련 시각적 랜드마크를 식별합니다. 얼굴의 특징을 추출하고 나중에 인식 작업에 사용하기 위해 저장합니다.

검색 API를 사용할 때는 detectionModel 매개 변수를 사용하여 모델 버전을 할당할 수 있습니다. 사용 가능한 값은

  • detection_01
  • detection_02
  • detection_03

검색 REST API에 대한 요청 URL은 다음과 같습니다.

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

클라이언트 라이브러리를 사용하는 경우 적절한 문자열을 전달하여 detectionModel에 대한 값을 할당할 수 있습니다. 할당되지 않은 상태로 두면 API는 기본 모델 버전(detection_01)을 사용합니다. .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;

지정된 모델을 사용하여 Person에 얼굴 추가

Face 서비스는 이미지에서 얼굴 데이터를 추출하고 사람 그룹 사람 얼굴 추가 API를 통해 이를 Person 개체와 연결할 수 있습니다. 이 API 호출에서는 검색과 동일한 방식으로 검색 모델을 지정할 수 있습니다.

다음 .NET 코드 예제를 참조하세요.

// 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);
}

이 코드는 ID mypersongroupid를 사용하여 PersonGroup을 만들고 여기에 Person을 추가합니다. 그런 다음, detection_03 모델을 사용하여 이 Person에 Face를 추가합니다. detectionModel 매개 변수를 지정하지 않으면 API는 기본 모델인 detection_01을 사용합니다.

참고 항목

Person 개체의 모든 얼굴에 대해 동일한 검색 모델을 사용할 필요가 없으며, Person 개체(예: 사람 그룹에서 식별 API)와 비교하기 위해 새 얼굴을 검색할 때 동일한 검색 모델을 사용할 필요가 없습니다.

지정된 모델을 사용하여 FaceList에 얼굴 추가

기존 FaceList 개체에 얼굴을 추가할 때 감지 모델을 지정할 수도 있습니다. 다음 .NET 코드 예제를 참조하세요.

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);
}

이 코드는 My face collection이라는 FaceList를 만들고 detection_03 모델을 사용하여 여기에 Face를 추가합니다. detectionModel 매개 변수를 지정하지 않으면 API는 기본 모델인 detection_01을 사용합니다.

참고 항목

FaceList 개체의 모든 얼굴에 대해 동일한 감지 모델을 사용할 필요는 없으며, FaceList 개체와 비교할 새 얼굴을 감지할 때 동일한 감지 모델을 사용할 필요가 없습니다.

다음 단계

이 문서에서는 다양한 Face API와 함께 사용할 감지 모델을 지정하는 방법을 배웠습니다. 다음으로, 빠른 시작에 따라 얼굴 감지 및 분석을 시작하세요.