Exemplo n.º 1
0
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();
    }
}
Exemplo n.º 2
0
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);
            }
        }
    }
}