如何使用 CameraX 禁用降噪功能
How to disable noise reduction with CameraX
所以我有一个使用 CameraX ImageCapture 用例拍摄自拍照片的应用程序,然后将其传递给 AI 算法以用它做一些事情。
现在,我有一位使用三星 Galaxy S21 的用户,当他在特定光线条件下的特定位置拍照时,生成的图像无法按 AI 算法的预期工作。我自己检查了这些图像,发现问题 似乎 是 ImageCapture 应用了强大的降噪功能,如此强大以至于即使对于人眼来说它看起来也不对,就像它是一幅画一样一张照片。
我向该用户发送了此类应用程序的修改版本,以尝试从分析用例中捕获图像,而生成的图像没有那个问题,所以不管它是什么,它似乎都是一些 post-由 ImageCapture 用例完成但在 Analysis 用例中未完成的处理。
现在,我似乎找不到在 CameraX 中调整此 post 处理的方法,事实上我什至还没有找到如何使用 Camera2 进行调整。起初我以为它可能是 HDR,我发现在 CameraX 中有一些扩展可以启用 HDR、夜间模式等,但根据文档,所有这些默认情况下都是禁用的,就你使用 DEFAULT_FRONT_CAMERA none应该适用,这就是我正在使用的。
CameraSelector.DEFAULT_FRONT_CAMERA
无论如何,很明显在 ImageCapture 用例中对这些图像进行了一些繁重的 post 处理,所以我想知道如何禁用这些。
顺便说一句,我尝试用 CAPTURE_MODE_MINIMIZE_LATENCY 初始化 ImageCapture 用例,希望这样的标志能减少 post 处理并希望消除降噪,但这没有用。
imageCapture = new ImageCapture.Builder()
.setTargetResolution(resolution)
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build();
关于如何超越此以禁用降噪滤波器的任何想法?
谢谢,
弗兰
我找到了使用 Camera2Interop.Extender 的方法:
private void initImageCapture(Size resolution) {
Log.d(TAG, "initCameraCapture: ");
ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder();
imageCaptureBuilder
.setTargetResolution(resolution)
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY);
Camera2Interop.Extender extender = new Camera2Interop.Extender(imageCaptureBuilder);
extender.setCaptureRequestOption(CaptureRequest.NOISE_REDUCTION_MODE, CaptureRequest.NOISE_REDUCTION_MODE_OFF);
imageCapture = imageCaptureBuilder.build();
}
所以我有一个使用 CameraX ImageCapture 用例拍摄自拍照片的应用程序,然后将其传递给 AI 算法以用它做一些事情。
现在,我有一位使用三星 Galaxy S21 的用户,当他在特定光线条件下的特定位置拍照时,生成的图像无法按 AI 算法的预期工作。我自己检查了这些图像,发现问题 似乎 是 ImageCapture 应用了强大的降噪功能,如此强大以至于即使对于人眼来说它看起来也不对,就像它是一幅画一样一张照片。
我向该用户发送了此类应用程序的修改版本,以尝试从分析用例中捕获图像,而生成的图像没有那个问题,所以不管它是什么,它似乎都是一些 post-由 ImageCapture 用例完成但在 Analysis 用例中未完成的处理。
现在,我似乎找不到在 CameraX 中调整此 post 处理的方法,事实上我什至还没有找到如何使用 Camera2 进行调整。起初我以为它可能是 HDR,我发现在 CameraX 中有一些扩展可以启用 HDR、夜间模式等,但根据文档,所有这些默认情况下都是禁用的,就你使用 DEFAULT_FRONT_CAMERA none应该适用,这就是我正在使用的。
CameraSelector.DEFAULT_FRONT_CAMERA
无论如何,很明显在 ImageCapture 用例中对这些图像进行了一些繁重的 post 处理,所以我想知道如何禁用这些。
顺便说一句,我尝试用 CAPTURE_MODE_MINIMIZE_LATENCY 初始化 ImageCapture 用例,希望这样的标志能减少 post 处理并希望消除降噪,但这没有用。
imageCapture = new ImageCapture.Builder()
.setTargetResolution(resolution)
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build();
关于如何超越此以禁用降噪滤波器的任何想法?
谢谢, 弗兰
我找到了使用 Camera2Interop.Extender 的方法:
private void initImageCapture(Size resolution) {
Log.d(TAG, "initCameraCapture: ");
ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder();
imageCaptureBuilder
.setTargetResolution(resolution)
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY);
Camera2Interop.Extender extender = new Camera2Interop.Extender(imageCaptureBuilder);
extender.setCaptureRequestOption(CaptureRequest.NOISE_REDUCTION_MODE, CaptureRequest.NOISE_REDUCTION_MODE_OFF);
imageCapture = imageCaptureBuilder.build();
}