我正在处理用户跟踪:我已经注册了回调 (User_NewUser,User_LostUser,Pose_Detected,Calibration_Start, Calibration_End)。 当我进入传感器区域时,我在中检测并校准 正确的方法。但是当我离开传感器区域(没有其他人在里面)我 期望程序调用回调“User_LostUser”,但确实如此 似乎没有这样做。 (事实上,当我再次进入时,传感器仍然跟踪我!) 我希望当用户离开场景时,程序取消注册/删除他和 重启以检查新用户:有人可以帮助我吗?
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);
}
答案 0 :(得分:5)
OpenNI(实际上是NITE)会在离开现场后继续跟踪你几秒钟。如果你稍等一下,你最终应该得到LostUser回调。
话虽如此,如果您想要检测用户自己离开场景,您可以获得用户质量中心(使用UserGenerator :: GetCoM)。当用户离开场景时,质心将为0,0,0。
答案 1 :(得分:1)
您还可以使用RegisterToUserExit回调,该回调会在用户离开该区域后立即触发。
// register user callbacks
XnCallbackHandle user_cb_exit_handle;
user_generator.RegisterToUserExit(
User_ExitUser
,this
,user_cb_exit_handle
);