4

我正在尝试使用云视觉 API,并且我能够发出成功的请求,但我的响应返回为空,即使 API 文档中提供了测试图像。

请求正文:

const imagePath = `gs://[bucket_name]/faulkner.jpg`;
const requestObject = {
  requests: [
    {
      image: {
        source: {
          gcsImageUri: imagePath
        }
      },
      features:[
        {
          type: 'LABEL_DETECTION',
          maxResults: 100
        }
      ]
    }
  ]
};

福克纳.jpg

回复正文:

{
  "responses": [{}]
}

我什至尝试使用云 API 控制台并复制请求字段,但这也不起作用

const apiKey = 'myAPIKey';
const fields = `fields=responses(labelAnnotations)&`;
const visionAPI = `https://vision.googleapis.com/v1/images:annotate?${fields}key=${apiKey}`;

任何帮助将不胜感激。

4

3 回答 3

0

您是否使用适当的令牌进行 OAuth2。对于将 Vision API 与 gCS 图像一起使用,我们不能只使用 API 密钥。

于 2016-02-29T16:50:34.043 回答
0

您是否尝试过使用 oauth2 访问密钥发出请求?如果你有这个gcloud工具,有一种快速而简单的方法可以在命令行上测试它:

  • 创建并下载服务帐户 json 密钥
  • 设置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 流程来获取访问令牌,因为它们是短暂的并且需要刷新。

于 2016-03-02T01:58:32.987 回答
0

我遇到了这个确切的问题,这对我有用......

  1. 您不需要 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"
              }
          }
      }
    ]
  }

注意:需要做的一些事情。

  1. 图片在您的 Google Cloud Platform 存储桶中。
  2. 调用中的图像名称与存储中的图像名称完全相同。
  3. 图像必须有要检测的东西,即如果使用 FACE_DETECTION,图像必须有人脸。
  4. 必须选中Google Cloud Platform Storage 中的图像才能公开共享

我正在对名为demo-image.jpg的图像使用上面相同的调用,并且现在我包装了 requestBody,一切正常。

于 2016-04-01T17:53:46.040 回答