首页 > 解决方案 > Google Cloud Vision 返回空响应

问题描述

我正在尝试构建一个 C# 库,它将充当一组 Google API 的包装器。使用 Google Vision API 时,我发现该 API 针对某些查询返回一个空响应集。例如,当我尝试在 car.png 上运行 FACE_ANNOTATION 时我得到的响应是:

{
  "responses": [
    {}
  ]
}

我已经消除了所有基本问题,例如将图像存储在 Google Cloud 存储桶中、图像的公共访问、有效的 API 密钥、从 Google API 仪表板启用 API。

下面是我提出请求的一段代码:

httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

// The API address to which we will make the HTTP POST query
String request_query = "v1/images:annotate?" + $"key={APIKey}";
HttpResponseMessage response = await httpClient.PostAsJsonAsync(request_query, imageRequests);

Stream stream = await response.Content.ReadAsStreamAsync();
StreamReader streamReader = new StreamReader(stream);
String response_str = streamReader.ReadToEnd();        
Console.WriteLine(response_str);

if (response.IsSuccessStatusCode) {
    try {
        imageResponseList = JsonConvert.DeserializeObject<AnnotateImageResponseList>(response_str);

     } catch (JsonSerializationException e) {
         Debug.WriteLine(e.StackTrace);
     }
}

这是发送到 API 的请求正文(在我上面的代码中调用的 imageRequests):

{
  "requests": [
    {
      "image":
       {
         "content":"",
         "source":
         {
           "imageUri":"gs://<google_cloud_bucket>/car.png"
         }
       },
       "features":[
         {
           "type":0,
           "maxResults":100,
           "model":"builtin/stable"
         } 
       ],
       "imageContext":null
    }
  ]
}

现在,我知道已经有一个可以直接使用的 C# 客户端,但是我正在处理的项目需要我通过 HTTP 请求访问 REST API。

任何帮助,将不胜感激。

标签: c#google-apigoogle-cloud-vision

解决方案


请求 json 可以从 BatchAnnotateImagesRequest 对象序列化(一个 .ToString() 就足够了)。

至于响应,您最好使用内置

BatchAnnotateImagesResponse.Parser.ParseJson(response_str)

希望这可以帮助。


推荐阅读