Android CameraX FPS > 30 приводит к обрезке изображенияAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android CameraX FPS > 30 приводит к обрезке изображения

Сообщение Anonymous »

У меня есть приложение, которое использует API CameraX с примерами использования Preview и анализатора.
Я устанавливаю желаемый FPS с помощью Camera2Interop.Extender( ) и установите для параметра CONTROL_AE_TARGET_FPS_RANGE значение Range(60,60), например

Код: Выделить всё

val previewBuilder = Preview.Builder()
.setTargetResolution(currentRes)
...
val cameraSelector = CameraSelector.Builder()
.requireLensFacing(cameraLens)
.build()
val fps = ConfigurationService.fps.toInt() // 60
val frameDuration = 1000000000L/fps // 1666666
if (cameraSelector.lensFacing!! == CameraSelector.LENS_FACING_FRONT) {
Camera2Interop.Extender(previewBuilder)
.setCaptureRequestOption(
CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
Range(fps, fps))
.setCaptureRequestOption(
CaptureRequest.SENSOR_FRAME_DURATION,
frameDuration
)
}
Затем настраиваем предпросмотр и анализатор

Код: Выделить всё

val preview = previewBuilder.build()

val analysis = ImageAnalysis.Builder()
.setTargetResolution(currentRes)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setOutputImageFormat(ConfigurationService.cameraInputType)
.setImageQueueDepth(countOfCores)
.build()

analysis.setAnalyzer(Executors.newWorkStealingPool(Runtime.getRuntime().availableProcessors()), analyzer)

val useCaseGroup = UseCaseGroup.Builder()
.addUseCase(preview)
.addUseCase(analysis)
.build()
try {
cameraProvider?.unbindAll()
camera = cameraProvider?.bindToLifecycle(
context as LifecycleOwner,
cameraSelector,
useCaseGroup
)
previewView.implementationMode = PreviewView.ImplementationMode.PERFORMANCE
preview.setSurfaceProvider(
previewView.surfaceProvider
)
} catch (e: Exception) {
Log.e("CameraClassificationWrapper", "Use case binding failed", e)
}
Проблема, с которой я столкнулся, заключается в том, что, когда для FPS установлено значение выше 30, входящие изображения в этом случае по-прежнему имеют правильную ширину/высоту (1280x720), но это кажется, что часть сенсора обрезана, из-за чего изображение кажется «увеличенным». При значении менее 30 изображения кажутся правильными.
Поскольку я использую анализатор для выполнения реальных измерений с использованием откалиброванной камеры для определенных разрешений, мне нужно, чтобы изображения соответствовали тому, что я откалиброван с помощью.
Я видел несколько упоминаний о такой проблеме для других платформ или просто для общего использования.
Я знаю, что у Camera2 есть способ CameraConstrainedHighSpeedCaptureSession, и я бы использовал его, за исключением того, что все приложение уже использует CameraX, и мне бы очень хотелось избежать замены всей серверной части камеры.
Есть можно ли получить полное разрешение (до 1080p) при 60 кадрах в секунду с помощью CameraX?

Подробнее здесь: https://stackoverflow.com/questions/784 ... image-crop
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»