Длительная инициализация USB-камеры при использовании Camera XAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Длительная инициализация USB-камеры при использовании Camera X

Сообщение Anonymous »

Я делаю приложение для обработки кадров на Orange Pi5 с USB-камеры с помощью камеры и столкнулся с проблемой долгой инициализации при холодном запуске.
Вот мой код для инициализации камеры :

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

 private fun startCameraPreview() {

cameraProviderFuture = ProcessCameraProvider.getInstance( requireContext() )

cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
bindPreview(cameraProvider) },
ContextCompat.getMainExecutor(requireContext()) )
}

@SuppressLint("RestrictedApi")
private fun bindPreview(cameraProvider : ProcessCameraProvider) {

previewView = viewBinding.previewView
previewView.implementationMode = PreviewView.ImplementationMode.COMPATIBLE
previewView.scaleX = -1f

val preview : Preview = Preview.Builder()
.setResolutionSelector(
ResolutionSelector.Builder().setResolutionStrategy(
ResolutionStrategy(Size(1080, 768),
ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER)
).build())
.build()

val selector = selectExternalOrBestCamera(cameraProvider) //For Usb camera Access
preview.setSurfaceProvider( previewView.surfaceProvider )

val strategy = ResolutionStrategy(Size(640, 480),
ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER)

val imageFrameAnalysis = ImageAnalysis.Builder()
.setResolutionSelector(ResolutionSelector.Builder().setResolutionStrategy(strategy).build())
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_RGBA_8888)
.build()

imageFrameAnalysis.setAnalyzer(Executors.newSingleThreadExecutor(), frameAnalyser )
cameraProvider.bindToLifecycle(this as LifecycleOwner, selector!!, preview , imageFrameAnalysis  )
}

Также я использую код из официального документа для доступа к селектору USB-камеры

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

fun selectExternalOrBestCamera(provider: ProcessCameraProvider):CameraSelector? {

val cam2Infos = provider.availableCameraInfos.map {
Camera2CameraInfo.from(it)
}.sortedByDescending {
// HARDWARE_LEVEL is Int type, with the order of:
// LEGACY < LIMITED < FULL < LEVEL_3 < EXTERNAL
it.getCameraCharacteristic(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)
}

return when {
cam2Infos.isNotEmpty() -> {
CameraSelector.Builder()
.addCameraFilter {
it.filter { camInfo ->
// cam2Infos[0] is either EXTERNAL or best built-in camera
val thisCamId = Camera2CameraInfo.from(camInfo).cameraId
thisCamId == cam2Infos[0].cameraId
}
}.build()
}
else -> null
}
}
При первом запуске приложения я получаю сообщение об ошибке 6 раз.

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

2024-03-05 15:58:14.010 14845-14906 CameraRepository                              D  Added camera: 0
2024-03-05 15:58:14.012 14845-14906 Camera2CameraInfo                             I  Device Level: INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
2024-03-05 15:58:14.012 14845-14906 CameraValidator                               D  Verifying camera lens facing on rk3588s_s, lensFacingInteger: null
2024-03-05 15:58:14.013 14845-14906 CameraValidator                              E  Camera LensFacing verification failed, existing cameras: [Camera@e0778e4[id=0]]
2024-03-05 15:58:14.014 14845-14906 CameraX                                       W  Retry init.  Start time 9251708 current time 9253283
androidx.camera.core.impl.CameraValidator$CameraIdListIncorrectException: Expected camera missing from device.
at androidx.camera.core.impl.CameraValidator.validateCameras(CameraValidator.java:97)
at androidx.camera.core.CameraX.lambda$initAndRetryRecursively$2$androidx-camera-core-CameraX(CameraX.java:334)
at androidx.camera.core.CameraX$$ExternalSyntheticLambda3.run(Unknown Source:10)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:920)
Caused by: java.lang.IllegalArgumentException: No available camera can be found
at androidx.camera.core.CameraSelector.select(CameraSelector.java:94)
at androidx.camera.core.impl.CameraValidator.validateCameras(CameraValidator.java:83)
at androidx.camera.core.CameraX.lambda$initAndRetryRecursively$2$androidx-camera-core-CameraX(CameraX.java:334) 
at androidx.camera.core.CameraX$$ExternalSyntheticLambda3.run(Unknown Source:10) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:920) 

После инициализации камеры с этим сообщением:

Устройство может занижать количество камер. Завершите задачу инициализации, поскольку мы уже достигли максимального количества повторов.

Какая-нибудь помощь в этом?

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

Added camera: 0
2024-03-05 15:58:15.030 14845-14906 Camera2CameraInfo                             I  Device Level: INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
2024-03-05 15:58:15.031 14845-14906 CameraValidator                               D  Verifying camera lens facing on rk3588s_s, lensFacingInteger: null
2024-03-05 15:58:15.032 14845-14906 CameraValidator                              E  Camera LensFacing verification failed, existing cameras: [Camera@10741b2[id=0]]
2024-03-05 15:58:15.032 14845-14906 CameraX                                      E  The device might underreport the amount of the cameras.  Finish the initialize task since we are already reaching the maximum number of retries.
2024-03-05 15:58:15.083 14845-14845 CameraOrientationUtil                        D  getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=false, result=90
2024-03-05 15:58:15.085 14845-14845 CameraOrientationUtil                         D  getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=false, result=90
2024-03-05 15:58:15.094 14845-14845 DynamicRangeResolver                          D  Resolved dynamic range for use case androidx.camera.core.Preview-1b649f9e-f19f-43f5-8882-7ace2058df35 to no compatible HDR dynamic ranges.
DynamicRange@d8ad747{encoding=UNSPECIFIED, bitDepth=0}
->
DynamicRange@c2bc286{encoding=SDR, bitDepth=8}
2024-03-05 15:58:15.099 14845-14845 CameraOrientationUtil                         D  getRelativeImageRotation: destRotationDegrees=0, sourceRotationDegrees=90, isOppositeFacing=false, result=90
2024-03-05 15:58:15.101 14845-14845 DeferrableSurface                             D  Surface created[total_surfaces=1, used_surfaces=0](androidx.camera.core.processing.SurfaceEdge$SettableSurface@df18112}
2024-03-05 15:58:15.103 14845-14845 DeferrableSurface                             D  Surface created[total_surfaces=2, used_surfaces=0](androidx.camera.core.SurfaceRequest$2@4e29c5e}
2024-03-05 15:58:15.104 14845-14845 DeferrableSurface                             D  New surface in use[total_surfaces=2, used_surfaces=1](androidx.camera.core.SurfaceRequest$2@4e29c5e}
2024-03-05 15:58:15.104 14845-14845 DeferrableSurface                            D  use count+1, useCount=1 androidx.camera.core.SurfaceRequest$2@4e29c5e
Мои зависимости Gradle для CameraX:

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

// CameraX
def camerax_version = "1.3.1"
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"
implementation "androidx.camera:camera-lifecycle:${camerax_version}"
implementation "androidx.camera:camera-video:${camerax_version}"

implementation "androidx.camera:camera-view:${camerax_version}"
implementation "androidx.camera:camera-extensions:${camerax_version}"
Я пробовал добавить

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

@OptIn(ExperimentalCamera2Interop::class)
аннотации к экспериментальному методу, я попробовал явно указать тип объектива для CameraSelector .requireLensFacing(LENS_FACING_FRONT/BACK/EXTERNAL) - никакого результата, только сбой.
Мои мысли по этому поводу: CameraValidator не может принять значение объектива с USB-камеры.
Какая-нибудь помощь в этом?

Подробнее здесь: https://stackoverflow.com/questions/781 ... g-camera-x
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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