You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:42:32