繁体   English   中英

Kinect v2相对光标位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM