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

时间:2019-08-01 10:00:56

标签: android android-camera android-camera2 firebase-mlkit android-camerax

我正在使用Android中带有Firebase ML Kit的新库CameraX和设备可检测的每一帧人脸。

所以我将CameraX设置为:

CameraX.bindToLifecycle(this, preview, imageCapture, faceDetectAnalyzer)

所有工作都流畅进行,现在,我正在录制视频。

所以基本上我想在录制视频时检测人脸

我尝试过:

CameraX.bindToLifecycle(this, preview, imageCapture, faceDetectAnalyzer, videoCapture)

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

我知道该库仍处于alpha版本,但我想有一种方法可以实现。

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

1 个答案:

答案 0 :(得分:0)

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

要同时使用这两个API,应从预览尺寸Image中获取ImageReader回调。在该回调中,您可以使用该图像通过API创建一个FirebaseVisionFace并对其进行任何处理。 使用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
}

如果您想使用await方法来支持协程,则可以掠夺https://github.com/FrangSierra/Firebase-Coroutines-Android