我正在研究新的CameraX API,与从我们当前的Camera2系统切换过来的可行性有关。
在我们的Camera2系统中,我们使用OpenGL surface从PreviewCaptureSession中捕获帧,并且我们在大多数设备上达到了一致的30fps图像处理速度,有些设备在启用自动曝光设置的情况下能够达到60fps。
CameraX没有给出任何接近这个速度的东西,我不确定是不是我错过了设置。
我已经为CameraX和ImageAnalysis设置了测试示例,但我得到的帧率对通过的图像数量是锁定的。
例如,我可以将分辨率低至320x240至1920x960,并且两者都将以16fps(似乎有上限)出现。
当我添加一个预览用例并设置enableTorch(真)时,ImageAnalysis用例会突然开始变得更接近20fps,偶尔会达到30ish的峰值。
很明显,预览会改变相机的自动曝光状态?
这是我当前设置的一个片段...private fun startCameraAnalysis() {
val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }
var resolution = Size(metrics.widthPixels, metrics.heightPixels)
resolution = Size(640, 480) //set to fixed size for testing
val aspectRatio = Rational(resolution.width, resolution.height)
val rotation = viewFinder.display.rotation
// Setup image analysis pipeline
val analyzerConfig = ImageAnalysisConfig.Builder().apply {
val analyzerThread = HandlerThread(
"LuminosityAnalysis").apply { start() }
setCallbackHandler(Handler(analyzerThread.looper))
setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
setTargetRotation(rotation)
setTargetAspectRatio(aspectRatio)
setTargetResolution(resolution)
}.build()
// Setup preview pipeline
val previewConfig = PreviewConfig.Builder().apply {
setTargetRotation(rotation)
setTargetAspectRatio(aspectRatio)
setTargetResolution(resolution)
}.build()
// Build Preview useCase
val preview = Preview(previewConfig)
preview.enableTorch(true)
// Build Analysis useCase
val analyzer = ImageAnalysis(analyzerConfig)
analyzer.analyzer = LuminosityAnalyzer()
CameraX.bindToLifecycle(this, preview, analyzer )
preview.enableTorch(true)
}
在CameraX的图像分析中,有没有改变相机设置以获得更高的帧率?
是否有任何改变的东西,如传感器持续时间,ISO和曝光?