Microsoft ProjectOxford Face API错误:System.UriFormatException

时间:2018-12-25 02:46:48

标签: c# visual-studio exception microsoft-cognitive face-api

当我在控制台中打印以下错误时,我遵循this documentation使用Microsoft Face API在Visual Studio中标识图像中的面孔:

  

将Person添加到类型为“ 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的方式:

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

我尝试在Google中搜索此错误并遇到this SO question,但该答案对我不起作用。 (他们的答案是为FaceServiceClient构造函数传递订阅密钥和终结点。)

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

1 个答案:

答案 0 :(得分: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​​进行多次调用,因为我正在调用以下功能:创建人员组,添加人员,为人员添加图像,训练人员组,然后识别一个人。我相信这是主要错误。