【问题标题】:Unable to tune Firebase (Google) MLKit Face Detection accuracy无法调整 Firebase (Google) MLKit 人脸检测的准确性
【发布时间】:2019-03-18 21:20:46
【问题描述】:

我正在编写一个安卓相机应用程序,并且我正在使用设备上的 MLKit API 来进行人脸检测。这个 API 的好处是它的启动和运行非常简单,并且有一个 sample app 显示了如何执行此操作,但感觉它的功能非常有限。

我的问题是误报太多(精度低),这似乎不是我可以控制的。我可以设置的唯一选项是将modeType 设置为FAST_MODEACCURATE_MODE。但我真正需要的是一些可以调整的旋钮,以达到所需的精度和召回率组合。

有人知道我是否可以使用 API 来获得对最终结果的额外控制吗?

【问题讨论】:

    标签: android firebase-mlkit


    【解决方案1】:

    我认为您需要了解使用人脸检测时可以使用的选项。

    /** Libary Options */
    val options = FirebaseVisionFaceDetectorOptions.Builder()
       .setModeType(FirebaseVisionFaceDetectorOptions.ACCURATE_MODE) // used to state whether the recognition process should favour either speed or accuracy, can be set to either ACCURATE_MODE or FAST_MODE. This defaults to FAST_MODE.
       .setLandmarkType(FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS) // used to declare whether the recognition process should recognise facial landmarks such as the nose, eyes, mouth etc. This defaults to NO_LANDMARKS.
       .setClassificationType(FirebaseVisionFaceDetectorOptions.ALL_CLASSIFICATIONS) //  used to declare whether the recognition process should classify facial features such as whether the face is smiling or the eyes are open. This defaults to NO_CLASSIFICATIONS.
       .setMinFaceSize(0.15f) //used to define the minimum size of a face (relative to the given image) for it to be detected. This value defaults to 0.1f.
       .setTrackingEnabled(true) // used to declare whether or not an ID should be assigned to faces, for tracking faces between images. This defaults to false.
       .build()
    

    我举了一个例子,但是用西班牙语,或者如果你想了解更多关于这个图书馆的信息,请阅读这篇媒体文章。 https://medium.com/google-developer-experts/exploring-firebase-mlkit-on-android-face-detection-part-two-de7e307c52e0

    【讨论】:

    • 感谢 Carlosgub,但这正是我正在做的事情(我链接的示例使用了该 API)。在控制检测精度时,它就像一个黑匣子。就像傻瓜相机一样,操作超级简单,但几乎不可能拍出质量不错的照片。我正在考虑使用原生 Camera2 API 的人脸检测并将其与 ML Kit 结果融合以获得更准确的结果,但希望听到来自社区的更多建议。
    【解决方案2】:

    我遇到了类似的问题。谷歌似乎没有公开人脸质量分数,所以我通过计算自己的人脸分数解决了这个问题。我使用 Face 对象的 Landmark 属性来创建自己的指标,例如:

    • Face.getIsLeftEyeOpenProbability()
    • Face.getIsRightEyeOpenProbability()
    • Face.getLandmarks().size() //大多数假脸不会有很多地标
    • Face.getEulerY()
    • Face.getEulerZ()

    我发现使用这些头部角度、地标数量等可以有效地过滤掉误报人脸。

    【讨论】:

    • 好主意@j2abro,我实际上放弃了用于运行时人脸检测和跟踪的 ML Kit(可能会在某个时候将其用作后备选项)。我现在使用原生相机 2 API 以 30fps 的速率非常可靠地检测和跟踪人脸(ML Kit 不会产生的东西)当然,我现在没有所有漂亮的地标,但至少它比 ML Kit 的 FAST 更可靠或精确模式。 (仍然不敢相信它是如此有限)无论如何,谢谢你的好主意!
    • 在我最近的测试中,一些假脸具有所有默认值,因此在您的答案中具有0 地标,但许多其他假脸具有看起来非常正常的数据,包括一整套地标。事实上,getLandmarks() 方法在当前 SDK 中不可用,所以可能 Firebase ML Vision 自从你回答后发生了变化?
    猜你喜欢
    • 2018-10-30
    • 2021-03-17
    • 2020-06-16
    • 2019-08-01
    • 2021-08-27
    • 2022-01-13
    • 2020-05-23
    • 1970-01-01
    • 2023-01-05
    相关资源
    最近更新 更多