[英]Kinect v2 Relative Cursor Location
附带说明,这个问题与SharpDX无关,它纯粹是Kinect 2.0 SDK的问题。
我正在将完整的Kinect 1.8项目迁移到Kinect 2.0 SDK。 在这个程序中,我有一个WPF前端,但是99%的代码是用SharpDX for C#编写的。 该程序隐藏KinectRegions光标,并使用光标位置和夹点数据作为SharpDX代码的输入。 但是,使用此新版本的Kinect SDK,我找不到任何方法来获取相对光标数据(相对于用户的手位置)。 我尝试使用骨骼数据推断光标位置,只是一个简单的主要肩膀位置-主要手位置。 这样的问题是,当手咬住肩膀时,光标会四处射击。 如果在发生咬合时通过在脊椎上反射来切换肩膀,我会瞬间跳下。 我可以想到一种使它起作用的方法,但是将需要很多代码。 我想确保在进入该方法之前没有其他方法。 在此先感谢您的帮助!
您应该查看Mike Taulty的博客 。 他利用KinectCoreWindow捕获指针移动。 不过要注意一点:即使双手没有“活动”,此事件也会引起双手的注意。 我通过使用身体框架来设置哪只手更高(y)来表示那只手“活跃”来缓解这种情况。
...
var window = KinectCoreWindow.GetForCurrentThread();
window.PointerMoved += window_PointerMoved;
...
void window_PointerMoved(object sender, KinectPointerEventArgs e)
{
if ((!rightHand && e.CurrentPoint.Properties.HandType == HandType.LEFT) ||
(rightHand && e.CurrentPoint.Properties.HandType == HandType.RIGHT))
{
//do something with this hand pointer's location
}
}
void _bodyReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
//get and check frame
//...
using (frame)
{
frame.GetAndRefreshBodyData(_bodies);
foreach(Body body in _bodies)
{
if(body.IsTracked)
{
CameraSpacePoint left = body.Joints[JointType.HandLeft].Position;
CameraSpacePoint right = body.Joints[JointType.HandRight].Position;
if (left.Y > right.Y)
rightHand = false;
else
rightHand = true;
break; //for this example I'm just looking at the first
//tracked body - other handling is required if you
//want to keep track of more than one body's hands
}
}
}
}
另一部分是您先前的应用程序可以隐藏KinectRegion游标; 我还没有发现如何使用Kinect v2做到这一点(这实际上使我想到了这个问题,哈哈)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.