I am currently doing a project where I have to build a blobtracker using Kinect. The application has to log blob information and track people through a room.
The OpenNI scene analyzer provides some useful information, i.e. it can retrieve masked camera images for all users that are being tracked. I can input this masked image to OpenCV in order to find the blob information (contour, centroid, etc). Afterwards I can do my own analysis on those contours and store the necessary data. Up to this point it all seems pretty neat, but my biggest problem is with performance.
The OpenNI data generators run at a default of 30 fps and a resolution of 640x480. Is there any way to change this and what are the possible implications? I’ve tried altering the map output mode, but that seems to crash the application when I call the SetMapOutputMode() function during setup.
Furthermore, the OpenCV contour finder seems computationally heavy, cutting my framerate in half from 30 fps to 15 fps or even lower. For my application a minimum of 30 fps is desirable to ensure that I track people that are moving around.
How can I optimize my application for OpenNI/OpenCV? Or are there any other suggestions for my approach on blob tracking?
Related question: when OpenNI skeleton tracking is enabled, it is constantly looking for users standing in the ‘psi’ position to calibrate the skeleton. The only part I am interested in is the scene analyzer (as explained above), i.e. getting a person blob from the camera image without the skeleton tracking. But it seems the whole skeleton tracking needs to be enabled to get the blob info that I need. Is there any way to disable skeleton tracking/calibration and still get the blob information?