2012-02-09 3 views
3

나는 사용자 추적 작업을하고 있습니다 : (User_NewUser, User_LostUser, Pose_Detected, Calibration_Start, Calibration_End) 콜백을 등록했습니다. 센서 영역에 들어가면 올바른 방법으로 감지되고 조정됩니다. 그러나 센서 영역을 떠날 때 (그리고 아무도 안에 있지 않다) 나는 프로그램이 콜백 "User_LostUser"를 호출 할 것으로 예상하지만 은 그렇게하지 않는 것으로 보입니다. (사실, 다시 입력 할 때 센서가 여전히 나를 추적합니다.) 사용자가 장면을 떠날 때 프로그램에서 등록을 취소/제거하고 새 사용자를 확인하기 위해 다시 시작합니다. 아무도 도와 줄 수 있습니까?Kinect + OpenNI : 사용자 제거 하우투

void XN_CALLBACK_TYPE User_LostUser(xn::UserGenerator& generator, XnUserID nId, 
    void* pCookie) { 
generator.GetPoseDetectionCap().StopPoseDetection(nId); 
generator.GetPoseDetectionCap().Release(); 
generator.GetPoseDetectionCap().StartPoseDetection("Psi", nId); 
} 

답변

5

OpenNI (NITE, 실제로)는 장면을 떠난 후 몇 초 동안 계속 추적합니다. 조금 기다리면 결국 LostUser 콜백을 가져와야합니다.

그렇다면 사용자가 장면을 떠나는 것을 감지하려면 UserGenerator :: GetCoM을 사용하여 사용자 중심을 얻을 수 있습니다. 사용자가 장면을 떠날 때 질량 중심이 0,0,0이됩니다.

1

사용자가 영역을 떠난 직후에 발생하는 RegisterToUserExit 콜백을 사용할 수도 있습니다.

// register user callbacks 

XnCallbackHandle user_cb_exit_handle; 

user_generator.RegisterToUserExit(
User_ExitUser 
,this 
,user_cb_exit_handle 
);