Android CameraX - 录制视频时的面部检测

Posted

技术标签:

【中文标题】Android CameraX - 录制视频时的面部检测【英文标题】:Android CameraX - face detection while recording video 【发布时间】:2019-12-09 21:40:14 【问题描述】:

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

所以我这样设置 CameraX:

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

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

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

我试过了:

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

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

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

即使没有 jet,还有什么方法可以在使用 Firebase ML 录制视频时实现人脸检测?

【问题讨论】:

an error occurred by CameraX.bindToLifecycle()的可能重复 不,不是,这是一个不同的错误,在不同的情况下出现,我会回答他的问题。另外我的问题是关于实施而不仅仅是关于错误。 如果您想尝试一下,请尝试使用 Media Projection API 并记录屏幕...只是个人建议我没有使用 ML 套件 看到这个***.com/questions/56054647/… 【参考方案1】:

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

要同时使用这两个 API,您应该从预览大小 ImageReader 中获取 Image 回调。在该回调中,您可以使用该图像通过 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 一个战利品

【讨论】:

我已经这样做了,并同时使用了这两个 API(图像捕获和人脸检测)并且工作正常。问题是,除此之外,我可以录制视频吗? 我不知道 cameraX 但 API 2 不允许您使用 Firebase 进行 FaceRecognition,因为预览不会抛出“图像”对象,您可以使用预览图像阅读器或低与 videoSession 一起运行的质量(就像您通常拍摄快照一样) 我也不知道,但我确信可以在检测人脸的同时录制视频,我看到应用程序正在这样做并且他们正在使用 Firebase。 我猜他们不是用相机 x 而是用相机 2 以某种方式这样做 这有什么线索吗?

以上是关于Android CameraX - 录制视频时的面部检测的主要内容,如果未能解决你的问题,请参考以下文章

Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作

kotlin 使用CameraX录制视频点击对焦,保存至相册中

cameraX视频录制 拷贝直接用

cameraX视频录制 拷贝直接用

cameraX视频录制 拷贝直接用

具有自定义表面的 Android CameraX