Проблемы с чтением скелета для kinect

Я новичок в программировании kinect, и я пытаюсь сопоставить скелет, и он не работает должным образом. Я использую версию 1.6 kinect sdk, и мой код запускается, но когда он доходит до этой части, он останавливается:

void kinectsensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
           SkeletonFrame skeletonSet = e.OpenSkeletonFrame();

     //   Skeleton skeletonData = new Skeleton[kinectsensor.SkeletonStream.FrameSkeletonArrayLength];

        **Skeleton skeletonData = (from s in skeletons
                             where s.TrackingState == SkeletonTrackingState.Tracked
                             select s).FirstOrDefault();**
        if (skeletonData != null)


        {
            SetEllipsePosition(Head, skeletonData.Joints[JointType.Head]);
            SetEllipsePosition(leftHand, skeletonData.Joints[JointType.HandLeft]);
            SetEllipsePosition(rightHand, skeletonData.Joints[JointType.HandRight]);
            ProcessGesture(skeletonData.Joints[JointType.Head], skeletonData.Joints[JointType.HandLeft], skeletonData.Joints[JointType.HandRight]);
        }
    }

предупреждающее сообщение, которое я получаю:

«KinectSkeletonApplication3.MainWindow.skeletons» никогда не назначается и всегда будет иметь значение по умолчанию null


person user2271697    schedule 11.04.2013    source источник
comment
Где объявлено skeletons? Похоже, он никогда не устанавливается.   -  person Cemafor    schedule 11.04.2013
comment
у меня есть скелеты, объявленные перед public MainWindow() как: KinectSensor kinectsensor = KinectSensor.KinectSensors[0]; Скелет [] скелеты;   -  person user2271697    schedule 11.04.2013
comment
Вы когда-нибудь присваивали ему что-нибудь?   -  person Cemafor    schedule 11.04.2013
comment
Нет, я ничего ему не назначал.   -  person user2271697    schedule 11.04.2013
comment
Я использую Microsoft.Kinect вместо справочника Microsoft.Research.Kinect.   -  person user2271697    schedule 11.04.2013


Ответы (2)


Я не очень разбираюсь в программировании для Kinect, но вам нужно будет назначить массив скелетов из чего-то, возможно, используя copySkeletonDataTo()

person Cemafor    schedule 11.04.2013

Типичный обратный вызов SkeletonFrameReady выглядит так:

private Skeleton[] skeletonData;

private void SkeletonsReady(object sender, SkeletonFrameReadyEventArgs e)
{
    using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
    {
        if (skeletonFrame != null)
        {
            int skeletonSlot = 0;

            if ((this.skeletonData == null) || (this.skeletonData.Length != skeletonFrame.SkeletonArrayLength))
            {
                this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
            }

            skeletonFrame.CopySkeletonDataTo(this.skeletonData);

            foreach (Skeleton skeleton in this.skeletonData)
            {
                if (SkeletonTrackingState.Tracked == skeleton.TrackingState)
                {
                    // `skeleton` is an actively tracked skeleton
                }
            }
        }
    }
}

Много примеров можно найти в Kinect for Windows Developer Toolkit и сайт Kinect для Windows CodePlex.

person Nicholas Pappas    schedule 12.04.2013