Microsoft认知API图像搜索

时间:2017-01-04 11:48:56

标签: c# android image microsoft-cognitive

我尝试使用Bing图像的Microsoft API here

我只想通过在帖子请求正文中发送图片来使用图片洞察来查找类似的图片,因为文档说我可以提供网址或图片。

图像由手机摄像头拍摄并发送到api,其目的是最终获得类似的图像效果。

起初我得到一个错误,说'q'参数是必需的,但我不想只使用搜索查询图像。

所以我将ContentType更改为“multipart / form-data”并使用“/ search?modulesRequested = similarimages”

这似乎做了一些事情,因为现在我没有得到任何错误,api响应只是一个空字符串所以我真的失去了...

继承我发送请求的代码。

        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);
        }
    }

我在Android上使用C#和Xamarin

1 个答案:

答案 0 :(得分:1)

要使服务正常工作,表单部分需要名称和文件名:

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);
        }
    }
}