是否可以将实时滤镜应用于 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
我正在使用 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