2012-02-09 21 views
3

我正在使用用戶跟蹤:我已經註冊了回調 (User_NewUser,User_LostUser,Pose_Detected,Calibration_Start, Calibration_End)。 當我進入傳感器區域時,我以正確的方式檢測和校準了 。但是當我離開傳感器區域(並且沒有其他人在裏面)時,我希望程序調用回調「User_LostUser」,但是 似乎沒有做到這一點。 (實際上,當我再次進入時,傳感器仍然跟蹤我!) 我期望當用戶離開場景時,程序取消註冊/刪除他並重新啓動以檢查新用戶:任何人都可以幫助我嗎?Kinect + OpenNI:howto remove user

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 
);