android - 使用 CameraX 时,前置摄像头的 Facebase MLKit 人脸检测失败
问题描述
我正在尝试使用Firebase MLKit
and来实现人脸检测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
并且与前置摄像头配合良好。
解决方案
通过设置lensfacing
为ImageAnalysis
解决它CameraX.LensFacing.FRONT
:
val imageAnalysisConfig = ImageAnalysisConfig.Builder()
.setLensFacing(CameraX.LensFacing.FRONT)
.setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
.build()
推荐阅读
- python - 函数内的 Python 全局变量
- javascript - 使用空字符串条件渲染
- kubernetes - 从运行在 kubernetes pod 中的容器连接到 vagrant 虚拟机上的 x11 接口
- c++ - 从 BubbleSort * 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- amazon-web-services - 为什么 AWS CodeBuild buildspec.yml 支持多个构建阶段?
- visual-studio - Visual Studio 我在哪里可以得到它的社区 \ 更旧版本的速成版
- git - 对于未跟踪和已提交的文件,Git 状态的行为不同
- java - Java中的“...”是什么意思
- android - 如何使用 Google-Nearby Connection API 连接 3 台以上的设备
- javascript - 设置 react-datepicker 时间输入开始时间但未选中