4

我将此交叉发布到 Cloud Vision 的 google 组......并添加了一些额外的发现。

以下是我认为相关的所有细节:

  • 使用 VB.NET 2010
  • 使用服务帐户身份验证
  • 仅限于 .NET 4.0
  • 使用这些 Google 库:Google.Api v1.10.0、Google.Apis.Auth v1.10.0、Google.Apis.Vision.v1 v1.12.0.45
  • 执行文本和安全搜索分析
  • 在请求中传递图像内容(不使用 Google Drive)

当每个请求只发送 4 张左右的图像时,事情就按预期工作了……我得到了响应和注释。

如果我将每个请求的图像数量增加到 8 个文件,则执行返回的响应不包含任何结果。没有错误,也没有异常。

只是一个零响应的 Google.Apis.Vision.v1.Data.BatchAnnotateImagesResponse 对象。使用网络流量监控工具,我看到了与 google vision 的连接——并且该服务返回了 200 服务器响应。但否则为空。

进一步的研究表明,我能够为每个整体请求成功地向 API 发送总共大约 1MB 的 base64 内容。此外,我得到了所描述的奇怪情况。

根据 API 文档,以下限制适用于 Google Cloud Vision API 的使用。

我没有看到任何可以打破记录限制的方法:每个请求 8 个文件,总大小小于 8MB,甚至没有文件接近 4MB。

关于我可能会错过什么的任何想法?以下记录的限制是否正确?

  • 每张图片 MB 4 MB
  • 每个请求的 MB 8 MB
  • 每秒请求数 10
  • 每天每个功能的请求数 700,000
  • 每月每个功能的请求数 20,000,000
  • 每秒图像数 8
  • 每个请求的图像 16
4

2 回答 2

1

事实证明,谷歌对请求的 gzip 压缩实现存在错误......我不确定 API 是否仅在请求大小达到某个阈值时才应用 gzip 压缩,或者实现错误是否适用于小请求,但不适用于大的。

这是我解决问题的方法(禁用 GZIP 是关键):

    Private Function GetAnalysisService() As VisionService
        Dim credential As GoogleCredential = Nothing

        credential = GoogleCredential.GetApplicationDefaultAsync().Result

        If credential.IsCreateScopedRequired Then
            credential = credential.CreateScoped(New String()  {VisionService.Scope.CloudPlatform})
        End If

        Dim ServiceInitializer = New VisionService.Initializer With {.ApplicationName = "TF Image Analysis", .HttpClientInitializer = credential}

        ServiceInitializer.GZipEnabled = False

        Return New VisionService(ServiceInitializer)
    End Function
于 2016-04-18T01:44:21.510 回答
0

我也想知道限制是否正确。

根据配额和限制以及支持的图像,对于托管在 Cloud Storage 或可公开访问的 URL 上的图像,最大图像文件大小应为20 MB 。还有最大 JSON 请求对象大小 (10 MB)。

我正在对托管在 Cloud Storage 上的图像使用选项,但对于大于 ~7.95 MB (12000 x 6500) 的图像,我收到一条错误消息:

responses {
  error {
    code: 3
    message: "Invalid image contents: gs://... ."
  }
}

对于尺寸较小的图像,我得到了正确的响应。

于 2018-05-15T06:15:37.160 回答