是否可以将实时滤镜应用于 android-camerax?

Is it possible to apply real time filter to android-camerax?

我正在使用 cameraX 录制视频。我需要使用 android-gpuimage 或任何其他库将实时滤镜应用于相机预览。可能吗?如果是,请提供一个例子。

    @SuppressLint("RestrictedApi")
    private fun startCamera() {
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
        cameraProviderFuture.addListener(Runnable {
            val cameraProvider = cameraProviderFuture.get()

            preview = Preview.Builder()
                .build()
            val cameraSelector = CameraSelector.Builder()
                .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                .build()

            videoCapture = VideoCaptureConfig.Builder()
                .build()

            try {
                cameraProvider.unbindAll()
                camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview, videoCapture)
                preview.setSurfaceProvider(viewFinder.createSurfaceProvider())
            } catch (e: Exception) {
                Log.e("CameraX", "Use case binding failed!", e)
            }
        }, ContextCompat.getMainExecutor(this))
    }

我在这个项目中使用的是 camerax 版本 1.0.0-beta06

CameraX 不正式支持视频和过滤,但您可以通过将 ImageAnalysis 的输出编码为视频来解决这个问题。

ImageAnalysis 的输出是 YUV420 字节数组。它可以使用 this code snippet 转换为 Bitmap,然后您可以对 Bitmap 应用 GPUImage 过滤器。然后将一系列 Bitmap 编码为视频。这在很多层面上都是低效的,但它应该有效。

您可以查看此代码示例以使用 GPUImage 过滤 CameraX 预览:https://github.com/xizhang/camerax-gpuimage