问题描述
我正在使用 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()
不幸的是我没有环境来测试这个。如果您尝试,请分享结果。我不认为可以将无限数量设置为最大数量,但您可能可以选择足够大的数量。