Как получить кадр предварительного просмотра с помощью CameraX?

Я работаю над проектом, который использует CameraX для отображения предварительного просмотра камеры на TextureView. Код взят из этой codelab. Я использовал метод setOnPreviewOutputUpdateListener() для обновления файла TextureView.

private fun startCamera() {
    val previewConfig = PreviewConfig.Builder().apply {
        setTargetAspectRatio( Rational( 1 , 1 ) )
        setTargetResolution( Size( 640 , 640 ) )
    }.build()
    val preview = Preview( previewConfig )
    preview.setOnPreviewOutputUpdateListener {
        val parent = cameraTextureView?.parent as ViewGroup
        parent.removeView( cameraTextureView )
        cameraTextureView?.surfaceTexture = it.surfaceTexture
        parent.addView( cameraTextureView , 0)
        updateTransform()
    }
    preview.removePreviewOutputListener()
    CameraX.bindToLifecycle( this , preview )
}

У меня вопрос, как получить необработанный объект byte[] из кадров предварительного просмотра с помощью CameraX. Я ожидаю чего-то похожего на метод onPreviewFrame(byte[] data, Camera camera).

По сути, мне нужны кадры в реальном времени (в byte[] или Bitmap) из предварительного просмотра с помощью CameraX.


person    schedule 24.09.2019    source источник


Ответы (1)


Вы будете использовать ImageAnalysis. Кадры предварительного просмотра будут переданы вашему анализатору в формате YUV_420_888.

При необходимости вы можете запросить неблокирующий режим анализа. Я бы рекомендовал установить обработчик для вашего анализатора, чтобы обратные вызовы камеры не поступали в поток пользовательского интерфейса.

person Alex Cohn    schedule 24.09.2019
comment
Спасибо @Alex Cohn's за ответ. - person Shubham Panchal; 27.09.2019
comment
Что, если вы также используете VideoCapture вместе с Preview? В этом случае вы получите исключение, пытаясь связать слишком много вариантов использования. См. Мой вопрос здесь: stackoverflow.com/q/61524671/1680301 - person Georgios; 30.04.2020
comment
В camerax , можно использовать только один вариант использования изображения и только один вариант использования видео, поэтому совместить ImageAnaysis и VideoCapture можно。 Используйте обратный вызов ImageAnaysis для получения изображения кадра предварительного просмотра , затем визуализируйте изображение с помощью GPUImageView для предварительного просмотра - person ProBlc; 27.05.2021