在游乐场、玻璃天桥、滑雪场等娱乐场所,经常能看到有摄影师在拍照片,令这些经营者发愁的一件事就是照片太多了,客户在成千上万张照片中找到自己可不是件容易的事。在一次游玩等活动或家庭聚会也同理,太多了照片导致挑选十分困难。

还好有.NET,只需少量代码,即可轻松找到人脸并完成分类。

本文将使用Microsoft Azure云提供的认知服务Cognitive ServicesAPI来识别并进行人脸分类,可以免费使用,注册地址是:https://portal.azure.com。注册完成后,会得到两个密钥,通过这个密钥即可完成本文中的所有代码,这个密钥长这个样子(非真实密钥):

fa3a7bfd807ccd6b17cf559ad584cbaa

使用方法

首先安装NuGetMicrosoft.Azure.CognitiveServices.Vision.Face,目前最新版是2.5.0-preview.1,然后创建一个FaceClient

string key = "fa3a7bfd807ccd6b17cf559ad584cbaa"; // 替换为你的key using var fc = new FaceClient(new ApiKeyServiceClientCredentials(key)) {     Endpoint = "https://southeastasia.api.cognitive.microsoft.com", };

然后识别一张照片:

using var file = File.OpenRead(@"C:\Photos\DSC_996ICU.JPG"); IList<DetectedFace> faces = await fc.Face.DetectWithStreamAsync(file);

其中返回的faces是一个IList结构,很显然一次可以识别出多个人脸,其中一个示例返回结果如下(已转换为JSON):

[     {       "FaceId": "9997b64e-6e62-4424-88b5-f4780d3767c6",       "RecognitionModel": null,       "FaceRectangle": {         "Width": 174,         "Height": 174,         "Left": 62,         "Top": 559       },       "FaceLandmarks": null,       "FaceAttributes": null     },     {