Google Vision批量图片标注如何将返回结果与请求图片一一对应
Google Vision 批量图片识别结果匹配方案
首先给出明确结论:Google Vision 批量标注接口的返回结果顺序,与你提交请求时的图片顺序完全一致,你可以直接依赖这个顺序完成识别结果与原图片的匹配。
Google Vision 的批量请求逻辑默认就没有提供自定义单请求标识的字段,接口设计的约定就是返回的响应列表下标与请求列表的下标严格对应,即使其中某几张图片识别失败,对应下标位置也会返回错误信息,不会打乱整体响应顺序。
你在 Kotlin 代码中可以按以下逻辑处理即可满足业务要求:
- 提前按顺序存储你需要识别的所有图片URL,生成一个固定顺序的源URL列表,也可以把对应图片的业务关联信息存在这个列表结构里
- 严格按照源列表的顺序构建批量标注的请求体
- 拿到接口返回的响应列表后,直接用下标索引对应源列表的对应元素,即可完成结果匹配
以下是简化的代码示例:
// 1. 提前构建固定顺序的图片任务列表,可关联业务标识 data class ImageTask(val url: String, val bizId: String) val imageTasks: List<ImageTask> = listOf( ImageTask("https://example.com/1.jpg", "biz123"), ImageTask("https://example.com/2.jpg", "biz456") ) // 2. 按顺序构建请求参数 val requests = imageTasks.map { task -> AnnotateImageRequest.newBuilder() .setImage(Image.newBuilder().setSource(ImageSource.newBuilder().setImageUri(task.url).build()).build()) .addFeatures(Feature.newBuilder().setType(Type.TEXT_DETECTION).build()) .build() }.toList() // 3. 发起批量调用 val response = visionClient.batchAnnotateImages(requests) // 4. 按下标匹配对应任务和识别结果 response.responsesList.forEachIndexed { index, annotateResponse -> val correspondingTask = imageTasks[index] if (annotateResponse.hasError()) { // 处理单张图片识别失败逻辑 } else { val detectedText = annotateResponse.fullTextAnnotation.text // 执行对应业务逻辑 } }
内容的提问来源于stack exchange,提问作者Caboney
相关产品推荐
相关产品推荐

