如何在Spring CloudVisionTemplate中设置Google Vision API的maxResults参数
解决方案
你可以通过以下两种方式设置maxResults参数,获取全部检测标签:
方案1:使用Google Vision Java SDK自定义请求(推荐)
原生SDK支持灵活配置请求参数,可直接在构造Feature时指定maxResults,设置为足够大的数值(如100,Google Vision标签检测返回上限通常不超过该值)即可拿到全部结果,代码示例如下:
import com.google.cloud.vision.v1.AnnotateImageRequest; import com.google.cloud.vision.v1.AnnotateImageResponse; import com.google.cloud.vision.v1.Feature; import com.google.cloud.vision.v1.Feature.Type; import com.google.cloud.vision.v1.Image; import com.google.cloud.vision.v1.ImageAnnotatorClient; import com.google.protobuf.ByteString; import org.springframework.core.io.Resource; import java.io.IOException; import java.util.ArrayList; import java.util.List; // 方法内部逻辑 try (ImageAnnotatorClient visionClient = ImageAnnotatorClient.create()) { // 读取图片资源转字节流 ByteString imgBytes = ByteString.readFrom(imageResource.getInputStream()); Image img = Image.newBuilder().setContent(imgBytes).build(); // 配置标签检测的maxResults参数 Feature feature = Feature.newBuilder() .setType(Type.LABEL_DETECTION) .setMaxResults(100) .build(); AnnotateImageRequest request = AnnotateImageRequest.newBuilder() .addFeatures(feature) .setImage(img) .build(); List<AnnotateImageRequest> requests = new ArrayList<>(); requests.add(request); AnnotateImageResponse response = visionClient.batchAnnotateImages(requests).getResponses(0); annotationList = response.getLabelAnnotationsList(); } catch (IOException e) { // 自行处理异常 }
方案2:基于Spring CloudVisionTemplate适配
Spring封装的CloudVisionTemplate默认analyzeImage方法没有暴露maxResults配置,可通过两种方式调整:
- 方式一:从
CloudVisionTemplate获取原生ImageAnnotatorClient实例,后续逻辑和方案1完全一致,获取方式如下:
ImageAnnotatorClient client = cloudVisionTemplate.getImageAnnotatorClient();
- 方式二:自行构造
AnnotateImageRequest对象,调用CloudVisionTemplate内置的请求执行方法:
// 构造image、feature的逻辑同方案1 AnnotateImageRequest request = AnnotateImageRequest.newBuilder() .addFeatures(Feature.newBuilder() .setType(Type.LABEL_DETECTION) .setMaxResults(100) .build()) .setImage(img) .build(); AnnotateImageResponse response = cloudVisionTemplate.executeAnnotateImageRequest(request); annotationList = response.getLabelAnnotationsList();
内容的提问来源于stack exchange,提问作者pankaj
相关产品推荐
相关产品推荐

