我正在使用Vision Framework尝试获得一张脸的滚动和偏转。
我在VNSequenceRequestHandler
上使用了CVPixelBuffer
,并且能够同时使用VNDetectFaceLandmarksRequest
和/或VNDetectFaceRectanglesRequest
来成功取回包括地标的面孔(用于地标请求)。到目前为止,一切都很好。
但是,当我尝试获取roll
和yaw
值时,我将它们作为一组离散值而不是反映面部精确方向的连续值范围。
roll和yaw的iOS文档指出:
滚动/偏航以弧度表示。正角对应于逆时针旋转。范围是[-Pi,Pi)。 nil值表示尚未计算侧倾/偏航角。
但是,当我查看值时,虽然明显正在计算roll
,但我仅获得离散值,即当我的脸部从正确的方向旋转到上下颠倒时,我得到:
0 - face is upright
0.524 (Pi/6) - face starts rotating
1.047
1.571 (Pi/2) - face is now landscape
2.094
2.618
-3.142 (-Pi) - face is now upside-down
换句话说,似乎只有12种可能的滚动值。
当然这是不正确的?
yaw
甚至更糟,我只能在任一方向上获得0.785
和-0.785
。 最佳答案
苹果现在已经确认这实际上是设计的行为:https://forums.developer.apple.com/thread/113601
VNFaceObservation的偏航和侧倾属性返回一组有限的离散值,而不是连续范围。
如果您希望这些值具有更高的精度,则应该提出增强要求!