如何使用 Azure Cognitive Face API 验证两个图像?需要示例代码

Posted

技术标签:

【中文标题】如何使用 Azure Cognitive Face API 验证两个图像?需要示例代码【英文标题】:How to verify two Images using Azure Cognitive Face API ? Need Sample Code 【发布时间】:2020-02-14 14:10:00 【问题描述】:

我有两个人的图像。现在我想比较这些图像并检查这些图像是否属于同一个人。从我了解到的文档中,我必须发送两个 faceid 以及 url。我试过了,但它不起作用。可能是,我错过了一些东西。如果可能的话,请帮助我并提供一些相同的示例代码。

等待您的回复。

【问题讨论】:

" 我试过了,但它不起作用。可能是我遗漏了一些东西。如果可能的话,请帮助我并提供一些相同的示例代码。" 【参考方案1】:

试试下面的控制台应用代码:

using Microsoft.Azure.CognitiveServices.Vision.Face;
using Microsoft.Azure.CognitiveServices.Vision.Face.Models;
using System;
using System.IO;
using System.Linq;
using System.Threading;

namespace FaceIdentityTest

    class Program
    

        static void Main(string[] args)
        


            string persionPicPath = @"<some path>\personPic.jpg";

            String[] picsPath =  @"<some path>\pic1.jpg", @"<some path>\pic2.jpg" ;

            string endpoint = @"https://<your endpoint name>.cognitiveservices.azure.com/";
            string subscriptionKey = "<your subscription key>";



            IFaceClient faceClient = new FaceClient(
            new ApiKeyServiceClientCredentials(subscriptionKey),
            new System.Net.Http.DelegatingHandler[]  );

            faceClient.Endpoint = endpoint;

            // Create an empty PersonGroup
            Console.WriteLine("create person group");
            string personGroupId = "demogroup";
            faceClient.PersonGroup.CreateAsync(personGroupId, "demo group").GetAwaiter().GetResult();

            // Define a person named Bill
            Console.WriteLine("create a person in group");
            var createPersonResult = faceClient.PersonGroupPerson.CreateAsync(
                // Id of the PersonGroup that the person belonged to
                personGroupId,
                // Name of the person
                "Bill"
            ).GetAwaiter().GetResult();


            //Add a face to Bill
            Console.WriteLine("Add a face to person");
            using (Stream s = File.OpenRead(persionPicPath))
            
                // Detect faces in the image and add to Anna
                faceClient.PersonGroupPerson.AddFaceFromStreamAsync(
                    personGroupId, createPersonResult.PersonId, s).GetAwaiter().GetResult();
            

            //Train person group 
            Console.WriteLine("start train person group...");
            faceClient.PersonGroup.TrainAsync(personGroupId).GetAwaiter().GetResult();


            //Check train status
            TrainingStatus trainingStatus = null;
            while (true)
            
                trainingStatus = faceClient.PersonGroup.GetTrainingStatusAsync(personGroupId).GetAwaiter().GetResult();

                if (trainingStatus.Status != TrainingStatusType.Running)
                
                    break;
                
                else 
                    Console.WriteLine("trainning person group...");
                

                Thread.Sleep(1000);
            


            foreach (var pic in picsPath) 

                Console.WriteLine("start identify faces in :" + pic);

                using (Stream s = File.OpenRead(pic))
                
                    var faces = faceClient.Face.DetectWithStreamAsync(s).GetAwaiter().GetResult();
                    var faceIds = faces.Select(face => (Guid)face.FaceId).ToList();

                    var results = faceClient.Face.IdentifyAsync(faceIds, personGroupId).GetAwaiter().GetResult();
                    foreach (var identifyResult in results)
                    
                        Console.WriteLine("Result of face: 0", identifyResult.FaceId);
                        if (identifyResult.Candidates.Count == 0)
                        
                            Console.WriteLine("No one identified");
                        
                        else
                        
                            // Get top 1 among all candidates returned
                            var candidateId = identifyResult.Candidates[0].PersonId;
                            var person = faceClient.PersonGroupPerson.GetAsync(personGroupId, candidateId).GetAwaiter().GetResult();
                            Console.WriteLine("Identified as 0", person.Name);
                        
                    

                

            
            Console.ReadKey();
        
    

我的照片:

结果:

顺便说一句,无论你使用哪种编程语言,只要按照这个演示中的步骤就可以使用 Face API 来识别人脸。

希望对您有所帮助。

您可以在 VS 中导入 Microsoft.Azure.CognitiveServices.Vision.Face :

【讨论】:

如何获取 Microsoft.Azure.CognitiveServices.Vision.Face ? 我之前试过这个。但它没有出现在列表中。我正在使用 Visual Studio 2013 和 .Net 4.5.2。有什么问题吗? 嗨@Ayan,如本页所示:nuget.org/packages/… 此包仅可用于与 SemVer 2.0.0 兼容的 NuGet 客户端下载,例如 Visual Studio 2017(版本 15.3)及更高版本或 NuGet客户端 4.3.0 及更高版本。也许您可以尝试手动导入它... 嗨@Ayan,我想知道这篇文章是否对您有帮助吗?如果是这样,请单击答案旁边的复选标记以将其从灰色切换为已填充以标记此答案,以便帮助其他有类似问题的人。 嗨 @Ayan,顺便说一句,我正在使用 VS 2019 和 .Net Framework 4.7.2

以上是关于如何使用 Azure Cognitive Face API 验证两个图像?需要示例代码的主要内容,如果未能解决你的问题,请参考以下文章

使用 Angular 7 使用 Azure Face Api 进行人脸识别

Microsoft Cognitive Services Face API - 如何在没有可可豆荚的情况下集成 iOS 框架?

Azure Cognitive Service 访问优化

Azure Cognitive Services- Speech To Text

如何获取 Azure Text To Speech 的可用语音列表?

Azure Speech-To-Text 多语音识别