Kinect v2.0 FaceFrameResult.FaceRotationQuaternion 返回 NAN
Kinect v2.0 FaceFrameResult.FaceRotationQuaternion returning NAN
我正在尝试使用 kinect 获取人脸的偏航俯仰和滚动。
为了计算这些值,我试图获得 FaceRotationQuaternion。然而,Y 和 Z 值似乎 return NaN。
旋转四元数值示例:
X: 0 Y: NaN Z: NaN W: 2.80259692864963E-45
新人脸框到达时使用的代码。
void FaceReader_FrameArrived(object sender, FaceFrameArrivedEventArgs e)
{
using (var frame = e.FrameReference.AcquireFrame())
{
if (frame != null)
{
// 4) Get the face frame result
FaceFrameResult result = frame.FaceFrameResult;
if (result != null)
{
System.Diagnostics.Debug.WriteLine("Found Face");
faceRotation = result.FaceRotationQuaternion;
double x = result.FaceRotationQuaternion.X;
double y = result.FaceRotationQuaternion.Y;
double z = result.FaceRotationQuaternion.Z;
double w = result.FaceRotationQuaternion.W;
System.Diagnostics.Debug.WriteLine("X: " + x + " Y: " + y + " Z: " + z + " W: " + w);
}
}
}
}
面部已注册 body。
void BodyReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
//Sent the data over bluetooth.
//btc.sendKinectData(kinectData);
using (var frame = e.FrameReference.AcquireFrame())
{
if (frame != null)
{
bodies = new Body[frame.BodyFrameSource.BodyCount];
frame.GetAndRefreshBodyData(bodies);
Body body = bodies.Where(b => b.IsTracked).FirstOrDefault();
if (!faceFrameSource.IsTrackingIdValid)
{
if (body != null)
{
// 4) Assign a tracking ID to the face source
faceFrameSource.TrackingId = body.TrackingId;
}
}
}
}
}
如何使用 FaceRotationQuaternion 获得正确的值?
我找到了解决办法。看来头部的方向也是一个特征,所以需要先载入才能生效。
faceFrameSource = new FaceFrameSource(kinectSensor,0,FaceFrameFeatures.RotationOrientation);
我正在尝试使用 kinect 获取人脸的偏航俯仰和滚动。 为了计算这些值,我试图获得 FaceRotationQuaternion。然而,Y 和 Z 值似乎 return NaN。
旋转四元数值示例:
X: 0 Y: NaN Z: NaN W: 2.80259692864963E-45
新人脸框到达时使用的代码。
void FaceReader_FrameArrived(object sender, FaceFrameArrivedEventArgs e)
{
using (var frame = e.FrameReference.AcquireFrame())
{
if (frame != null)
{
// 4) Get the face frame result
FaceFrameResult result = frame.FaceFrameResult;
if (result != null)
{
System.Diagnostics.Debug.WriteLine("Found Face");
faceRotation = result.FaceRotationQuaternion;
double x = result.FaceRotationQuaternion.X;
double y = result.FaceRotationQuaternion.Y;
double z = result.FaceRotationQuaternion.Z;
double w = result.FaceRotationQuaternion.W;
System.Diagnostics.Debug.WriteLine("X: " + x + " Y: " + y + " Z: " + z + " W: " + w);
}
}
}
}
面部已注册 body。
void BodyReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
//Sent the data over bluetooth.
//btc.sendKinectData(kinectData);
using (var frame = e.FrameReference.AcquireFrame())
{
if (frame != null)
{
bodies = new Body[frame.BodyFrameSource.BodyCount];
frame.GetAndRefreshBodyData(bodies);
Body body = bodies.Where(b => b.IsTracked).FirstOrDefault();
if (!faceFrameSource.IsTrackingIdValid)
{
if (body != null)
{
// 4) Assign a tracking ID to the face source
faceFrameSource.TrackingId = body.TrackingId;
}
}
}
}
}
如何使用 FaceRotationQuaternion 获得正确的值?
我找到了解决办法。看来头部的方向也是一个特征,所以需要先载入才能生效。
faceFrameSource = new FaceFrameSource(kinectSensor,0,FaceFrameFeatures.RotationOrientation);