2012-05-28 74 views
1

我正在開發用於臉部跟蹤的新型kinect SDK,並注意到示例(Previous Question)提供的託管和非託管代碼之間存在一些差異。使用C#和WPF,我不能重現快速的C++例子:開始與Kinect的爲Windows相同的設置,這裏的兩套代碼:Kinect SDK 1.5 - 臉部跟蹤:WPF色彩深度唯一跟蹤器

C++:

if (m_KinectSensorPresent && m_KinectSensor.GetVideoBuffer()) 
{ 
    HRESULT hrCopy = m_KinectSensor.GetVideoBuffer()->CopyTo(m_colorImage, NULL, 0, 0); 
    if (SUCCEEDED(hrCopy) && m_KinectSensor.GetDepthBuffer()) 
    { 
     hrCopy = m_KinectSensor.GetDepthBuffer()->CopyTo(m_depthImage, NULL, 0, 0); 
    } 
    // Do face tracking 
    if (SUCCEEDED(hrCopy)) 
    { 
     FT_SENSOR_DATA sensorData(m_colorImage, m_depthImage, m_KinectSensor.GetZoomFactor(), m_KinectSensor.GetViewOffSet()); 

     FT_VECTOR3D* hint = NULL; 
     if (SUCCEEDED(m_KinectSensor.GetClosestHint(m_hint3D))) 
     { 
      hint = m_hint3D; 
     } 
     if (m_LastTrackSucceeded) 
     { 
      hrFT = m_pFaceTracker->ContinueTracking(&sensorData, hint, m_pFTResult); 
     } 
     else 
     { 
      hrFT = m_pFaceTracker->StartTracking(&sensorData, NULL, hint, m_pFTResult); 
     } 
    } 
} 

C#:

int hr; 
      HeadPoints headPointsObj = null; 
      Vector3DF[] headPoints = GetHeadPointsFromSkeleton(skeletonOfInterest); 

     if (headPoints != null && headPoints.Length == 2) 
     { 
      headPointsObj = new HeadPoints { Points = headPoints }; 
     } 

     this.copyStopwatch.Start(); 
     this.colorFaceTrackingImage.CopyFrom(colorImage); 
     this.depthFaceTrackingImage.CopyFrom(depthImage); 
     this.copyStopwatch.Stop(); 

     var sensorData = new SensorData(this.colorFaceTrackingImage, this.depthFaceTrackingImage, DefaultZoomFactor, Point.Empty); 
     FaceTrackingSensorData faceTrackSensorData = sensorData.FaceTrackingSensorData; 

     this.startOrContinueTrackingStopwatch.Start(); 
     if (this.trackSucceeded) 
     { 
      hr = this.faceTrackerInteropPtr.ContinueTracking(ref faceTrackSensorData, headPointsObj, this.frame.ResultPtr); 
     } 
     else 
     { 
      hr = this.faceTrackerInteropPtr.StartTracking(
       ref faceTrackSensorData, ref regionOfInterest, headPointsObj, this.frame.ResultPtr); 
     } 

同樣的跟蹤調用的結果,顯然提供了相同的數據,導致c#爲false,C++爲true。

有什麼想法?我希望我的跟蹤器除了骨架數據之外還能工作,就像C++示例一樣。

回答

1

我發現了一個解決方案,在此論壇中提供了Microsoft Forum。您必須修改SDK提供給您的工具,並且提供的代碼混淆並不好,但最終它會起作用。