Facebase MLKit обнаружение лица не удалось с фронтальной камерой при использовании CameraX - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь реализовать распознавание лиц, используя Firebase MLKit и CameraX ImageAnalysis. Он работает нормально при использовании задней камеры, но когда я попробовал с фронтальной камерой, он ничего не обнаружил:

val config = PreviewConfig.Builder()
        .setLensFacing(CameraX.LensFacing.FRONT)
        .build()
val previewUseCase = Preview(config)
previewUseCase.setOnPreviewOutputUpdateListener { previewOutput ->
    viewFinder.post {
        removeView(viewFinder)
        addView(viewFinder, 0)
        viewFinder.surfaceTexture = previewOutput.surfaceTexture
        updateTransform(previewOutput)
    }
}

val highAccuracyOpts = FirebaseVisionFaceDetectorOptions.Builder()
    .setPerformanceMode(FirebaseVisionFaceDetectorOptions.ACCURATE)
    .build()
val detector = FirebaseVision.getInstance().getVisionFaceDetector(highAccuracyOpts)
val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
    .build()
val imageAnalysis = ImageAnalysis(imageAnalysisConfig).apply {
    setAnalyzer(
        Executors.newSingleThreadExecutor(),
        ImageAnalysis.Analyzer { image, rotationDegrees ->
            if (image.image != null && isBusy.compareAndSet(false, true)) {
                val visionImage = FirebaseVisionImage.fromMediaImage(image.image!!, degreesToFirebaseRotation(rotationDegrees))
                detector.detectInImage(visionImage)
                    .addOnSuccessListener { faces ->
                        // faces.size always zero when using front camera
                        Timber.d("${faces.size}")
                        isBusy.set(false)
                    }
                    .addOnFailureListener { error ->
                        Timber.d("$error")
                    }
            }
        })
}

CameraX.bindToLifecycle(lifecycleOwner, previewUseCase, imageAnalysis)

Я тестировал на Nokia 8.1 с Android 10. Я пытался https://github.com/firebase/quickstart-android/tree/master/mlkit, который не используетCameraX и он отлично работает с фронтальной камерой.

1 Ответ

0 голосов
/ 18 октября 2019

Решил, установив lensfacing для ImageAnalysis в CameraX.LensFacing.FRONT:

val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setLensFacing(CameraX.LensFacing.FRONT)
    .setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
    .build()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...