Today, I’m going to show you how to detect a jump using Kinect and Vitruvius. Jumping is one of the most challenging actions to detect.
In this tutorial, you’ll also learn how to measure the vertical distance between the person and the floor. To have a better visualization, we are also going to animate a 3D model while the person is moving. Sounds complex? Don’t worry! Using Vitruvius, we can do it in a few minutes.
Why detecting a jump is difficult?
Detecting and measuring a jump is not trivial. Why? Because jumping is a complex action. Jumping is not about body joints only. We need to consider various parameters from the human body and the environment. As a result, we need two types of data:
- The position of the lower body joints.
- The position & orientation of the floor.
Let’s see how Kinect, Unity and Vitruvius can solve this problem.
Prerequisites
To run the demos, you’ll need the following software and hardware:
- Kinect for XBOX v2 sensor with an adapter (or Kinect for Windows v2 sensor)
- Kinect for Windows v2 SDK
- Unity3D 5.5 or higher
- Windows 8.1 or higher
- Visual Studio 2013 or higher
- A dedicated USB 3 port
Jump Detection in Unity
Since we want to animate a 3D model, we’ll be using Unity3D. Here is a step-by-step guide:
Step #1 – Download Vitruvius
The Jump gesture/action is available in the Academic, Premium, and Platinum packages of Vitruvius. When you download the package, unzip the compressed folder and launch Unity3D.
Step #2 – Open the Sample projects
Vitruvius comes with 11 sample projects, so you can get started immediately. Open LightBuzz.Vitruvius.3.6.0.unitypackage and extract their contents into a new Unity project. Check the official Unity Documentation on how to import a custom Unity package.
Step #3 – Open the Jump Scene
The scene is loaded with a 3D avatar:
Step #4 – Add the JumpFBX script
Select the avatar in the Hierarchy window and check its properties in the Inspector window. Add the script named “JumpFBX.cs”. The JumpFBX script will add jump capabilities to any FBX 3D model.
Step #4 – Move around!
When Kinect is connected, stand in front of the sensor and move 2 times back-and-forth within the field of view. This is an essential step, since Kinect will be scanning the floor while you are moving.
Check this video to see how:
Step #5 – Get the height of the jump
To detect the exact height of a jump, all you have to do is call the JumpHeight property of the model object. It’s measured in meters:
var height = model.JumpHeight;
The sample project will automatically notify you when someone is jumping. Here is a snapshot of Michail (the guy is jumping really high):
This is it! You can now create amazing apps using Kinect and Vitruvius motion analysis tools.
‘Til the next time, keep Kinecting.
Download Vitruvius
What’s the accuracy for the jump detection? 1/10 of meter or 1/100 of meter? Thanks!
Hi, Robert. For an ordinary person, the level of accuracy is 1/10 of meter.
Hi, do you think it will be possible to use jump detection algo/classes in other projects other than Unity (WPF for example)?
Sure, that would be definitely feasible using one of the newest additions: the Floor object. Using Vitruvius, you can access the Floor object and use the DistanceFrom() method to detect its distance from any other point in the 3D space.
Body body = bodyFrame.Bodies().Closest();
Floor floor = bodyFrame.Floor();
CameraSpacePoint ankleLeft = body.Joints[JointType.AnkleLeft].Position;
CameraSpacePoint ankleRight = body.Joints[JointType.AnkleRight].Position;
const float threshold = 0.01f;
if (floor.DistanceFrom(ankleLeft) > threshold && floor.DistanceFrom(ankleRight) > threshold)
{
// The user is jumping.
}