Kinect + OpenNI:如何删除用户

时间:2012-02-09 11:59:12

标签: tracking kinect openni

我正在处理用户跟踪:我已经注册了回调 (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);
}

2 个答案:

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