Microsoft Announces "Kinect Accelerator" to Turn Hacks into Businesses
technologyreview.com
technologyreview.com
Historically, Microsoft trying to exert control over how exactly their product is used has not been a problem anyone has had.
If anything, one could argue that their product's quality (perceived and real) has been diminished by giving 3rd party developers too much freedom to run amok.
To give a counter-example, while it's been a while since I was involved in Windows development, I do remember an instance where a developer released a unit testing plugin that happened to be compatible with VS Express, and was forced to withdraw it at Microsoft's insistence. There was no quality issue there (not that I recall, anyway), it was purely a market segmentation and control ploy to ensure that anyone who wanted "serious" functionality had to buy VS Pro.
There are two high-level SDKs that you can use to build Kinect applications relatively easily. The first is OpenNI+NITE by PrimeSense, the company that designed the sensor used in the Kinect. The other is Microsoft's own Kinect SDK which is based on C#.
Both of these have very restrictive licenses. If you're not a hobbyist or an academic, there's no clear path to acquiring a license that would allow you to deploy applications. I imagine PrimeSense is happy to license their toolkit, but I have no idea about the price -- I'd imagine it's not cheap. The Microsoft SDK is going to be available for commercial licensing next year, but the terms are not known yet (AFAIK).
There is a third option for building Kinect applications, and this is the one I chose for my software. Instead of using the high-level SDKs, you can access the raw depth camera data from the sensor using a free driver. The data is quite clean because the Kinect does a lot of processing internally, so all you need to do is build the high-level interface -- i.e. interpreting the depth data to detect people and gestures, or whatever it is that your app needs to do. This way, the resulting app is not tied to the PrimeSense or Microsoft SDKs.
Asus has licensed the sensor for a Kinect-like product for PCs, but it's still not available off-the-shelf. It also won't work with the existing free Kinect drivers, so porting will be needed to switch to the Asus.
Asus should embrace the free drivers, BTW, and make whatever they build compatible with them.
But that would, probably, have a very negative impact on their Windows OEM pricing...
Unfortunately the project I made was nothing like that. The client was a major Finnish multinational tech company (one that doesn't make phones), but their R&D is so backwards and completely oriented towards incremental improvements that this project had to be sneaked in through the marketing budget, using whatever crumbs of money they had left.
Regarding the the upcoming commercial release, the FAQ implies that those commercial restrictions will be lifted, but of couse, the exact details aren't yet known: "Under the terms of the [current] SDK license, remember you cannot receive payment for your application, use your application for advertising, use your application to solicit donations, or use your application in your internal business operations. The commercial release, which is coming in early 2012, will remove these constraints."
So now you can use the SDK to build commercial products, but only if chosen and willing to give up 6%? Why the "walled garden"?
Also, (I might be completely off here since I am not competent enough with the ML) but to take a webcam image and then append the Z coord to a pixel would require someone to sit and label their dataset before it is useful to train the classifier (in which btw, the Z-coord can take anything between 80 - 300 cm - so > 200 classes). This definitely does not look so trivial to me.
When I mean easy, I mean in the sense that a community of people can create it in an open source way. I doesn't mean that i personally can whip it up on my laptop in a few minutes.
I remember reading somewhere that the depth sensor projects something (infra-red?) on a surface and then the transformation of the image is used to build the 3D model. So it might still need some specialized hardware (not necessarily MS hardware since Asus seems to have a similar device out in the market).
EDIT : NVM I just looked up the video of Andrew Ng's class where they discussed this. So it is possible.
The kinect dodges this problem by actively gathering extra info. It projects a rapidly changing pattern of infrared light out in front of it; based on the pattern it detects it can figure out how long the light took to reach a reflective surface at each pixel and infer the depth from that.
(Emphasis mine.)