Starting Out Developing for Kinect. Which Path?

Kinect, what an amazing piece of device you are. If you asked me what I love about Kinect then I’ll simply tell you this: it simplifies and accelerate the development of Computer Vision-based application due to one particular fact: the device itself is already able to do background separation out of the box thanks to its build in IR light and camera.

So, after it’s been released for over a year now, some of you may want to start develop app with Kinect. If so, then you’re in for a treat, as so many drivers and frameworks are already available to use . But, which one should I choose? Here’s a simple guide of which one you can pick based on my experience.

As with every hardware, a driver is required for your Kinect to speak with your driver. Currently there are 3 main drivers available:
1. OpenNI
2. Freenect
3. Kinect SDK

OpenNi and Freenect were conceived at the early days of Kinect, and thus they’re already widely used in today’s existing Kinect-based apps. These open source drivers are available for Linux, Mac OSX and Windows. Both have been implemented in many libraries as well. For example, the Synapse toolkit for Mac OSX-only Quartz Composer is based on OpenNi skeletal tracking, while the Freenect is implemented in Pure Data, which is available for all 3 mentioned platforms.

On the other hand, the Kinect SDK, whose version 1.0 has just been released is only available for Windows 7. However, this official SDK from Microsoft offers a blazingly fast skeleton tracking with no stupid calibration posed required. Also, if you use Kinect for Windows hardware, then a near tracking can also be done. The ability to package your app with the SDK and sell it for commercial purpose is also a welcomed feature that will surely accelerate growth of many startups.

So, there are 3 drivers available, with so many apps based on each one available, newbie developers might be tricked into installing a Kinect SDK based app, without installing that SDK, but instead the OpenNI one. What’s worse? Well, those 3 drivers couldn’t exist at the same time. I’ve tried it yesterday, the result: All 3 crashed. Beginner mistake. In this sense, then it would be wise to choose between these 3 drivers right. SO here’s my recommendation.

If you want to do a USEFUL skeleton-tracking based app, then don’t waste your time, go with the Kinect SDK. It’s fast, and you can use it without the skeleton calibration pose. OpenNI can do it, but with the skeleton calibration pose, I found that it may well hinder people to actually use it. Do you want to stand with that pose in public? I doubt so.

However, if you want to check out some depth-tracking based apps, then don’t worry, use OpenNI (along with avin2 driver and NITE Middleware). There are heaps of useful app, with my favorite include the amazing Simple Kinect Touch. This app tracks the depth image, do blob tracking and ends up spits out TUIO messages for your multi-touch purpose.

One thing for sure, for now, many Kinect-based apps are based on OpenNI, fewer based on Freenect and more to come based on Kinect SDK, which makes sense. OpenNI has been existed longer than Kinect SDK, so it’s just logical to have many Kinect-based app use it. However, I can see the trend of many more apps build around Kinect SDK. It’s just a matter of time.

Which one do I choose? Well after having some experiences with OpenNI in my Mac OSX, and looking at what’s coming out now, I choose to move to Windows 7 with the combination of the Kinect SDK and the Cinder block for that SDK. Why? Because some projects that I had in mind requires that skeleton tracking. so, yours may be vary.

Happy coding 🙂

One Comment

Leave a Reply