2017-03-03 96 views
1

我正在使用Kinect v1和SDK 1.8。我需要將我的數據傳遞給faceTracker.Track()方法。瞭解Kinect Facetracker.track()方法

但是在track()的構造函數中最後是要求Skeleton參數。 但不能將骨架數據直接帶到骨架對象。它提供了一個數據數組。

如何將數據傳遞給此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 ;因爲這

和follwing是在超高動力學SDK

public FaceTrackFrame Track(
      ColorImageFormat colorImageFormat, 
      byte[] colorImage, 
      DepthImageFormat depthImageFormat, 
      short[] depthImage, 
      Skeleton skeletonOfInterest) 
     { 
      return this.Track(colorImageFormat, colorImage, depthImageFormat, depthImage, skeletonOfInterest, Rect.Empty); 
     } 

回答

0
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; 
         } 
        } 
       } 

給出的軌道方法我解決它如上同在kinect工具包1.8項目FaceTrackingBasics-WPF應用程序的幫助下。