Saturday, December 24, 2011

Candescent NUI 11936

I've created a new release of Candescent NUI. It can be downloaded here: [source] or [binary]

Here's a list with the changes.

HandDataSource Split
I've moved part of the code that was in CCT.NUI.HandTracking to the Core library. There's a new namespace CCU.NUI.Core.Shape that contains a new kind of data source: IShapeDataSource

 I've moved the convex hull and contour detection to this new data source. The process is now:
1. Clustering: Creates clusters
2. Shape processing: Creates shapes that have a convex hull and a contour
3. Hand detection: Uses shapes to detect hand data (like finger tips and center of palm)

There's a new class in town: HandDataFactory
When you want to control the setup and handling of OpenNI or the Kinect SDK yourself and not use the DataSource classes as required until now, you can create a HandDataFactory. It offers only two methods, one that creates hand data from a pointer to OpenNI depth data and the other that takes a ImageFrame returned by the KinectSDK.

var factory = new HandDataFactory();

var handData = factory.Create(depthGenerator.DataPtr);

//Kinect SDK
var handData = factory.Create(imageFrame);

Other changes
- Contour points now also have a Z value
- Performance should be a bit better
- Internal refactoring

Friday, December 23, 2011

OpenNI (unstable)

The guys at OpenNI are keeping me busy :-)

I've upgraded Candescent NUI to the newest OpenNI release (unstable)

Downloadable here [binary] or [source]

Tuesday, December 13, 2011


I've tried to upgrade to the new unstable OpenNI version ( The installation was okay (had to restart because OpenNI didn't find an environment variable, but then it worked).

Everything seemed to run when I started the sample project from Visual Studio. But when I executed the compiled CCT.NUI.Samples.exe I only got an exception (nullreference exception because the pointer to the depth data is IntPtr.Zero). When I catched the exception the result was only noise:

I don't know why this happend but I guessed it might have something to do with the fact that I've got a 64bit machine but installed the 32bit version (this used to work with the stable version when I set the build output to x86).

After installing the 64bit version everything seems to work now. I've commited this version to CodePlex. The published binary will now also be compiled to run on 64bit.

To upgrade OpenNI follow the instructions given here: Avin KinectSensor

Download [Source] or [Binary]

Wednesday, December 7, 2011

Kinect Hacks - End of a hype?

Almost exactly one year after the first 'Kinect Hacks' surfaced, the hype seems to be over. I've visited several sites and noticed that there are very few new things being posted.

Is it because nobody does cool stuff with the Kinect anymore? Or are there too few visitors to those sites to be worth maintaining?

I've made a list:
Last post: June 11
Second last post: June 2
Total hacks this week: 0
Last post: Sept 2
Second last post: Aug 29
Total hacks this week: 0
Inactive (this site even was hacked and nobody seems to care, visit the front page at your own risk!)
Last post: Nov 24
Second last post: April 19
Total hacks this week: 0
Last post: Dec 2
Second last post: Nov 27
Total hacks this week: 1
Almost inactive
-> The former admin created a new site here (active):
Last post: Dec 5
Second last post: Dec 5
Total hacks this week: 2
Somewhat active
Last post: today
Second last post: Dec 5
Total hacks this week: 5

Friday, December 2, 2011

Candescent NUI 11366

I've uploaded the new version of Candescent NUI to CodePlex (Binary and Source)

  • Finger Direction Detection (see details below)
  • Refactoring, improved Code Coverage

Finger Direction Detection
With this version it's possible to detect the direction the fingers point at. Each FingerPoint has a DirectionVector (normalized to a length of 1) that indicates the direction the finger is pointing at. That means you can define the following function where p is the tip of the finger, v is the direction vector and a is a scalar value:  f(a) = v*a + p
This results in the orange line (I've limited the length).

The orange dots are the base points. They're found by traversing a given quantity of points on the contour in both directions. The number of contour points to be skipped is depending on the z coordinate of the finger tip (the closer the hand is the more points are in the contour).

There is a new setting option that toggles whether the finger direction should be detected or not.