C# 了解Kinect Facetracker.track()方法

C# 了解Kinect Facetracker.track()方法,c#,kinect,kinect-sdk,C#,Kinect,Kinect Sdk,我正在使用Kinect v1和SDK 1.8。我需要将数据传递到faceTracker.Track()方法 但是在track()的构造函数中,在最后询问骨架参数。 但不能将骨架数据直接带到骨架对象。它提供了一个数据数组 我如何将数据传递到此faceTracker.Track()方法作为所请求的跟踪方法 以下是我尝试的方式 using (SkeletonFrame skeletonFrame = allFramesReadyEventArgs.OpenSkeletonFrame()) {

我正在使用Kinect v1和SDK 1.8。我需要将数据传递到
faceTracker.Track()
方法

但是在
track()的构造函数中,
在最后询问骨架参数。 但不能将骨架数据直接带到骨架对象。它提供了一个数据数组

我如何将数据传递到此
faceTracker.Track()
方法作为所请求的跟踪方法

以下是我尝试的方式

using (SkeletonFrame skeletonFrame = allFramesReadyEventArgs.OpenSkeletonFrame())
{
    if (skeletonFrame != null && this.skeletonData != null) // check that a frame is available
    {
        skeletonData = new Skeleton [newSensor.SkeletonStream.FrameSkeletonArrayLength];
        skeletonFrame.CopySkeletonDataTo(this.skeletonData); // get the skeletal information in this frame
        this.skeletonData = new Skeleton[this.newSensor.SkeletonStream.FrameSkeletonArrayLength];    
    }
}
跟踪法

 if (faceTracker == null)
 {
     try
     {
         faceTracker = new FaceTracker(sensorChooser.Kinect);
     }
     catch (InvalidOperationException)
     {
         //write something
     }

     if (faceTracker != null)
     {
         FaceTrackFrame frame = faceTracker.Track(
            sensorChooser.Kinect.ColorStream.Format,
            colorImageData, 
            sensorChooser.Kinect.DepthStream.Format, 
            colorPixels, 
            skeletonData);
      }
  } 
我定义了
Skeleton[]skeletonData如下所示

下面是Kinect SDK中给出的跟踪方法

 public FaceTrackFrame Track(
            ColorImageFormat colorImageFormat, 
            byte[] colorImage, 
            DepthImageFormat depthImageFormat, 
            short[] depthImage, 
            Skeleton skeletonOfInterest)
        {
            return this.Track(colorImageFormat, colorImage, depthImageFormat, depthImage, skeletonOfInterest, Rect.Empty);
        }
我在kinect toolkit 1.8项目FaceTrackingBasics WPF应用程序的帮助下如上所述解决了这个问题

我在kinect toolkit 1.8项目FaceTrackingBasics WPF应用程序的帮助下如上所述解决了这个问题

foreach (Skeleton skeleton in this.skeletonData)
                {
                    if (skeleton.TrackingState == SkeletonTrackingState.Tracked
                        || skeleton.TrackingState == SkeletonTrackingState.PositionOnly)
                    {
                        // We want keep a record of any skeleton, tracked or untracked.
                        if (!this.trackedSkeletons.ContainsKey(skeleton.TrackingId))
                        {
                            this.trackedSkeletons.Add(skeleton.TrackingId, new SkeletonFaceTracker());
                        }

                        // Give each tracker the upated frame.
                        SkeletonFaceTracker skeletonFaceTracker;
                        if (this.trackedSkeletons.TryGetValue(skeleton.TrackingId, out skeletonFaceTracker))
                        {
                            skeletonFaceTracker.OnFrameReady(this.Kinect, colorImageFormat, colorImage, depthImageFormat, depthImage, skeleton);
                            skeletonFaceTracker.LastTrackedFrame = skeletonFrame.FrameNumber;
                        }
                    }
                }