首页 文章

Kinect SDK 1.5 - 面部跟踪:WPF跟踪问题

提问于
浏览
2

我正在使用Kinect(微软官方)的新面部跟踪SDK,我注意到c和c#-wpf之间的检测存在差异:第一个是识别速度比第二个(我想要的速度快)实际使用) . 在c版本中,面部跟踪几乎是在飞行中,而在wpf中它只在我将整个身体(所以整个骨架)放在Kinect的视野中时开始 .

有没有人发现原因?我注意到提供的骨架显示了属性“Trackingmode = default”,即使我将kinect骨架流设置为就位 .

colorImageFrame.CopyPixelDataTo(this.colorImage);
depthImageFrame.CopyPixelDataTo(this.depthImage);
skeletonFrame.CopySkeletonDataTo(this.skeletonData);

// Update the list of trackers and the trackers with the current frame information
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;
          }
    }
}

代码是我的微软提供的1.5 SDK .

2 回答

  • 1

    我在其他论坛上有一些信息,特别是在这里(感谢这个人(blog)):

    MSDN forum link

    基本上,在c示例中,使用了跟踪面部的所有方法,颜色深度和颜色深度骨架,而在c#中仅使用后者 . 所以只有你站起来才会开始 .

    我做了一些测试,但另一种方法仍然不适合我,我对代码做了一些修改,但没有运气 . 这是我的修改:

    internal void OnFrameReady(KinectSensor kinectSensor, ColorImageFormat colorImageFormat, byte[] colorImage, DepthImageFormat depthImageFormat, short[] depthImage)
            {
                if (this.faceTracker == null)
                {
                    try
                    {
                        this.faceTracker = new Microsoft.Kinect.Toolkit.FaceTracking.FaceTracker(kinectSensor);
                    }
                    catch (InvalidOperationException)
                    {
                        // During some shutdown scenarios the FaceTracker
                        // is unable to be instantiated.  Catch that exception
                        // and don't track a face.
                        //Debug.WriteLine("AllFramesReady - creating a new FaceTracker threw an InvalidOperationException");
                        this.faceTracker = null;
                    }
                }
    
                if (this.faceTracker != null)
                {
                    FaceTrackFrame frame = this.faceTracker.Track(
                        colorImageFormat,
                        colorImage,
                        depthImageFormat,
                        depthImage,
                        Microsoft.Kinect.Toolkit.FaceTracking.Rect.Empty);
                        //new Microsoft.Kinect.Toolkit.FaceTracking.Rect(100,100,500,400)); 
    
                    this.lastFaceTrackSucceeded = frame.TrackSuccessful;
                    if (this.lastFaceTrackSucceeded)
                    {
                        if (faceTriangles == null)
                        {
                            // only need to get this once.  It doesn't change.
                            faceTriangles = frame.GetTriangles();
                        }
    
                        this.facePointsProjected = frame.GetProjected3DShape();
    
                        this.rotationVector = frame.Rotation;
                        this.translationVector = frame.Translation;
                        this.faceRect = frame.FaceRect;
                        this.facepoints3D = frame.Get3DShape();
                    }
                }
            }
    

    frame.TrackSuccessful始终为false . 任何的想法?

  • 1

    我终于弄清楚了,并在MSDN论坛上发布了一篇关于要使其工作还需要做些什么的帖子 .

    It's here.

    希望有所帮助!

相关问题