发出 Vision API 请求

Cloud Vision API 是一个 REST API,它可使用 HTTP POST 操作对您在请求中发送的图片执行数据分析。该 API 使用 JSON 处理请求和响应。

摘要

  • 请求是对 https://vision.googleapis.com/v1/images:annotate 的 POST 请求。
  • 您必须对请求进行身份验证
  • 请求正文如此处所示。 响应与此处的内容有些类似,但字段有所不同,具体取决于您使用的注释类型。
  • 此处说明了如何使用 cURL 发送请求
  • 此外,还介绍了客户端库
  • 想要寻找快速演示?只需拖放即可!

端点

Vision API 包含一个支持一种 HTTP 请求方法 (annotate) 的端点 (https://vision.googleapis.com/v1/images):

POST https://vision.googleapis.com/v1/images:annotate

身份验证

POST 请求必须通过传递 API 密钥或 OAuth 令牌进行身份验证。如需了解详细信息,请参阅身份验证页面。

JSON 请求格式

POST 请求的正文包含一个 JSON 对象,该对象包含一个 requests 列表,该列表本身包含一个或多个类型为 AnnotateImageRequest 的对象:

{
  "requests":[
    {
      "image":{
        "content":"/9j/7QBEUGhvdG9...image contents...eYxxxzj/Coa6Bax//Z"
      },
      "features":[
        {
          "type":"LABEL_DETECTION",
          "maxResults":1
        }
      ]
    }
  ]
}

每个请求都符合以下条件:

  • 必须包含 requests 列表。

requests 列表中:

  • image 指定图片文件。它可以作为 base64 编码字符串、Cloud Storage 文件位置或可公开访问的网址发送。请参阅提供图片了解详情。

  • features 用于列出要对图片执行的注释类型。您可以指定一个或多个类型以及要为每个类型返回的 maxResults

  • imageContext(上例中未显示)指定服务提示以帮助进行注释:边界框、语言和剪裁提示宽高比。

提供图片

您可以通过以下三种方式之一在请求中提供图片:

  • 以 Base64 编码图片字符串的形式。如果图片存储在本地,您可以将其转换为字符串并将其作为 image.content 的值传递:

    {
      "requests":[
        {
          "image":{
            "content":"/9j/7QBEUGhvdG9zaG9...image contents...fXNWzvDEeYxxxzj/Coa6Bax//Z"
          },
          "features":[
            {
              "type":"FACE_DETECTION",
              "maxResults":10
            }
          ]
        }
      ]
    }
    

    如需了解如何在各种平台上进行编码,请参阅 Base64 编码

  • Cloud Storage URI 的形式。将完整的 URI 作为 image.source.imageUri 的值传递:

    {
      "requests":[
        {
          "image":{
            "source":{
              "imageUri":
                "gs://bucket_name/path_to_image_object"
            }
          },
          "features":[
            {
              "type":"LABEL_DETECTION",
              "maxResults":1
            }
          ]
        }
      ]
    }
    

    Cloud Storage 中的文件必须可以通过您正在使用的身份验证方法访问。如果您使用的是 API 密钥,则文件必须可公开访问。如果您使用的是服务账号,则文件必须可供创建相应服务账号的用户访问。

  • 以可公开访问的 HTTP 或 HTTPS 网址的形式。将网址作为 image.source.imageUri 的值传递:

    {
      "requests":[
        {
          "image":{
            "source":{
              "imageUri":
                "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"
            }
          },
          "features":[
            {
              "type":"LOGO_DETECTION",
              "maxResults":1
            }
          ]
        }
      ]
    }
    

    从 HTTP/HTTPS 网址中提取图片时,Google 无法保证请求将会完成。如果指定的主机拒绝请求(例如,由于请求限制或 DoS 攻击防范),或者如果 Google 为了防止滥用而限制对网站的请求,则您的请求可能会失败。作为最佳实践,对于生产应用不要依赖外部托管的图片。

JSON 响应格式

annotate 请求会收到 AnnotateImageResponse 类型的 JSON 响应。 尽管每种特征类型的请求都类似,但每种特征类型的响应可能截然不同。 如需了解完整信息,请参阅 Vision API 参考

以下代码演示了如下照片的示例标签检测响应:

{
  "responses": [
    {
      "labelAnnotations": [
        {
          "mid": "/m/0bt9lr",
          "description": "dog",
          "score": 0.97346616
        },
        {
          "mid": "/m/09686",
          "description": "vertebrate",
          "score": 0.85700572
        },
        {
          "mid": "/m/01pm38",
          "description": "clumber spaniel",
          "score": 0.84881884
        },
        {
          "mid": "/m/04rky",
          "description": "mammal",
          "score": 0.847575
        },
        {
          "mid": "/m/02wbgd",
          "description": "english cocker spaniel",
          "score": 0.75829375
        }
      ]
    }
  ]
}

客户端库

Google 以多种编程语言提供客户端库,可简化构建和发送请求以及接收和解析响应的过程。

如需查看安装和使用说明,请参阅客户端库