Android CameraX:将图像分析输出位图显示回 PreviewView

问题描述 投票:0回答:1

我正在使用 CameraX 图像分析 API 来获取相机源的每一帧。

然后,我通过 ML 模型处理图像代理,该模型会转换图像帧。 ML 管道的输出是具有新样式的相机帧位图。

如何将推理输出位图显示回 Jetpack 撰写应用程序中的 PreviewView?这是实时摄像头的画面。

android android-jetpack-compose android-camera surfaceview android-camerax
1个回答
0
投票

请查看OverlayEffect API。您需要创建一个具有一定队列深度的

OverlayEffect
。深度取决于您的 ML 模型的速度。然后,当您的 ML 模型返回
Bitmap
时,使用 OverlayEffect#drawFrameAsync 释放预览帧。未经测试的示例代码:

val effect = OverlayEffect(PREVIEW | VIDEO_CAPTURE, 8, handler) {}
effect.setOnDrawListener { frame ->
  val canvas = frame.getOverlayCanvas()
  canvas.drawBitmap(...)
  return true
}

imageAnalysis.setAnalyzer(executor)  { imageProxy ->
  val bitmap = getBitmapWithMlModel(imageProxy)
  // release the frame from the queue
  effect.drawFrameAsync(imageProxy.imageInfo.timestamp)
  // The draw the Bitmap in the listener above
}

但是,我应该指出,分析 ImageAnalysis 图像并生成位图是在 CPU 上进行的,这可能会很慢。理想的方法是使用 GPU 分析和绘制图像,例如使用 OpenGL。

© www.soinside.com 2019 - 2024. All rights reserved.