6

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

所以我这样设置CameraX:

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

现在,所有工作都顺畅无阻,在我这样做的同时,我想录制一段视频。

所以基本上我想在录制视频时检测面部

我试过了:

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

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

我知道这个库仍处于 alpha 阶段,但我想有办法做到这一点。

即使没有jet,在使用Firebase ML录制视频的同时实现人脸检测的另一种方法是什么?

4

1 回答 1

0

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

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

 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一个战利品

于 2019-08-13T09:47:01.673 回答