我正在尝试获取 FaceDetector 检测到的人脸的欧拉角。
这是我用来输出到 Logcat 的内容:
Log.v("debug", " X: " + face.pose(Face.EULER_X) + " Y: " + face.pose(Face.EULER_Y) + " Z: " + face.pose(Face.EULER_Z) );
但它总是返回 0.0 对于所有三个,无论面部处于什么角度。任何想法为什么?
我正在尝试获取 FaceDetector 检测到的人脸的欧拉角。
这是我用来输出到 Logcat 的内容:
Log.v("debug", " X: " + face.pose(Face.EULER_X) + " Y: " + face.pose(Face.EULER_Y) + " Z: " + face.pose(Face.EULER_Z) );
但它总是返回 0.0 对于所有三个,无论面部处于什么角度。任何想法为什么?
是的,API 1 中的FaceDetector永远不会返回姿势角。您可以查看源代码进行验证。
API 14中较新的FaceDetectionListener将返回姿势角度,但目前仅在有限数量的设备上可用。甚至不是所有运行 API 14 的设备都可以使用它。您必须调用getMaxNumDetectedFaces()来查看您的设备是否支持该 API。
您也可以尝试使用 OpenCV。几个选项是http://code.opencv.org/projects/opencv/wiki/OpenCV4Android和http://code.google.com/p/javacv/。根据我的经验,除非您真的非常需要姿势角度,否则它们不值得麻烦。
将检测器设置setMode
为ACCURATE_MODE
这是一个在 Kotlin 中对我有用的示例:
val detector = FaceDetector.Builder(context)
.setClassificationType(FaceDetector.ACCURATE_MODE)
.setMode(FaceDetector.ACCURATE_MODE)
.setTrackingEnabled(true)
.build()