3

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

2 回答 2

5

OpenNI(实际上是 NITE)会在离开现场后继续跟踪您几秒钟。如果您稍等片刻,您最终应该会收到 LostUser 回调。

话虽如此,如果您想自己检测离开场景的用户,您可以获得用户质心(使用 UserGenerator::GetCoM)。当用户离开场景时,重心将为 0,0,0。

于 2012-02-10T04:54:42.040 回答
1

您还可以 RegisterToUserExit 回调,在用户离开该区域后立即触发。

// register user callbacks

XnCallbackHandle user_cb_exit_handle;

user_generator.RegisterToUserExit(
User_ExitUser
,this
,user_cb_exit_handle
);
于 2012-06-20T14:18:57.617 回答