For help compiling see COMPILING. For usage help, see USAGE. Link to source (svn): http://code.google.com/p/kinect/source/browse From the links on the left tree: trunk/project/v0.2.1/group3 Link to oni file (google code): http://code.google.com/p/kinect/downloads/detail?name=wave.oni&can=2&q= Link to YouTube video: http://www.youtube.com/watch?v=qRPH_HQkB8w -------------- Link to our source (SVN browser) : http://code.google.com/p/kinect/source/browse/#svn%2Ftrunk%2Ffreenect%2Fgroup3 GestureRecognizer.{h,cpp} An example of how to use the GestureRecognizer is shown in SceneDrawerMain.cpp. To initialize: GestureRecognizer recognizer; recognizer.init(SAMPLE_XML_PATH); To register a callback: recognizer.registerUserCallbacks(User_NewUser, User_LostUser); -- where User_NewUser and User_LostUser are defined according to the following signature, defined in GestureRecognizer.h: typedef void (XN_CALLBACK_TYPE* UserHandler)(xn::UserGenerator& generator, XnUserID user, void* pCookie); SceneDrawer.{h,cpp} and SceneDrawerMain.cpp: The scene drawer can draw the kinect data (depth/rgb) in a gl window, as well as draw text on top of the scene. The SceneDrawerMain program provides an example usage of both the GestureRecognizer and SceneDrawer components. To render the depth/rgb maps using the SceneDrawer, grab the depth and scene metadata from the depth and user generators, respectively, and pass both structures to the DrawDepthMap() function. This code is from the OpenNI sample, and was modified to use the GestureRecognizer instead of directly using the generators, where possible. The Label is used internally to remember where strings are placed within the window. to draw text, simply call SetLabel(...) with the appropriate arguments. The same call will update a label's text if it already exists. Each label is identified by a name so that it is easy to update the text in several areas on the screen without having to reset their positions. HandTracker.{java,h,cpp} The HandTracker component wraps a subset of the GestureRecognizer in Java. There is no need to use or modify the C++ files (we will make adjustments upon request). The HandTracker currently doubles as an example of how to use the wrapper. The wrapper consists of the methods marked "native" and the example code is in the main method, the constructor, and the methods called from run(). To use this component, implement the appropriate interface and register the implementing objects with the following calls: public native void RegisterHandCallbackObject( IHandCallbackObject obj ); public native void UnRegisterHandCallbackObject( ); public native void RegisterGestureCallbackObject( IGestureCallbackObject obj ); public native void UnRegisterGestureCallbackObject( );