It's time for a really interesting and useful Kinect tutorial. We'll see how to achieve full body tracking using Kinect sensor, OpenNI library and Windows Presentation Foundation.
I found OpenNI C# samples a little messy, so I decided to develop a .NET 4 wrapper library which could be used into WPF applications whithout requiring .NET 2 staff like GDI+, System.Drawing, etc. I named it Nui.Vision and it's part of a larger framework I currently develop. Nui.Vision is a .NET 4 assembly which offers an easy-to-use body tracking API!
Nui.Vision is now compatible with the latest release of OpenNI framework (1.1.0.41). I have made some changes and bug-fixes to it, including the skeleton-display fix provided by roni26_wu (see comments below). An open-source version of Nui.Vision is coming soon!
Here is a short video I created to demonstrate complete body tracking in pure WPF (up to 6 people can be recognized). You need to stand in "Psi" position in order to start tracking:
» Download binaries and source code.
Using Nui.Vision is a piece of cake. All body tracking is done in the background, so you only need to update your user interface when the proper events fire. Firstly, add a reference to OpenNi.net.dll and Nui.Vision.dll. Also import a valid configuration file to your project, as described here. Do not forget to type the corresponding using statement:
[code lang="c#"]using Nui.Vision;[/code]
Then declare a new NuiUserTracker object and initialize it in the constructor. Provide the path of the configuration file you previously imported (do not forget to paste the same file in the Debug/Release folders of your application):
[code lang="c#"]_skeleton = new NuiUserTracker("SamplesConfig.xml");[/code]
Just below that, you need to define the UsersUpdated event.
[code lang="c#"]_skeleton.UsersUpdated += new NuiUserTracker.UserListUpdatedHandler(Skeleton_UsersUpdated);[/code]
A proper event handler is created. The NuiUserEventArgs parameter provides you with a collection of all the recognized users! You can now get the coordinates (X, Y and Z) of every body part of every user (OpenNI currently supports 15 body parts)!
[code lang="c#"]foreach (var user in e.Users){ float headX = user.Head.X; float headY = user.Head.Y; float headZ = user.Head.Z; float neckX = user.Neck.X; float neckY = user.Neck.Y; // etc...}[/code]
Quite easy, huh?
Here is a list of all the available body parts:
You may now start developing cool WPF Kinect applications and games. Imagination's the limit.
CodeProject
Awesome work pal! Keep up the good work! :)
Pingback from Kinect and WPF: Complete body tracking | www.nalli.net
you are THE MAN!!!!
The depth camera is next to the colour one, and that is why the body marks are shifted a bit. It shouldn't be difficult to fix it :-)
Excellent work!
Thank you everyone. I appreciate your comments.
@Erevodifwntas: It is quite easy to fix this issue in the UI, but you may not need to display the color image all times.
Pingback from Guide: Kinect Body Tracking - KinectHacks.net
Nice job :D
Is there a way to control kinect motors with this wrapper?
@Nooby:
Kinect motors cannot be controlled using OpenNI libraries. You can either use libraries such as CLNUI or wait for the official drivers release.
Pingback from Guide: Kinect Body Tracking | Gaming Now
Pingback from K??rpersprache bei Frauen » Blog Archive » Ultimate Power Wrestling
It look like very cool, but I though that the joints position of you got is not accurate. Try this, " DepthGenerator.GetAlternativeViewPointCap().SetViewPoint(ImageGenerator) "
Vangos! Very great stuff!
I just have a question, how can I develop further applications in WPF using your developments?
@roni29_wu:
Thank you very much for posting your correction!
@Foxtrot:
Simply create a new WPF project and add a reference to Nui.Vision. Then add a valid SamplesConfig.xml file and start developing your own Kinect apps!
How can I make .BVH files with it?
@Joe McPeek
You need to use OpenNI library for .BHV files.
Nui.Vision offers an easy-to-use API for managed user tracking.