2012-02-09 20 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 
);