2016-06-19 14 views
0

Ich versuche, JSON-Daten aus einem Bild mit Microsoft's FaceAPI zu erhalten. Ich erhalte einen Statuscode OK, bekomme aber nichts Wichtiges zurück. Ich habe überprüft, dass der MemoryStream über die richtigen Daten verfügt (die ich von einem Image-Steuerelement erhalte), indem er sie in einer Datei speichert.Keine JSON-Daten von Microsoft FaceAPI empfangen

private async Task<string> GetJSON() 
    { 
     var client = new HttpClient(); 
     var queryString = HttpUtility.ParseQueryString(string.Empty); 

     // Request headers 
     client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "mykey"); 

     // Request parameters 
     queryString["returnFaceId"] = "true"; 
     queryString["returnFaceLandmarks"] = "false"; 
     var uri = "https://api.projectoxford.ai/face/v1.0/detect?" + queryString; 

     HttpResponseMessage response; 

     // Request body 
     byte[] byteData = ImageToByte(); 


     using (var content = new ByteArrayContent(byteData)) 
     { 
      content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
      response = await client.PostAsync(uri, content); 
     } 

     return ""; 
    } 

    private byte[] ImageToByte() 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
      videoBox.Dispatcher.Invoke(delegate 
      { 
       var encoder = new PngBitmapEncoder(); 

       var flippedBitmap = new TransformedBitmap(); 
       flippedBitmap.BeginInit(); 
       flippedBitmap.Source = (BitmapSource)videoBox.Source; 
       var transform = new ScaleTransform(-1, 1); 
       flippedBitmap.Transform = transform; 
       flippedBitmap.EndInit(); 
       encoder.Frames.Add(BitmapFrame.Create(flippedBitmap)); 
       encoder.Save(stream); 

      }); 

      using (FileStream test = new FileStream("snapshot.bmp", FileMode.Create)) 
      { 
       stream.Position = 0; 
       stream.CopyTo(test); 
      } 

      return stream.ToArray(); 
     } 
    } 

Antwort

1

Sie möchten await response.Content.ReadAsStringAsync() anrufen, um den JSON zu erhalten.

Alternativ können Sie das Microsoft.ProjectOxford.Face NuGet-Paket verwenden, das die Installation für Sie übernimmt und C# -Typen bereitstellt, wodurch Sie die Mühe des JSON-Parsens erübrigen.

+0

Die Verwendung des Pakets ist, was ich getan habe. Trotzdem gut zu wissen. Vielen Dank! –

0

Ich bin nicht # Programmierer ac aber nach an Ihrem Code suchen, Methode GetJSON hart codiert leeren String zurückgibt, die die Ursache sein könnten Sie nicht vom Server immer etwas zurück, nachdem diese Methode oder zweite Grund Aufruf könnte Wenn Ihre asynchrone Serverkonfiguration nicht ordnungsgemäß funktioniert, wird sie zuerst leer und später tatsächlich ausgeführt.

+0

Ich benutze die Funktion noch nicht, aber wenn ich den Wert der Antwort (mit Hilfe von Haltepunkten) untersuche, liefert sie zwar einige Daten, aber nichts davon bezieht sich auf das Bild. –

Verwandte Themen