使用 CameraX 时,前置摄像头的 Facebase MLKit 人脸检测失败
Posted
技术标签:
【中文标题】使用 CameraX 时,前置摄像头的 Facebase MLKit 人脸检测失败【英文标题】:Facebase MLKit face detection failed with front camera when using CameraX 【发布时间】:2020-02-15 16:19:01 【问题描述】:我正在尝试使用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)
我在装有 android 10 的诺基亚 8.1 上进行了测试。我尝试了https://github.com/firebase/quickstart-android/tree/master/mlkit,它不使用CameraX
,它与前置摄像头配合良好。
【问题讨论】:
【参考方案1】:通过将lensfacing
的ImageAnalysis
设置为CameraX.LensFacing.FRONT
来解决它:
val imageAnalysisConfig = ImageAnalysisConfig.Builder()
.setLensFacing(CameraX.LensFacing.FRONT)
.setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
.build()
【讨论】:
以上是关于使用 CameraX 时,前置摄像头的 Facebase MLKit 人脸检测失败的主要内容,如果未能解决你的问题,请参考以下文章
Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作