C# 向 Google Vision 发送 POST JSON 请求

4
由于被限制在.NET 2.0上,我无法使用仅适用于.NET 4.0及以上版本的GOOGLE VISION C# API。
因此,我想通过Web请求来使用这个API,就像这样:
string webAddr = "https://vision.googleapis.com/v1/images:annotate?key=XXXXXXXXXXX";

var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = " { \"requests\": [ { \"image\": { \"content\": " + this.b64 + " }, \"features\": [ {\"type\": \"TEXT_DETECTION\" }] }] }";
    
    streamWriter.Write(json);
    streamWriter.Flush();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var responseText = streamReader.ReadToEnd();
    Console.WriteLine(responseText); 
}

问题是我在谷歌上一直收到400的返回,经过很多搜索后我找不到解决办法。
我该如何解决这个问题?

很可能您的请求无效。请检查JSON内容是否正确。 - P.N.
谢谢您的帮助。我觉得它很好,因为它是我在我的JavaScript代码中使用的相同的方法,而且还能正常运行。我该如何检查它?使用断点吗? - Enzo B.
1个回答

5
您可以使用HTTP POST请求Cloud Vision API客户端库与此API的请求和响应进行交互。
使用HTTP协议交换方法可以让您:
  • 不依赖于库版本和框架版本
  • 使用任何HTTP请求创建方式(HTTPClient或HTTPWebResponse或另一种)
  • 获得与使用客户端库相同的结果
  • 使用任务允许您在同步上下文中执行异步请求
对于文本检测,可以通过以下方式进行简单的Cloud Vision API使用:
string base64string = "";
Bitmap bmpArea = null;

//preparing our image
using (MemoryStream m = new MemoryStream())
{
    bmpArea.Save(m, ImageFormat.Jpeg);
    byte[] imageBytes = m.ToArray();

    base64string = Convert.ToBase64String(imageBytes);
}
//call request asynchronically
Task.Run(async () => await Google_Vision_API_Request(base64string));

使用JSON内容的请求示例:

public async Task Google_Vision_API_Request(string base64string)
{
    HttpResponseMessage response;
    using (var client = new HttpClient())
    {

        string myJson = $@"{{
                    ""requests"":[
                        {{
                            ""image"":{{
                                ""content"": ""{base64string}""
                            }},
                            ""features"":[
                                {{
                                    ""type"": ""TEXT_DETECTION""
                                }}
                            ]
                        }}
                    ]
                }}";

        string requestUri = "https://vision.googleapis.com/v1/images:annotate?key=";
        requestUri += google_api_key_var;
        response = await client.PostAsync(
            requestUri,
            new StringContent(myJson, Encoding.UTF8, "application/json"));

        responseStr = await response.Content.ReadAsStringAsync();
    }
}

谢谢您的回答,在JSON的情况下是正确的。另一方面,我忘记了指定我被.NET 2.0阻止了,因此我无法使用Vision API。感谢您的帮助。 - Enzo B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接