你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
指定人脸检测模型
本指南介绍如何为 Azure AI 人脸服务指定人脸检测模型。
人脸服务使用机器学习模型对图像中的人脸执行运算。 我们将会根据客户反馈以及研究成果不断改进模型的准确度,并作为模型更新交付改进结果。 开发人员可以指定想要使用的人脸检测模型版本;他们可以选择最适合其用例的模型。
请继续了解如何在特定的人脸操作中指定人脸检测模型。 每当人脸服务将人脸图像转换为其他某种形式的数据时,就会使用人脸检测。
如果你不确定是否要切换到最新的模型,请跳转到评估不同的模型部分来评估新模型,并使用当前数据集比较结果。
必备条件
你应该熟悉 AI 人脸检测的概念。 如果你不熟悉,请参阅人脸检测的概念指南或操作指南:
评估不同的模型
不同的人脸检测模型已针对不同的任务进行优化。 有关差异概述,请参阅下表。
模型 | 说明 | 性能说明 | 特征点 |
---|---|---|---|
detection_01 | 所有人脸检测操作的默认选项。 | 未针对小尺寸人脸、侧视人脸或模糊人脸进行优化。 | 如果在检测调用中指定了人脸特征点,则返回这些特征点。 |
detection_02 | 已于 2019 年 5 月发布,可以选择性地在所有人脸检测操作中使用。 | 已针对小尺寸人脸、侧视人脸或模糊人脸提高了准确度。 | 不返回人脸特征点。 |
detection_03 | 已于 2021 年 2 月发布,可以选择性地在所有人脸检测操作中使用。 | 进一步提升了准确度,包括针对人脸较小(64x64 像素)和人脸方向发生了转动等情况。 | 如果在检测调用中指定了人脸特征点,则返回这些特征点。 |
属性是一组功能,如果在检测调用中指定,则可以选择性地检测它们:
模型 | accessories | blur | exposure | 眼镜 | headPose | 掩码 | noise | occlusion | qualityForRecognition |
---|---|---|---|---|---|---|---|---|---|
detection_01 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️(对于 recognition_03 或 04) | |
detection_02 | |||||||||
detection_03 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️(对于 recognition_03 或 04) |
比较检测模型性能的最佳方式是针对示例数据集使用这些模型。 我们建议使用每个检测模型针对各种图像(尤其是许多人脸的图像,或者难以辨认的人脸的图像)调用 Detect API。 请注意每个模型返回的人脸数。
使用指定的模型检测人脸
人脸检测可以查找人脸的边界框位置,并识别其视觉特征点。 它会提取人脸的特征并存储这些特征,以便稍后在识别操作中使用。
使用 Detect API 时,可以使用 detectionModel
参数分配模型版本。 可用值有:
detection_01
detection_02
detection_03
Detect 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
人脸服务可以从图像中提取人脸数据,并通过 Add Person Group Person Face API 将其与 Person 对象关联。 在此 API 调用中,可以像在 Detect 中一样指定检测模型。
请参阅以下 .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
模型将一个 Face 对象添加到此 Person 对象。 如果未指定 detectionModel 参数,则 API 使用默认模型 detection_01
。
注意
无需对 Person 对象中的所有人脸使用相同的检测模型,并且在检测新人脸时,无需使用相同的检测模型来与 Person 对象进行比较(例如,在 Identify From Person Group 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 对象进行比较
后续步骤
本文已介绍如何指定要与不同人脸 API 配合使用的检测模型。 接下来,按照快速入门开始使用人脸检测和分析。