void storeFace(int playerID) { HRESULT hrFT = E_FAIL; FT_SENSOR_DATA sensorData(iftColorImage, iftDepthImage); FT_VECTOR3D hint[2]; hint[0].x = skels[playerID][NUI_SKELETON_POSITION_HEAD].x; hint[0].y = skels[playerID][NUI_SKELETON_POSITION_HEAD].y; hint[0].z = skels[playerID][NUI_SKELETON_POSITION_HEAD].z; hint[1].x = skels[playerID][NUI_SKELETON_POSITION_SHOULDER_CENTER].x; hint[1].y = skels[playerID][NUI_SKELETON_POSITION_SHOULDER_CENTER].y; hint[1].z = skels[playerID][NUI_SKELETON_POSITION_SHOULDER_CENTER].z; if (lastTrackSucceeded) { hrFT = pFaceTracker->ContinueTracking(&sensorData, hint, pFTResult); } else { hrFT = pFaceTracker->StartTracking(&sensorData, NULL, hint, pFTResult); } lastTrackSucceeded = SUCCEEDED(hrFT) && SUCCEEDED(pFTResult->GetStatus()); if (lastTrackSucceeded) { pFTResult->Get3DPose(&faceScale, faceR, faceT); printf("%3.2f, %3.2f, %3.2f, %3.2f\r\n", faceScale, faceR[0], faceR[1], faceR[2]); } else { pFTResult->Reset(); } }
void FTHelper2::CheckCameraInput() { HRESULT hrFT = E_FAIL; 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()); if (m_UserSelectCallBack != NULL) { (*m_UserSelectCallBack)(m_UserSelectCallBackParam, &m_KinectSensor, m_nbUsers, m_UserContext); } else { SelectUserToTrack(&m_KinectSensor, m_nbUsers, m_UserContext); } for (UINT i=0; i<m_nbUsers; i++) { if (m_UserContext[i].m_CountUntilFailure == 0 || !m_KinectSensor.IsTracked(m_UserContext[i].m_SkeletonId)) { m_UserContext[i].m_LastTrackSucceeded = false; continue; } FT_VECTOR3D hint[2]; hint[0] = m_KinectSensor.NeckPoint(m_UserContext[i].m_SkeletonId); hint[1] = m_KinectSensor.HeadPoint(m_UserContext[i].m_SkeletonId); if (m_UserContext[i].m_LastTrackSucceeded) { hrFT = m_UserContext[i].m_pFaceTracker->ContinueTracking(&sensorData, hint, m_UserContext[i].m_pFTResult); } else { hrFT = m_UserContext[i].m_pFaceTracker->StartTracking(&sensorData, NULL, hint, m_UserContext[i].m_pFTResult); } m_UserContext[i].m_LastTrackSucceeded = SUCCEEDED(hrFT) && SUCCEEDED(m_UserContext[i].m_pFTResult->GetStatus()); if (m_UserContext[i].m_LastTrackSucceeded) { SubmitFraceTrackingResult(m_UserContext[i].m_pFTResult, i); } else { m_UserContext[i].m_pFTResult->Reset(); } SetCenterOfImage(m_UserContext[i].m_pFTResult); } } } }