Azure 认知服务让面部检测变得简单
介绍
我们总是想把名字和脸联系起来。脸是人类识别熟人最简单的方式之一。这是因为有很多特征使脸部独一无二。计算机能像人类一样检测和解释面部吗?计算机视觉领域一直在研究这个问题。在许多情况下,答案是肯定的!但这是一项艰巨的任务。这就是 Azure 认知服务提供人脸服务的原因。它通过 REST API 公开预先训练的面部检测模型,您可以将其集成到任何应用程序中。
Azure 认知服务中实际上有两种人脸服务。Azure 计算机视觉服务可以检测图像中的不同对象,包括人脸。但是,它仅返回有关检测到的人脸的有限数据,例如年龄、性别和边界矩形。人脸服务将做更多的事情。它可以预测年龄和性别,还可以检测面部特征,例如眼睛和鼻子的位置。它还试图解释面部表情的情绪并评分一个人的快乐或悲伤程度。它可以通过面部结构识别一个人的身份。在本指南中,我们将讨论人脸服务而不是计算机视觉服务。
设置
几分钟后,您将获得一个 Face 服务的新实例。单击“转到资源”按钮查看实例的详细信息。
密钥就像密码一样,因此是隐藏的。这些密钥将向 Azure 标识服务的用户。调用服务端点时,您将发送其中一个密钥。端点只是一个 URL。复制其中一个密钥和端点,因为您很快就会需要它们。在您的 C# 项目中,添加 NuGet 包Microsoft.Azure.CognitiveServices.Vision.Face.2.6.0-preview.1 ,这是本指南的最新版本。在Main方法的顶部,添加密钥和端点的变量。
var key = "{YOUR_API_KEY}";
var endpoint = "{YOUR_ENDPOINT}";
使用人脸服务
从Microsoft.Azure.CognitiveServices.Vison.Face命名空间创建FaceClient。FaceClient接受ApiKeyServiceClientCredential ,该Credential使用Azure 门户中的密钥来识别你的帐户。
var faceClient = new FaceClient(
new ApiKeyServiceClientCredential(key)
);
端点是通过FaceClient实例上的属性设置的。
faceClient.Endpoint = endpoint;
FaceClient上有多种检测人脸的方法。您可能有一个 Web 应用程序,它从用户上传图像并将图像数据发送到服务。对于此演示来说,一种更简单的方法是向 Face Service 发送图像的 URL。以下是来自 Unsplash 的一个示例:https://source.unsplash.com/pQV8dGHrOLU
这是一张年轻女性的照片,让我们看看 Azure 是否同意。将图像的 URL 传递给DetectWithUrlAsync方法。此方法是异步的,因此必须等待,并且Main方法也必须标记为async。
static async Task Main(string[] args)
{
// ...
var faces = await faceClient.Face.DetectWithUrlAsync(
"https://source.unsplash.com/pQV8dGHrOLU"
);
}
人脸是一个DetectedFace列表,每个列表都有一个FaceAttributes属性,从中我们可以得到照片主体的预测年龄和性别。
foreach (var face in faces)
{
Console.WriteLine($"Age: {face.FaceAttributes.Age}, Gender: {face.FaceAttributes.Gender}");
}
有一个问题。如果您现在尝试运行该应用程序,它将崩溃。您必须明确告知 Face Service 您希望它返回的属性。您需要的属性存储在FaceAttributeType列表中。
var returnedAttributes = new List<FaceAttributeType?>
{
FaceAttributeType.Age, FaceAttributeType.Gender
};
DetectWithUrlAsync方法接受returnFaceAttributes参数中的FaceAttributes。
var faces = await faceClient.Face.DetectWithUrlAsync(
"https://source.unsplash.com/pQV8dGHrOLU",
returnFaceAttributes: returnedAttributes
);
运行该应用程序时,Azure 返回年龄 24 岁、性别为女性。
其他属性
Face Services 支持更多属性。例如,将FaceAttributeType.Hair添加到returnFaceAttributes列表中,DetectedFace的FaceAttributes的Hair属性将包含与面部相关的头发(如果有)的数据,例如颜色。
foreach (var hairColor in face.FaceAttributes.Hair.HairColor)
{
Console.WriteLine($"Hair color: {hairColor.Color.ToString()}");
}
为什么头发颜色包含多种颜色?这是因为头发颜色是主观的,有时人们会将头发染成多种色调。因此,每种头发颜色都附有置信度分数,并按降序存储。
foreach (var hairColor in face.FaceAttributes.Hair.HairColor)
{
Console.WriteLine($"Hair color: {hairColor.Color.ToString()}, Confidence: {hairColor.Confidence}");
}
Azure 会预测这位年轻女士的头发最有可能是棕色,其次是红色。它还非常有信心她的头发不是白色的,因为它的置信度得分为 0。
如果HairColor属性没有预测,则表示照片中的主体没有任何头发。
该服务还可以检测面部毛发和眼镜。有关这些属性的更多信息,请参阅文档。
检测情绪也是人脸服务的一个功能。将 Emotion FaceAttributeType 添加到列表 中。FaceAttributes的Emotion属性有八个属性,每个属性代表一种不同的情绪:
- 愤怒
- 鄙视
- 厌恶
- 害怕
- 幸福
- 中性的
- 悲伤
- 惊喜
每个都有一个分数,与头发颜色的置信度分数不同。
Console.WriteLine($"{face.FaceAttributes.Emotion.Anger"});
对每一个进行评估都会表明 Azure 预测主体的情绪很可能是中性的。
下一步该去哪里
面部检测和面部识别之间存在差异。本指南演示了面部检测,它可以查找任何面部。如果您想查找特定的面部,那就是使用面部识别的时候。您需要从不同角度拍摄多张要识别的面部照片。您将使用这些照片来训练服务以区分该面部和其他面部。面部服务还可以实时检测视频流中的面部。
概括
Azure 认知服务人脸服务可让您将人脸识别或检测集成到任何应用程序中,无需任何计算机视觉知识。这对于内置摄像头的智能手机等设备来说非常有意义。使用本指南中解释的代码并在 Xamarin 应用程序中使用它来选择微笑的人的照片会很简单。谢谢阅读!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~