Android CameraX-录制视频时的人脸检测

GMX*_*GMX 6 android android-camera android-camera2 firebase-mlkit android-camerax

我正在使用Android中带有Firebase ML Kit的新库CameraX,并检测设备可以拍摄的每张脸。

所以我像这样设置CameraX:

CameraX.bindToLifecycle(this, preview, imageCapture, faceDetectAnalyzer)
Run Code Online (Sandbox Code Playgroud)

现在所有工作都很流畅,我想录制视频。

因此,基本上我想在录制视频时检测人脸

我试过了:

CameraX.bindToLifecycle(this, preview, imageCapture, faceDetectAnalyzer, videoCapture)
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误消息,说参数太多,所以我猜这不是正确的方法。

我知道该库仍处于alpha状态,但我想有一种方法可以做到这一点。

即使没有喷气机,使用Firebase ML录制视频时,还有另一种实现面部检测的方法吗?

Fra*_*cia 0

我没有经常使用 CameraX,但我通常使用 Camera 2 API 和 Firebase ML Kit。

要同时使用这两个 API,您应该Image从 Preview Size 获取回调ImageReaderFirebaseVisionFace在该回调中,您可以使用该图像通过 API创建一个图像,并用它做任何您想做的事情。使用 Kotlin 和协程,它应该如下所示:

 private val options: FirebaseVisionFaceDetectorOptions = FirebaseVisionFaceDetectorOptions.Builder()
    .setContourMode(FirebaseVisionFaceDetectorOptions.ALL_CONTOURS)
    .build()

val detector = FirebaseVision.getInstance().getVisionFaceDetector(options)

suspend fun processImage(image: Image): FirebaseVisionFace {
    val metadata = FirebaseVisionImageMetadata.Builder()
        .setWidth(image.width) // 480x360 is typically sufficient for image recognition
        .setHeight(image.height)
        .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
        .build()

    val visionImage = FirebaseVisionImage.fromMediaImage(image)
    val firebaseVisionFace = detector.detectInImage(visionImage).await()

    return firebaseVisionFace
}
Run Code Online (Sandbox Code Playgroud)

如果您想使用协程支持的方法,您可以向https://github.com/FrangSierra/Firebase-Coroutines-Androidawait提供战利品