Kinect for windows,玩家索引总是返回0,骨架不会工作

时间:2013-03-07 11:42:11

标签: c# xna kinect xbox kinect-sdk

你好,我是kinect的新手 我目前使用kinect为xbox开发kinect程序但我遇到问题而不是玩家索引值总是返回0 在我的深度帧甚至是处理函数我写道:

int playerIndex = depthFrameData[i16] & DepthImageFrame.PlayerIndexBitmask;

其中i16是i16 = 0到depthFrameData.length的循环索引 但它总是返回0 我的kinect_depthFrame代码的完整外观:

private void Kinect_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
    {
        using (DepthImageFrame frame = e.OpenDepthImageFrame())
        {
            if (frame != null && graphics != null && graphics.GraphicsDevice != null)
            {
                short[] pixelData = new short[frame.PixelDataLength];
                frame.CopyPixelDataTo(pixelData);

                byte[] pixelData32 = new byte[640 * 480 * 4];

                for (int i16 = 0, i32 = 0; i16 < pixelData.Length && i32 < pixelData32.Length; i16++, i32 += 4)
                {
                    int player = pixelData[i16] & DepthImageFrame.PlayerIndexBitmask;
                    int realDepth = pixelData[i16] >> DepthImageFrame.PlayerIndexBitmaskWidth;
                    byte intensity = (byte)(~(realDepth >> 4));
                    if (player != 0)
                    {
                        pixelData32[i32 + RedIndex] = 0;
                        pixelData32[i32 + GreenIndex] = 0;
                        pixelData32[i32 + BlueIndex] = 0;
                    } else {
                        pixelData32[i32 + RedIndex] = 255;
                        pixelData32[i32 + GreenIndex] = 255;
                        pixelData32[i32 + BlueIndex] = 255;
                    }
                }

                kinectVideo = new Texture2D(graphics.GraphicsDevice, frame.Width, frame.Height);
                kinectVideo.SetData(pixelData32);
            }
        }
    }

在骨架中,它永远不会返回玩家骨架(返回null)。在我的代码中我使用这个:

Skeleton playerSkeleton = (
from s in skeletonData where s.TrackingState == SkeletonTrackingState.Tracked
select s
                    ).FirstOrDefault();

kinect_skeletonframeready的完整功能:

void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
    {
        using (SkeletonFrame frame = e.OpenSkeletonFrame())
        {
            if (frame != null && graphics != null && graphics.GraphicsDevice != null)
            {
                Skeleton[] skeletonData = new Skeleton[frame.SkeletonArrayLength];
                frame.CopySkeletonDataTo(skeletonData);
                Skeleton playerSkeleton = (
                    from s in skeletonData where s.TrackingState == SkeletonTrackingState.Tracked select s
                    ).FirstOrDefault();
                if (playerSkeleton != null)
                {
                    Joint leftHand = playerSkeleton.Joints[JointType.HandLeft];
                    handPosition = new Vector2((((0.5f * leftHand.Position.X) + 0.5f) * (640)), 
                        (((-0.5f * leftHand.Position.Y) + 0.5f) * (480)));
                }
            }
        }
    }

是xbox问题的kinect吗? 我正在使用xna来显示结果

DepthImageFrame.PlayerIndexBitmask = 7

我写这个:

foreach (Skeleton s in skeletonData){
         Trace.WriteLine(s.TrackingState.ToString());
         }

我发现s.TrackingState总是NotTracked,其中SkeletonTrackingState.Tracked = A Tracked

0 个答案:

没有答案