Face Detection in Azure

0

I am trying to experiment with the Microsoft Azure Cognitive Services Face Detection. I am doing something wrong. I am trying to use the C# SDK for face detection. I am getting the error below. I have no idea how to even debug this or what the error message is telling me. Its almost like something I have set is not coming through, but I am just guessing.

 Microsoft.Azure.CognitiveServices.Vision.Face.Models.APIErrorException
  HResult=0x80131500
  Message=Operation returned an invalid status code 'BadRequest'
  Source=Microsoft.Azure.CognitiveServices.Vision.Face
  StackTrace:
   at Microsoft.Azure.CognitiveServices.Vision.Face.FaceOperations.<DetectWithUrlWithHttpMessagesAsync>d__9.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Microsoft.Azure.CognitiveServices.Vision.Face.FaceOperationsExtensions.<DetectWithUrlAsync>d__4.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at BWD.ASPNET.Core.Services.FaceDetection.<DoWork>d__5.MoveNext() in 

My code for making this call is:

    string faceEndpoint = "https://eastus.api.cognitive.microsoft.com";
    FaceAttributeType[] faceAttributes =
    { FaceAttributeType.Age, FaceAttributeType.Gender, FaceAttributeType.Hair, 
        FaceAttributeType.Smile, FaceAttributeType.Gender, FaceAttributeType.Emotion, FaceAttributeType.FacialHair, 
        FaceAttributeType.Accessories  };
    FaceClient faceClient = new FaceClient( new ApiKeyServiceClientCredentials(connString), new System.Net.Http.DelegatingHandler[] { });
    faceClient.Endpoint = faceEndpoint;
    var ctx = new BWDContext();
    var pics = await (from p in ctx.Picture where p.DateOfFacial == null select p).ToListAsync();
    foreach(var pic in pics)
    {
        if(Uri.IsWellFormedUriString(pic.PicFileUrl, UriKind.Absolute))
        {
            IList<DetectedFace> faceList =
                await faceClient.Face.DetectWithUrlAsync(pic.PicFileUrl, true, true, faceAttributes); // error occurs here
 .....on and on .......

I also tried making a rest call with fiddler, which does work. On the fiddler call, I just do a post to this url: https://eastus.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=false&returnFaceAttributes=age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise

My header is:

User-Agent: Fiddler
Ocp-Apim-Subscription-Key: ....subscription key......
Content-Type: application/json
Host: eastus.api.cognitive.microsoft.com
Content-Length: 107

My post body is: { 'url': 'https://bwdpictures.blob.core.windows.net/bwdpictures/d916acdd-ab9f-429e-8b75-6d5f9206a9b4.jpg' }

I get a result back from the rest call in fiddler.

I'm sure that the problem is something with my code, but I have no idea what the issue is. If you have some suggestions, I would appreciate it.

TIA, Wally

azure
azure-cognitive-services

1 Answer

0

Bingo. The problem was that I had the Gender attribute in the face attributes twice. I just noticed it. When I took the second one out, the problem was solved. Sorry for the post.

answered on Stack Overflow May 18, 2019 by Wallace B. McClure

User contributions licensed under CC BY-SA 3.0