Kinect第三天:研发1.0

一、安装Kinect SDK 2.0(KinectSDK-v2.0_1409-Setup.exe)


刚开始时没装运行demo提示缺少Kinect10.dll,因为没有驱动;然后装1.8版本,依然报错,因为我的kinect是2.0的,1.8的不支持。


二、手掌方向问题


项目需求是要实现手掌托起一个模型,并且模型在小范围内和手掌正面的方向一致。如何确定手掌正面的方向?我看了KinectManager,里面没有直接的方法,于是选取了手掌(Hand)、拇指(Thumb)、手掌指尖(HandTip)这三个点,得到手掌到拇指、手掌到指尖两个向量,叉乘得出法向量,即为手掌方向。


随即又有一个问题,那就是得出的方向不稳定,看了一下,是检测本身就有波动,不是我代码的问题,于是弄了一个过滤方法:记录3帧的手掌向量,不同向上或向下的过滤掉,效果差强人意。

//非连续三帧向下或向上,过滤掉
IEnumerator HandUpFiter()
    {
        while (true)
        {
            if (manager && manager.IsUserDetected())
            {
                oldUp = GetHandUp();
                yield return new WaitForEndOfFrame();
                lastUp = GetHandUp();
                yield return new WaitForEndOfFrame();
                currentUp = GetHandUp();
                if (Vector3.Angle(oldUp, lastUp) < Vector3.Angle(oldUp, currentUp) && oldUp.y * lastUp.y > 0 && oldUp.y * currentUp.y > 0)
                {
                    availableUp = currentUp;
                }
            }
            else
            {
                yield return new WaitForEndOfFrame();
            }

        }
    }
    //获取手掌方向
     Vector3 GetHandUp()
    {
        handToThumb = manager.GetJointKinectPosition(userId, rightThumbJointIndex) - manager.GetJointKinectPosition(userId, rightHandIndex);
        handToTip = manager.GetJointKinectPosition(userId, rightHandTipJointIndex) - manager.GetJointKinectPosition(userId, rightHandIndex);
        return Vector3.Cross(handToThumb, handToTip).normalized;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值