|LOST User Kinect||sottostee||9/30/12 4:17 AM|
I have a problem with: "How many time kinect needs to lose an user already detected?"
I wish kinect MUST to lose an user already detected when the user self leaves the field of view!
But in UserTrackr.java of OpenNI, kinect lose an user already detected NOT just the user self leaves the field of view but when the event is been triggered (sometimes also not few seconds).
Thanks in advance
|Re: LOST User Kinect||Alexander Khovansky||10/1/12 4:47 AM|
Can't say about Java, but in C/C++ interface you can subscribe to "User Exit" event (UserGenerator::RegisterToUserExit). It is generated when user has left the field of view but is not lost yet. There is complementary event "User ReEnter" (UserGenerator::RegisterToUserReEnter).
By the way, there is one quirk about user exit. Sometimes this event is not generated, but user mask (pixel map) returned by UserGenerator::GetUserPixels has no pixels, so user is in fact beyond the field of view. I noticed that when this happens, user never re-enters again and is lost after some time.
And keep in mind that NITE recycles user IDs. If you had a user with ID=1 and it have been lost, and you see ID=1 again, it is _another_ user (as NITE thinks).
From "NITE Algorithms.pdf" from NITE distribution:
If the user is not visible for more than 10 seconds, the user is considered lost and
an event is generated by the API. Their ID is freed and they will be given a new
ID if they are re-detected. Since IDs are recycled, another user may get the lost
user‟s ID at some point in the future. It is therefore important to catch this event
and inform the pose tracker to stop tracking the old user. This will ensure that
when a user with that same ID is re-detected, the pose tracker will request re-
calibration on that user.
|Re: [OpenNI-dev] Re: LOST User Kinect||Sérgio Passos Jr.||10/1/12 6:32 AM|
I created an array with the users, I add the UserID to this array on the "NewUser" and "ReEnter" events, and take that ID off the array on "UserLost" and "UserExit" events (if exists). To check if there is a user at all, just look if there is any in your array. If you leave through the left or right sides, or approaching the sensor, it will generate the "UserLost" immediately. If you leave by going too far from the sensor, it will wait for the 10s to generate the "UserExit" (and never generate UserLost).
2012/10/1 Alexander Khovansky <khov...@cvisionlab.com>
|Re: [OpenNI-dev] Re: LOST User Kinect||Alexander Khovansky||10/2/12 1:07 AM|
Behavior which I observe (with Kinect) is more logical. If user leaves through either side or goes too far / too close, the "exit" event is generated, and 10 seconds later, if user has not returned - the "lost" event.
The way to cause tracking disruption is to make big changes in the whole scene - quickly approach the sensor very close or quickly turn it. Then all users are lost immediately and some false detections can appear.
|Re: [OpenNI-dev] Re: LOST User Kinect||Sérgio Passos Jr.||10/2/12 1:42 PM|
Sorry about the mistake on the "user lost" and "user exit" I made, Alexander is right, but the logic applies.
2012/10/2 Alexander Khovansky <khov...@cvisionlab.com>
To view this discussion on the web visit https://groups.google.com/d/msg/openni-dev/-/B_DBXJnKHgAJ.
|Re: LOST User Kinect||sottostee||10/5/12 2:58 AM|
Thank you very much for the reply.
it's just what I need.
But i have another question: can i reduce or increase the time kinect takes to lose an user?
For example: I wish kinect considers lost an user is not visible for more than 5 seconds (and not 10 seconds).
Can I this?
|Re: LOST User Kinect||Alexander Khovansky||10/5/12 4:11 AM|
Here Lior Cohen said "there is no way at the moment to set/change the timeout value or remove it altogether". I have not heard that it changed since then.
But you can simulate smaller timeout yourself.
|Re: LOST User Kinect||sottostee||10/5/12 8:10 AM|
Thanks for the reply
I think the same if i use an object Timer that after an interval of x(<10 seconds) seconds triggers an event "lost user id" for the kinect system.
But, how to trigger an event of this? How to intercept kinect system?
thanks in advance
|Re: [OpenNI-dev] Re: LOST User Kinect||Bhavna Agarwal||10/5/12 8:53 AM|
use "exit" event for this
|Re: LOST User Kinect||Alexander Khovansky||10/5/12 9:11 AM|
You cannot trigger OpenNI event (AFAIK).
But you could maintain your own list of active users with mapping OpenNI_ID -> my_ID. Consider user lost after 5 seconds of inactivity, but continue to watch its events. If it reenters, consider it new user and assign new my_ID.
|Re: [OpenNI-dev] Re: LOST User Kinect||sottostee||10/5/12 9:16 AM|
unfortunely exit event don't solve my problem...
Because, supposed that an user (already detected) do quick movements and he has mapped with a (new) id, his "old" id remain until a 'lost' event is triggered.
And i don't want this happen.
I wish decide the time within which an user is considered "lose".
|Re: [OpenNI-dev] Re: LOST User Kinect||Sérgio Passos Jr.||10/10/12 10:17 AM|
Alexander Khovansky previously wrote in this discussion: "By the way, there is one quirk about user exit. Sometimes this event is not generated, but user mask (pixel map) returned by UserGenerator::GetUserPixels has no pixels, so user is in fact beyond the field of view. I noticed that when this happens, user never re-enters again and is lost after some time.
I suggest checking the UserPixels as well, if there is none you can wait or consider him lost immediately. This should work even when the user is detected as a new user because he moved too fast. To workaround the ID recycling, maybe you could keep track of the user position, if he is detected far from the "lost" position, it might be another user who entered the scene but used the same ID.
To be honest I have to improve this user control on my app as well, I'll try the UserPixels idea.