Click here to Skip to main content
Click here to Skip to main content

Kinect and WPF: Complete body tracking

By , 24 Apr 2011
 

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!

Update 20/04/2011

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!

Prerequisites

Using the Library

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:

using Nui.Vision;

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):

_skeleton = new NuiUserTracker("SamplesConfig.xml");

Just below that, you need to define the UserUpdated event.

_skeleton.UsersUpdated += new NuiUserTracker.UsersUpdatedHandler(Skeleton_UserUpdated);

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)!

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... 
}

Quite easy, huh?

Here is a list of all the available body parts:

  • Head
  • Neck
  • LeftShoulder
  • LeftElbow
  • LeftHand
  • RightShoulder
  • RightElbow
  • RightHand
  • Torso
  • LeftKnee
  • LeftHip
  • LeftFoot
  • RightKnee
  • RightHip
  • RightFoot

You may now start developing cool WPF Kinect applications and games. Imagination's the limit.

» Download binaries and source code.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)

About the Author

Vangos Pterneas
Software Developer Freelancer
Greece Greece
Member
I have been a student at Athens University of Economics and Business, Department of Informatics, since September 2007.
 
I mainly develop and design .NET applications in C#, ASP.NET and Silverlight, but I have also worked on J2EE, LAMP and C++.
 
Currently, I am a member of Microsoft Student Partners team and I work as a freelancer for several employers including the Institute for the Management of Information Systems and Vodafone Corporation. As a Student Partner, I have made lots of speaking engagements considering Microsoft technologies (ASP.NET, Silverlight, Windows Phone etc) to undergraduate / postgraduate students and developers.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Generalmay I ask you a question? Pinmemberkouna19 Jun '12 - 19:23 
QuestionThanks so much! Pinmemberduong21795 Jan '12 - 22:32 
Questionimage raw and depth map and labelmap are not sync Pinmembermakoos23 May '11 - 21:13 
hello vangos
i was working on your body tracking project and i saw that the image raw and depth map and labelmap are not sync , i dont have the source code of your nui.vision library can you help me with syncing these images
i appreciate your help
sincerely
makoos
ewe

Questionpoint cloud generating Pinmembermakoos22 May '11 - 23:09 
AnswerRe: point cloud generating PinmemberVangos Pterneas24 May '11 - 15:34 
GeneralGreat! but some trouble... PinmemberJonas Toftefors29 Apr '11 - 3:50 
QuestionProblem with latest version Pinmembercedtat123 Apr '11 - 11:50 
AnswerRe: Problem with latest version PinmemberVangos Pterneas24 Apr '11 - 9:49 
GeneralRe: Problem with latest version [modified] Pinmembercedtat124 Apr '11 - 11:28 
GeneralAWESOME! [modified] Pinmemberhenrygoro25 Mar '11 - 3:40 
GeneralRe: AWESOME! PinmemberVangos Pterneas24 Apr '11 - 9:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130523.1 | Last Updated 24 Apr 2011
Article Copyright 2011 by Vangos Pterneas
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid