在使用kinect v2开发win 8.1商店应用程序时,我遇到了一些问题,这是我的代码的一部分:

mysensor = WindowsPreview.Kinect.KinectSensor.getDefault();
                mysensor.open();
                console.log(mysensor);
                var isopen_timer = setInterval(function () {
                    if (mysensor.isOpen) {
                        console.log("sensor is opened");
                        myreader = mysensor.bodyFrameSource.openReader();
                        myreader.addEventListener('framearrived', handleFrame);
                        clearInterval(isopen_timer);
                    }

                }, 10);


                //open reader and listen for update


                //called on each frame updated
                function handleFrame(e)
                {

                    var frame = e.frameReference.acquireFrame();


                    if (frame) {
                        frame.getAndRefreshBodyData(bodies);

                        for (var i=0;i<6;i++) {
                            if (bodies[i].isTracked) {
                                var joints = bodies[i].joints
                                console.log(Object.keys(joints));
                            }
                            else {

                            }
                        }
                        frame.close();
                    }
                }


我的传感器打开,并且一切正常,并且我得到了跟踪的身体,但是当我尝试访问body.joints对象并尝试列出键时,我得到了一个空数组。

任何人都有什么错的想法?

最佳答案

这可能很奇怪,但是我想回答我自己的问题,以防万一有人在寻找问题。

lookup方法是关键:

就目前而言,对kinect v2 javascript API的引用和支持非常薄弱,但是在通过MS示例进行一些挖掘之后,找到了答案,在body.joints上使用lookup方法检索联合数据。

lookup方法的工作方式与body.joints.lookup(joint_index)相同,其中关节数不能超过25(最大关节数从0开始为24),该方法将返回带有详细关节数据的对象,例如(x,y,z)。

您可以忽略未跟踪的关节,因为每个关节都具有以下属性:

typetrackingstate

追踪状态:

通过从其他跟踪的关节计算得出推断的关节数据。由于已计算数据,因此对数据的置信度很低。
(属性值:0)

NotTracked不跟踪联合数据;没有可用的联合数据。
(属性值:1)

已跟踪关节数据已跟踪且可用。由于跟踪了数据,因此对数据的置信度很高。 (属性值:2)

接头类型

请参考找到的表here

10-05 20:52