PrimeSense, the company who invented the Kinect hardware, has just released Version 2 of its OpenNI SDK and it's a major revision. What does it have to offer the Kinect or depth camera programmer?
OpenNI is a framework for 3D Natural Interaction sensors including PrimeSense's own reference device and the Asus Xtion sensor. It also supports Microsoft's Kinect but in this case you also have to install the Microsoft SDK to provide the special drivers that are needed.
The new version is available for Windows 32 and 64 bit and Linux an OSX version is in the pipeline. Once installed you can create programs using C++ via Visual Studio or GCC. To quote the documentation:
"OpenNI 2.0 represents a major change in the underlying design philosophy of OpenNI. A careful analysis of the existing API has revealed that it has many features that are rarely or never used by the community. When designing OpenNI 2.0, the OpenNI team endeavored to greatly reduce the complexity of the API. Features have been redesigned to reflect actual use by the community. The method used to communicate with depth sensors has been made easier to understand. "
In other words, some of the more complex features have been removed from the SDK and, if appropriate, moved into the "middleware". The SDK doesn't do much more than give you access to the raw data provided by the sensor. It you want to gain access to higher level "processed" - gestures and skeleton detection and tracking then you have to install an additional layer of middleware. There are two problems with the Middleware. The first is that it isn't open source like the SDK and you have to register to use it. The second is that many Kinect programmers are of the opinion that Microsoft's "middleware" included in the Microsoft SDK is very difficult to beat. PrimeSense's own middleware, NiTE 2.0 has also been revamped to work with the new SDK.
Other improvements in the SDK include simplified approach to data types and the dropping of the complicated metaphors for using the device via its data. Overall the SDK is said to be easier to use and easier to learn. This may be true but if you have some software that makes use of the old SDK you are going to have to some work to upgrade it.
So why would you choose the OpenNI SDK over the Microsoft SDK?
If you have a non-Microsoft depth camera then you really don't have a choice the new SDK is all that is available. If you are working with the Kinect then you might opt for the OpenNI SDK because it is open source but its dependence on the Microsoft SDK rather spoils this advantage. The latest Microsoft SDK also has more resources and feature and comes with the "middleware" built in. It also allows you to code in .NET languages as well as C++.
If the recent announcement by PrimeSense that it is about to unveil a new and much smaller depth camera suitable for mobile devices proves good, then the role of OpenNI might just become much more important.