c# - 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。
任何帮助,将不胜感激。
解决方案
请求 json 可以从 BatchAnnotateImagesRequest 对象序列化(一个 .ToString() 就足够了)。
至于响应,您最好使用内置
BatchAnnotateImagesResponse.Parser.ParseJson(response_str)
希望这可以帮助。
推荐阅读
- aes - Keytool - 生成 AES 公钥/私钥对
- ios - 警报不会关闭(警告:尝试从视图控制器中关闭...)
- android - 尝试使用 Anko verticalLayout 时出现 EOFException
- apache-kafka - Apache kafka 的 inter.broker.protocol.version 中的后缀
- push-notification - 如何使用 Google DialogFlow/Actions 通过推送通知发送和接收参数?
- react-native - 如何使用 props 从父组件获取状态
- postgresql - pg_restore: [archiver (db)] 处理目录时出错:
- node.js - 如何在 Typescript 中处理未分配的变量
- java - 这两种方法如何重构为一种方法
- angular - 我们如何在 angular7 中将焦点放在输入元素上