Ошибка Microsoft ProjectOxford Face API: System.UriFormatException - PullRequest
0 голосов
/ 25 декабря 2018

Я следовал этой документации за использование 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 в основном методе:

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

Я попытался найти эту ошибку в Google и наткнулся на этот ТАК вопрос, но этот ответ не работал для меня. (Их ответ состоял в том, чтобы передать ключ подписки и конечную точку для конструктора FaceServiceClient.)

Кто-нибудь сможет дать какое-либо представление о том, почему происходит эта ошибка? Мне не удалось понять, что является причиной этого, но я думаю, что это может быть связано с await faceServiceClient.GetPersonGroupAsync(personGroupId);.Я также читал, что это может быть связано с выбранным тарифным планом Cognitive Services.Тем не менее, бесплатная, которую я использую, позволяет производить 20 транзакций в минуту, и я только пытаюсь добавить 9 картинок для 3 разных людей.

1 Ответ

0 голосов
/ 28 декабря 2018

Мне удалось найти решение проблемы с помощью новой функции, которая ниже создает группу лиц, добавляет в нее людей и вводит изображения:

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, потому что я вызывал функции для создания группы лиц, добавления людей, добавления изображений для людей, обучения группы людей, а затемидентификация личности.Я считаю, что это главная ошибка.
...