C# POST JSON 请求到 Google Vision

Enz*_* B. 4 c# post

被锁定在 .NET 2.0 上,我无法使用 GOOGLE VISION C# API,它仅在 .NET 4.0 之后可用。

所以我想在这样的网络请求中使用这个 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); 
}
Run Code Online (Sandbox Code Playgroud)

问题是我从谷歌永久获得了 400 的回报,经过大量搜索后我找不到解决方案。

你能给我一个方法来解决这个问题吗?非常感谢。

(抱歉英语不好...)

Max*_*der 5

您可以使用来自此 API 的请求和响应HTTP POST requestsCloud Vision API Client Libraries与之交互。

使用 HTTP 协议交换方法可以让您:

  • 不依赖于库版本和框架版本
  • 使用任何方式创建 HTTP 请求(HTTPClient 或 HTTPWebResponse 或其他)
  • 您收到与使用客户端库时相同的结果
  • 使用 Tasks 允许您在同步上下文中执行异步请求

可以通过以下方式执行用于文本检测的简单 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));
Run Code Online (Sandbox Code Playgroud)

带有 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();
    }
}
Run Code Online (Sandbox Code Playgroud)