2

我正在编写一个 android 相机应用程序,并且正在使用 MLKit on-device API 进行人脸检测。这个 API 的好处是启动和运行非常简单,并且有一个示例应用程序展示了如何执行此操作,但感觉它的功能非常有限。

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

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

4

2 回答 2

0

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

/** 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

于 2018-10-14T06:38:02.347 回答
0

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

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

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

于 2019-01-16T23:23:18.027 回答