如何在 spring CloudVisionTemplate 中设置 maxResults |谷歌视觉 API Java

问题描述

我正在使用 Spring org.springframework.cloud.gcp.vision.CloudVisionTemplate 使用 Google Vision API 检测图像中的标签,如下所示:

AnnotateImageResponse annotateImageResponse = cloudVisionTemplate.analyzeImage(imageResource,Feature.Type.LABEL_DETECTION);
        annotationList = annotateImageResponse.getLabelAnnotationsList();

认情况下,它似乎只获取 10 个结果,但我们需要检测到所有标签。我浏览了 Google API doc,它提到了一个参数 maxResults

但是这是使用 REST API 描述的。我正在寻找如何在 Java 或 Google Vision Java SDK 中使用 spring maxResults 设置此 CloudVisionTemplate

解决方法

我没有在任何文档中发现 10 个结果的限制,但是我在文档中的 Try this API 上对其进行了测试。当我从请求中删除 "maxResults": 5, 时,它确实返回了 10 个结果。我厌倦了 "maxResults": 100 并返回了 30 多个结果。

在 Java API 中似乎是可能的,但不能使用 CloudVisionTemplate。它的实现在 github 上可用并且它不是非常复杂......我们可以看到 Feature 仅使用列表中的类型作为参数提供(在 128 行中):

Feature.newBuilder().setType(featureType).build()

现在在 Java API 参考中,我们可能会发现这个 Feature.builder 包含 method setMaxResults。因此,您可以自定义 cloudVisionTemplate 或使用以下内容创建自己的代码:

Feature.newBuilder().setType(Feature.Type.LABEL_DETECTION).setMaxResults(100).build()

不幸的是我没有环境来测试这个。如果您尝试,请分享结果。我不认为可以将无限数量设置为最大数量,但您可能可以选择足够大的数量。