2017-01-04 4 views
0

Im den Microsoft API von Bing Bild verwenden Dem Versuch beschrieben hereMicrosoft Cognitive API Bildersuche

Ich möchte nur die Bild Einsichten verwenden ähnliche Bilder zu finden, indem ein Bild auf dem Körper der Post-Anforderung senden, wie die doc sagt, dass ich eine URL oder das Bild zur Verfügung stellen kann.

Das Bild wird von einer Telefonkamera erfasst und an die API gesendet, die Idee besteht darin, ähnliche Bildergebnisse zu erzielen.

Zuerst bekam ich einen Fehler, der besagt, dass der 'q' Parameter benötigt wurde, aber ich möchte keine Suchabfrage nur das Bild verwenden.

Also änderte ich die Contenttype auf „multipart/form-data“ und verwendet „/ search? ModulesRequested = SimilarImages“

Das i erhalten, Antwort der api einen Fehler nicht etwas wie jetzt zu tun scheint, ist nur ein leere string so im wirklich hier verloren ...

Heres mein Code, um die Anfrage zu senden.

 public async Task<string> GetImageInsights(byte[] image) 
    { 
     var uri = "https://api.cognitive.microsoft.com/bing/v5.0/images/search?modulesRequested=similarimages"; 

     var response = await RequestHelper.MakePostRequest(uri, new string(Encoding.UTF8.GetChars(image)), key, "multipart/form-data"); 

     var respString = await response.Content.ReadAsStringAsync(); 

     return respString; 
    } 
    public static async Task<HttpResponseMessage> MakePostRequest(string uri, string body, string key, string contentType) 
    { 
     var client = new HttpClient(); 

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

     // Request body 
     byte[] byteData = Encoding.UTF8.GetBytes(body); 

     using (var content = new ByteArrayContent(byteData)) 
     { 
      content.Headers.ContentType = new MediaTypeHeaderValue(contentType); 
      return await client.PostAsync(uri, content); 
     } 
    } 

Im C# mit Xamarin auf Android

Antwort

1

für den Dienst korrekt zu arbeiten, sowohl einen Namen und den Dateinamen für die Form Teil erforderlich:

public async Task<string> GetImageInsights(byte[] image) 
{ 
    var uri = "https://api.cognitive.microsoft.com/bing/v5.0/images/search?modulesRequested=similarimages"; 

    var response = await RequestHelper.MakePostRequest(uri, image, key); 

    var respString = await response.Content.ReadAsStringAsync(); 

    return respString; 
} 

class RequestHelper 
{ 
    public static async Task<HttpResponseMessage> MakePostRequest(String uri, byte[] imageData, string key) 
    { 
     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key); 

      var content = new MultipartFormDataContent(); 
      content.Add(new ByteArrayContent(imageData), "image", "image.png"); 

      return await client.PostAsync(uri, content); 
     } 
    } 
} 
+0

Es ist immer noch nicht, es funktioniert gibt nur eine leere Zeichenfolge zurück, was das bedeutet? sollte es nicht irgendeine Art von Fehler zurückgeben? – Nanoc

+0

Ich gehe davon aus, dass ein leeres Ergebnis bedeutet, dass ähnliche Bilder nicht gefunden wurden. Was passiert, wenn Sie ein gemeinsames Bild aus dem Internet versuchen? – cthrash

+0

Es stellte sich heraus, das leere Ergebnis war der Server 404 und wurde durch mein Bild größer als 1 MB verursacht, einmal behoben, dass ich bekomme einen Fehler für den fehlenden q-Parameter, wenn ich imgurl es nicht für die Abfrage warum den Postkörper zu benutzen tut? – Nanoc

Verwandte Themen