2012-02-09 8 views
3

を削除私は、ユーザーの追跡で働いている:私は、コールバック (User_NewUser、User_LostUser、Pose_Detected、Calibration_Start、 Calibration_End)に登録しました。 センサーエリアに入ると、私は正しい方法で で検出され校正されています。しかし、私がセンサ領域を残すと(他の誰も内部にいない)私は プログラムがコールバック "User_LostUser"を呼び出すことを期待していますが、 はそれをしていないようです。 (実際には、私が再び入力すると、センサーはまだ私を追跡します!) ユーザーがシーンを離れるときに、プログラムが登録を解除/削除し、 新しいユーザーを確認するために再起動します。のKinect + OpenNIは:HOWTOは、ユーザー

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