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 に答える