GCP Label Detection对接AEM资产调用返回400错误问题求助
Google Cloud Vision标签检测400错误排查方案
- 校验请求
features字段配置
人脸检测和标签检测需要指定不同的feature类型,人脸检测对应FACE_DETECTION,标签检测对应LABEL_DETECTION。检查构造标签检测请求时,是否正确配置了features数组,是否存在类型拼写错误、字段漏传、数组为空的问题。正确的features配置参考:"features": [{"type": "LABEL_DETECTION", "maxResults": 10}] - 排查InputStream重复消费问题
InputStream是单向只读流,如果你先使用该InputStream调用了人脸检测服务,流指针会移动到末尾,后续调用标签检测时读取到的内容为空,会被Google服务判定为未上传图片。解决方案:- 每次调用Vision服务前,重新从AEM Rendition处获取新的InputStream
- 首次获取流时就转为字节数组缓存,后续调用直接使用缓存的字节数组:
AssetManager assetMgr = resolver.adaptTo(AssetManager.class); Asset myAsset = assetMgr.getAsset(payload); Rendition myRen = myAsset.getRendition(payload + Constants.originalRendition); InputStream is = myRen.getStream(); // 缓存为字节数组重复使用 byte[] imageBytes = org.apache.commons.io.IOUtils.toByteArray(is); - 校验图片字段配置
检查构造请求时,图片内容是否放在了正确的字段下:使用本地文件流调用时需要将图片的Base64编码内容放在image.content字段下,如果错填为仅用于Google Cloud Storage路径的image.source字段,也会被判定为未指定图片。 - 打印完整请求校验格式
在调用接口前打印完整的请求JSON字符串,和官方要求的请求结构对比,确认无字段缺失、格式错误、拼写错误。官方标准标签检测请求结构参考:{ "requests": [ { "image": { "content": "图片Base64编码内容" }, "features": [ { "type": "LABEL_DETECTION", "maxResults": 10 } ] } ] }
内容的提问来源于stack exchange,提问作者developer
相关产品推荐
相关产品推荐

