你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

指定人脸识别模型

注意

为了支持我们负责任的 AI 原则,基于资格和使用标准对人脸服务访问进行限制。 人脸服务仅适用于 Microsoft 托管客户和合作伙伴。 使用人脸识别引入表单来申请访问。 有关详细信息,请参阅人脸受限访问页面。

本指南介绍如何指定识别模型,以使用 Azure AI 人脸服务进行人脸检测、识别和相似性搜索。

人脸服务使用机器学习模型对图像中可见的人脸执行运算。 我们将会根据客户反馈以及研究成果不断改进模型的准确度,并作为模型更新交付改进结果。 开发人员可以选择指定想要使用的人脸识别模型版本;他们可以选择最适合其用例的模型。

模型兼容性

Azure AI 人脸服务具有四种可用的识别模型。 我们将继续支持模型 recognition_01(2017 年发布)、recognition_02(2019 年发布)和 recognition_03(2020 年发布),以确保为使用通过这些模型创建的 FaceList 或 PersonGroup 的客户提供后向兼容性。 FaceList 或 Persongroup 将始终使用创建它时所用的识别模型,并且将新的人脸添加到其中时,它们将与此模型相关联。 创建后无法更改此设置,客户需要将相应的识别模型与相应的 FaceList 或 PersonGroup 一起使用

你可以根据自己的需要转到较新的识别模型;但是,你将需要使用所选的识别模型来创建新的 FaceList 和 PersonGroup。

recognition_04 模型(2021 年发布)是当前可用的最准确的模型。 如果你是新客户,建议使用此模型。 recognition_04 将在相似性比较和人员匹配比较方面提供更高的准确性。 Recognition_04 改进了对佩戴面部遮盖物(外科口罩、N95 口罩、布口罩)的已注册用户的识别。 现在,你可以构建安全且无缝的用户体验,以便使用最新的 detection_03 模型来检测已注册的用户是否佩戴了面部遮盖物。 然后使用最新的 recognition_04 模型来识别他们的身份。 每个模型都独立于其他模型运行,并且为一个模型设置的置信度阈值不应在其他识别模型之间进行比较。

请继续阅读,了解如何在不同的人脸操作中指定选定的模型,同时避免模型冲突。 如果你是高级用户,想要确定是否应该切换到最新的模型,可以转到评估不同的模型部分。 你可以评估新模型,并使用当前数据集比较结果。

先决条件

读者应该熟悉 AI 人脸检测和识别的概念。 否则请先阅读以下指南:

使用指定的模型检测人脸

人脸检测可以识别人脸的视觉特征点,并查找其边界框位置。 它还会提取人脸特征,并将其最长临时存储 24 小时以用于识别。 所有这些信息构成了人脸的表示形式。

提取人脸特征时将使用识别模型,因此,可以在执行检测操作时指定模型版本。

使用 Face - Detect API 时,可以使用 recognitionModel 参数分配模型版本。 可用值有:

  • recognition_01
  • recognition_02
  • recognition_03
  • recognition_04

或者,可以指定 returnRecognitionModel 参数(默认为 false)来指示是否应在响应中返回 recognitionModel。 因此,Face - Detect REST API 的请求 URL 将如下所示:

https://westus.api.cognitive.microsoft.com/face/v1.0/detect[?returnFaceId][&returnFaceLandmarks][&returnFaceAttributes][&recognitionModel][&returnRecognitionModel]&subscription-key=<Subscription key>

如果使用客户端库,则可以通过传递一个表示版本的字符串来分配 recognitionModel 的值。 如果不分配该值,将使用 recognition_01 的默认模型版本。 请查看适用于 .NET 客户端库的以下代码示例。

string imageUrl = "https://news.microsoft.com/ceo/assets/photos/06_web.jpg";
var faces = await faceClient.Face.DetectWithUrlAsync(url: imageUrl, returnFaceId: true, returnFaceLandmarks: true, recognitionModel: "recognition_01", returnRecognitionModel: true);

注意

必须将 returnFaceId 参数设置为 true,才能在后续步骤中启用人脸识别方案。

使用指定的模型识别人脸

人脸服务可以从图像中提取人脸数据,并将其与 Person 对象相关联(例如,通过 Add face API 调用),多个 Person 对象可以一起存储在 PersonGroup 中 。 然后,可以根据 PersonGroup 比较新的人脸(使用 Face - Identify 调用),该组中匹配的人员将被识别。

PersonGroup 中的所有 Person 应有一个唯一的识别模型,在创建该组(使用 PersonGroup - CreateLargePersonGroup - Create)时,可以使用 recognitionModel 参数指定此模型。 如果不指定此参数,则会使用原始的 recognition_01 模型。 组将始终使用创建它时所用的识别模型,并且将新的人脸添加到其中时,它们将与此模型相关联。 选择组后,便无法更改。 若要查看 PersonGroup 是使用哪个模型配置的,请结合设置为 truereturnRecognitionModel 参数使用 PersonGroup - Get API。

请查看适用于 .NET 客户端库的以下代码示例。

// Create an empty PersonGroup with "recognition_04" model
string personGroupId = "mypersongroupid";
await faceClient.PersonGroup.CreateAsync(personGroupId, "My Person Group Name", recognitionModel: "recognition_04");

在此代码中,创建了 ID 为 mypersongroupid 的 PersonGroup,它设置为使用 recognition_04 模型提取人脸特征。

相应地,需要指定在检测人脸以根据此 PersonGroup 进行比较(通过人脸 - 检测 API)时要使用的模型。 使用的模型应始终为 PersonGroup 的配置相一致;否则,操作将会由于模型不兼容而失败。

无需在 Face - Identify API 中进行更改;只需在检测中指定模型版本。

使用指定的模型查找类似的人脸

还可以指定一个识别模型来进行类似性搜索。 可以在使用 FaceList - Create API 或 LargeFaceList - Create 创建 FaceList 时,使用 recognitionModel 来分配模型版本。 如果不指定此参数,则默认使用 recognition_01 模型。 FaceList 始终使用创建它时所用的识别模型,并且将新的人脸添加到该列表时,它们将与此模型相关联;创建后无法对此进行更改。 若要查看 FaceList 是使用哪个模型配置的,请结合设置为 true 的 returnRecognitionModel 参数使用 FaceList - Get API。

请查看适用于 .NET 客户端库的以下代码示例。

await faceClient.FaceList.CreateAsync(faceListId, "My face collection", recognitionModel: "recognition_04");

此代码使用 recognition_04 模型来提取特征,创建名为 My face collection 的 FaceList。 在此 FaceList 中搜索与新检测到的人脸类似的人脸时,该人脸必须已使用 recognition_04 模型检测到 (Face - Detect)。 如上一部分所述,模型需要保持一致。

无需在 Face - Find Similar API 中进行更改;只需在检测中指定模型版本。

使用指定的模型验证人脸

Face - Verify API 会检查两张人脸是否属于同一个人。 无需在 Verify API 中进行识别模型方面的更改,但只能比较使用同一模型检测到的人脸。

评估不同的模型

如果要基于自己的数据比较不同识别模型的性能,则需要:

  1. 分别使用 recognition_01、recognition_02、recognition_03 和 recognition_04 创建四个 PersonGroup
  2. 使用图像数据来检测人脸,并将这些人脸注册到这四个 PersonGroup 中的 Person 。
  3. 使用 PersonGroup - Train API 训练 PersonGroup
  4. 使用“人脸 - 识别”对全部四个 PersonGroup 都进行测试,然后比较结果。

如果正常指定了置信度阈值(介于 0 与 1 之间的值,确定模型必须有多大的置信度来识别人脸),可能需要对不同的模型使用不同的阈值。 一个模型的阈值不能与另一个模型共享,并且不一定生成相同的结果。

后续步骤

本文已介绍如何指定要与不同人脸服务 API 配合使用的识别模型。 接下来,按照快速入门开始使用人脸检测。