来自 Google Vision API 的空响应,图像存储在 Google Cloud Storage 中
Empty response from Google Vision API with an image stored in Google Cloud Storage
我正在尝试使用云视觉 API,我能够成功发出请求,但我的响应返回为空,即使 API 文档中提供了测试图像。
请求正文:
const imagePath = `gs://[bucket_name]/faulkner.jpg`;
const requestObject = {
requests: [
{
image: {
source: {
gcsImageUri: imagePath
}
},
features:[
{
type: 'LABEL_DETECTION',
maxResults: 100
}
]
}
]
};
响应正文:
{
"responses": [{}]
}
我什至尝试过使用云 API 控制台并复制请求字段,但这也行不通
const apiKey = 'myAPIKey';
const fields = `fields=responses(labelAnnotations)&`;
const visionAPI = `https://vision.googleapis.com/v1/images:annotate?${fields}key=${apiKey}`;
如有任何帮助,我们将不胜感激。
您是否使用适当的令牌执行 OAuth2。要将 Vision API 与 gCS 图像一起使用,我们不能只使用 API 键。
您是否尝试过使用 oauth2 访问密钥发出请求?如果您有 gcloud
工具,有一种快速而简单的方法可以在命令行上进行测试:
- Create and download a service account json key
设置 gcloud
以使用该服务帐户:
gcloud auth activate-service-account --key-file <service-account-file.json>
使用 gcloud auth print-access-token
获取访问令牌并使用它执行 curl
请求:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "content-type: application/json" \
--data-binary '{"requests": [{"image": {"source": {"gcs_image_uri": "gs://your-bucket/your-object.jpg"}}, "features": [{"type": "LABEL_DETECTION", "maxResults": 100}]}]}' \
"https://vision.googleapis.com/v1/images:annotate?alt=json"
不过,对于生产用途,您需要明确使用 oauth2 flow 来获取您的访问令牌,因为它们是短暂的并且需要刷新。
我遇到了这个问题,这对我有用...
- 您不需要 OAuth,只需要一个 API 密钥。
这是我做错了...
在我的 HTTP 调用中,我需要将我的请求包装在一个新的对象文字中,如
{data: requestBody }
澄清一下,
// My old call
HTTP.call("POST", "https://vision.googleapis.com/v1/images:annotate?key=myAPIKey", requestBody, myCallback);
// To my new call
HTTP.call("POST", "https://vision.googleapis.com/v1/images:annotate?key=myAPIKey", {data: requestBody}, myCallback);
// reqeustBody example
{
"requests":
[
{
"features":
[
{
"type": "LABEL_DETECTION"
}
],
"image":
{
"source":
{
"gcsImageUri": "gs://myBucketNameHere/myDemoImageNameHere.jpg"
}
}
}
]
}
注意:需要做的几件事。
- 图像在您的 Google 云平台存储桶中。
- 调用中的图像名称与存储中的名称完全一致。
- 图像必须有可检测的东西,即如果使用 FACE_DETECTION,图像必须有人脸。
- Google 云平台存储 中的图像必须 选中才能公开共享。
我正在对名为 demo-image.jpg 的图像使用与上面完全相同的调用,现在我包装了 requestBody 后一切正常。
我正在尝试使用云视觉 API,我能够成功发出请求,但我的响应返回为空,即使 API 文档中提供了测试图像。
请求正文:
const imagePath = `gs://[bucket_name]/faulkner.jpg`;
const requestObject = {
requests: [
{
image: {
source: {
gcsImageUri: imagePath
}
},
features:[
{
type: 'LABEL_DETECTION',
maxResults: 100
}
]
}
]
};
响应正文:
{
"responses": [{}]
}
我什至尝试过使用云 API 控制台并复制请求字段,但这也行不通
const apiKey = 'myAPIKey';
const fields = `fields=responses(labelAnnotations)&`;
const visionAPI = `https://vision.googleapis.com/v1/images:annotate?${fields}key=${apiKey}`;
如有任何帮助,我们将不胜感激。
您是否使用适当的令牌执行 OAuth2。要将 Vision API 与 gCS 图像一起使用,我们不能只使用 API 键。
您是否尝试过使用 oauth2 访问密钥发出请求?如果您有 gcloud
工具,有一种快速而简单的方法可以在命令行上进行测试:
- Create and download a service account json key
设置
gcloud
以使用该服务帐户:gcloud auth activate-service-account --key-file <service-account-file.json>
使用
gcloud auth print-access-token
获取访问令牌并使用它执行curl
请求:curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "content-type: application/json" \ --data-binary '{"requests": [{"image": {"source": {"gcs_image_uri": "gs://your-bucket/your-object.jpg"}}, "features": [{"type": "LABEL_DETECTION", "maxResults": 100}]}]}' \ "https://vision.googleapis.com/v1/images:annotate?alt=json"
不过,对于生产用途,您需要明确使用 oauth2 flow 来获取您的访问令牌,因为它们是短暂的并且需要刷新。
我遇到了这个问题,这对我有用...
- 您不需要 OAuth,只需要一个 API 密钥。
这是我做错了...
在我的 HTTP 调用中,我需要将我的请求包装在一个新的对象文字中,如
{data: requestBody }
澄清一下,
// My old call
HTTP.call("POST", "https://vision.googleapis.com/v1/images:annotate?key=myAPIKey", requestBody, myCallback);
// To my new call
HTTP.call("POST", "https://vision.googleapis.com/v1/images:annotate?key=myAPIKey", {data: requestBody}, myCallback);
// reqeustBody example
{
"requests":
[
{
"features":
[
{
"type": "LABEL_DETECTION"
}
],
"image":
{
"source":
{
"gcsImageUri": "gs://myBucketNameHere/myDemoImageNameHere.jpg"
}
}
}
]
}
注意:需要做的几件事。
- 图像在您的 Google 云平台存储桶中。
- 调用中的图像名称与存储中的名称完全一致。
- 图像必须有可检测的东西,即如果使用 FACE_DETECTION,图像必须有人脸。
- Google 云平台存储 中的图像必须 选中才能公开共享。
我正在对名为 demo-image.jpg 的图像使用与上面完全相同的调用,现在我包装了 requestBody 后一切正常。