await faceClient.Face.DetectWithStreamAsync, возвращающий ноль - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь запустить Microsoft «Создать приложение WPF для отображения данных лица в изображении» (https://docs.microsoft.com/en-us/azure/cognitive-services/face/tutorials/faceapiincsharptutorial), но все, что я пытаюсь использовать изображение для обнаружения лиц, возвращает нулевую ошибку (лица не найдены)).

Я скачал файлы проекта учебника Windows с github, а также попробовал упрощенную версию здесь: https://carldesouza.com/building-an-azure-cognitive-services-face-app-part-1-face-recognition/, с одинаковыми ошибками. Мне удалось создать несколько веб-приложений ASP.Netкоторый может обнаруживать лица, а также создавать группы людей, используя один и тот же ключ API и конечную точку для обнаружения конкретных людей.

Программа, похоже, не может обнаружить лица по этому фрагменту кода:

IList<DetectedFace> faceList =
                        await faceClient.Face.DetectWithStreamAsync(
                            imageFileStream, true, false, null);


[AsyncStateMachine(typeof(<DetectWithStreamAsync>d__6))]
        public static Task<IList<DetectedFace>> DetectWithStreamAsync(this IFaceOperations operations, Stream image, bool? returnFaceId = true, bool? returnFaceLandmarks = false, IList<FaceAttributeType> returnFaceAttributes = null, CancellationToken cancellationToken = default);

Единственная ошибка, которую я получаю при отладке, состоит в том, что этот бит кода всегда возвращает ноль и поэтому не обнаруживает никаких лиц.

1 Ответ

1 голос
/ 21 октября 2019

Попробуйте код ниже:

    static void Main(string[] args)
    {


        string persionPicPath = @"<image path>";

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

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

        faceClient.Endpoint = endpoint;

        using (Stream s = File.OpenRead(persionPicPath))
        {
            var facesResults = faceClient.Face.DetectWithStreamAsync(s, true, false, null).GetAwaiter().GetResult();
            foreach (var faces in facesResults)
            {
                Console.WriteLine(faces.FaceId);
            }
            Console.ReadKey();

        }
    }

Результат: enter image description here

Надеюсь, это поможет.

...