我正在使用 CameraX 图像分析 API 来获取相机源的每一帧。
然后,我通过 ML 模型处理图像代理,该模型会转换图像帧。 ML 管道的输出是具有新样式的相机帧位图。
如何将推理输出位图显示回 Jetpack 撰写应用程序中的 PreviewView?这是实时摄像头的画面。
请查看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。