我正在使用Vision Framework尝试获得一张脸的滚动和偏转。

我在VNSequenceRequestHandler上使用了CVPixelBuffer,并且能够同时使用VNDetectFaceLandmarksRequest和/或VNDetectFaceRectanglesRequest来成功取回包括地标的面孔(用于地标请求)。到目前为止,一切都很好。

但是,当我尝试获取rollyaw值时,我将它们作为一组离散值而不是反映面部精确方向的连续值范围。

rollyaw的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的偏航和侧倾属性返回一组有限的离散值,而不是连续范围。

如果您希望这些值具有更高的精度,则应该提出增强要求!

10-01 15:57