A RESTFul web service for calibrating and tracking with multiple Kinects. Used by Gesture Tracker.
My undergraduate thesis, Tracking People with Multiple Kinects, discusses the original system. The user studies showed that the average joint difference across different scenarios are within personal space (~15cm). Average joint difference is a person's distance between their Kinect skeletons in different viewing perspectives when merged together.
A new paper is being written about the current toolkit, previous and new user studies.
The API is available here.
You will need the following software:
- The latest Kinect v2 SDK
- Windows 8 or abvoe
- USB 3.0
- Visual Studio
- Python 2.7x
Git clone the repository and install the dependencies.
Create a virtual environment for the server.
git clone git@github.com:cjw-charleswu/Kinect2Kit.git
cd Kinect2Kit/
virtualenv venv
source venv/bin/activate
(venv) pip install -r requirements.txt
Use Visual Studio to build the following projects. You may build either the debug or release version.
$ Kinect2Kit/toolkit/client/csharp/Kinect2KitAPI
$ Kinect2Kit/toolkit/client/csharp/Kinect2KitClient
Build the Kinect2KitAPI from the Kinect2Kit using Visual Studio.
$ Kinect2Kit/toolkit/client/csharp/Kinect2KitAPI
Clone the Gesture Tracker application.
git clone git@github.com:cjw-charleswu/GestureTracker.git
Build the the application using Visual Studio. You may need to fix the Kinect2KitAPI reference path.
$ GestureTracker/GestureTracker/GestureTracker
The server is a Python Flask application. The clients are C# WPF applications.
The IP address and port number are optional. By default, the server will run @ localhost:8000.
$ cd Kinect2Kit/
$ source venv/bin/activate
(venv) $ python run.py --host=[host] --port=[port]
Start the Kinect2KitClient application.
$ Kinect2Kit/toolkit/client/csharp/Kinect2KitClient/bin/AnyCPU/Debug/Body-Basics-WPF.exe
Start the Gesture Tracker application. It uses a configuration file.
$ GestureTracker/GestureTracker/GestureTracker/bin/Debug/GestureTracker.exe
The calibration procedure is based on 3D coordinate transformation proposed in Wei et al's paper on Kinect Skeleton Coordinate Calibration for Remote Physical Training.
The current approach works best when all Kinects are placed on the same level. In addition, it will fail when the Kinects are more than 90 degrees apart, for example, when they are opposite of each other.