2017-03-03 11 views
1

私はSDK 1.8でKinect v1を使用しています。データをfaceTracker.Track()メソッドに渡す必要があります。Kinect 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); 
     } 
    } 

この

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

で与えられるトラック法と同様に、私は上記のように、それを解決しSkeleton [] skeletonData ;定義〜とkinectツールキット1.8のプロジェクトのFaceTrackingBasics - WPFアプリケーションの助けを借りて。

関連する問題