如何获取MLKitAnalyzer分析过程中所使用的图像?
访问MLKitAnalyzer识别标签对应的源图像
你可以通过MlKitAnalyzer.Result对象的getImage()方法直接获取标签对应的源图像,具体修改你的代码如下:
// ***************** Analyze with MLKit imageLabeler val options = ImageLabelerOptions.Builder() .setConfidenceThreshold(0.7f) .build() val imageLabeler = ImageLabeling.getClient(options) val detectors = listOf(imageLabeler) val analyzer = MlKitAnalyzer( detectors, ImageAnalysis.COORDINATE_SYSTEM_ORIGINAL, executor ) { result -> val labels = result.getValue(imageLabeler) if (labels.isNullOrEmpty()) { // 关闭图像避免内存泄漏 result.image.close() return@MlKitAnalyzer } // 获取标签对应的源图像 val sourceImage = result.image try { // 在这里对源图像执行进一步分析操作 // 例如转换为Bitmap、处理YUV格式数据等 Log.d(TAG, "源图像格式:${sourceImage.format}") var labelResult = "" for (label in labels) { val text = label.text val confidence = (label.confidence * 100).toInt() labelResult += "$text $confidence%\n" } Log.d(TAG, "*****************Image Labelling result $labelResult") } finally { // 必须调用close()释放图像资源,防止内存泄漏 sourceImage.close() } } val imageAnalysis = ImageAnalysis.Builder() .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .build() imageAnalysis.setAnalyzer(executor, analyzer)
关键注意事项:
- 获取到的
sourceImage是ImageProxy对象,使用完成后必须调用close()方法释放底层资源,否则会引发内存泄漏问题。 - 源图像默认格式为
ImageFormat.YUV_420_888,如果需要转换为Bitmap或其他格式,可以借助CameraX工具类或自行处理YUV数据。 - 建议将图像操作放在
try-finally块中,确保无论是否发生异常,图像资源都会被正确释放。
内容的提问来源于stack exchange,提问作者Bo Hellgren
相关产品推荐
相关产品推荐

