0

当我在控制台中打印以下错误时,我正在关注此文档以使用 Microsoft Face API 在 Visual Studio 中识别图像中的人脸:

将人员添加到“Microsoft.ProjectOxford.Face.FaceAPIException”类型的组异常时出错。

当调用以下将人员添加到现有人员组的函数时,将打印异常:

public async void AddPersonToGroup(string personGroupId, string name, string pathImage){
    try{
        await faceServiceClient.GetPersonGroupAsync(personGroupId);
        CreatePersonResult person = await faceServiceClient.CreatePersonAsync(personGroupId, name);

        foreach (var imgPath in Directory.GetFiles(pathImage, "*.jpg")) {
            using (Stream s = File.OpenRead(imgPath)) {
                await faceServiceClient.AddPersonFaceAsync(personGroupId, person.PersonId, s);
            }
        }
    } catch (Exception ex){
        //Below is where the error was printed.
        Console.WriteLine("Error adding Person to Group " + ex.Message);
    }
}

这就是我AddPersonToGroup在 main 方法中调用的方式:

new Program().AddPersonToGroup("actor", "Tom Cruise", @"C:\Users\ishaa\Documents\Face_Pictures\Tom_Cruise\");

我尝试在 Google 中搜索这个错误并遇到了这个 SO question,但那个答案对我不起作用。(他们的回答是为FaceServiceClient构造函数传入订阅密钥和端点。)

任何人都可以提供任何有关为什么会发生此错误的见解吗?我一直无法弄清楚是什么原因造成的,但我相信它可能与 await faceServiceClient.GetPersonGroupAsync(personGroupId);. 我还读到这可能是由于我选择了认知服务定价计划。然而,我正在使用的免费的允许每分钟 20 次交易,我只是想为 3 个不同的人添加 9 张图片。

4

1 回答 1

0

通过使用下面的新函数,我能够找到问题的解决方案,该函数创建了一个人员组,向其中添加人员并输入图像:

public async void AddPersonToGroup(string personGroupId, string name, string pathImage){
    //Create a Person Group called actors.
    await faceServiceClient.CreatePersonGroupAsync("actors, "Famous Actors");

    //Create a person and assign them to a Person Group called "actors"
    CreatePersonResult friend1 = await faceServiceClient.CreatePersonAsync("actors", "Tom Cruise");

    //Get the directory with all the images of the person.
    const string friend1ImageDir = @"C:\Users\ishaa\Documents\Face_Recognition_Pictures\Tom_Cruise\";
    foreach (string imagePath in Directory.GetFiles(friend1ImageDir, "*.jpg")){
        using (Stream s = File.OpenRead(imagePath)){
           try{
               //Add the faces for the person.
               await faceServiceClient.AddPersonFaceAsync("actors", friend1.PersonId, s);
           } catch (Exception e){
               Console.WriteLine(e.Message);
           }
        }
    }
}

上面的以下代码在创建人员组、创建人员和为人员添加图像方面对我有用。我认为最初的错误可能有两个原因:

  1. await faceServiceClient.GetPersonGroupAsync(personGroupId);可能是一个问题。现在我没有使用它,代码适用于faceServiceClient.CreatePersonGroupAsync.
  2. 每分钟电话太多。我目前正在使用每分钟 20 笔交易的免费计划。我没有意识到,每次运行代码时,我都会使用 API 进行多次调用,因为我正在调用用于创建人员组、添加人员、为人员添加图像、训练人员组的函数,然后识别一个人。我相信这是主要的错误。
于 2018-12-27T21:01:43.687 回答