B A N   T H E   R E W I N D

My name is Stephen Schieberl. I am a Creative Technology Lead at Wieden+Kennedy in Portland, Oregon. I build everything from large format installations to experimental interactive art to database-driven web sites and more.

Friend on Facebook
Ban the Rewind?

Pictured: Using the Kinect SDK to track skeletons in Cinder PLEASE CHECK OUT THIS PAGE FOR THE NEW VERSION : http://bantherewind.com/kinectsdk-for-cinder The last thing the world needs is another way to get a Kinect working with a PC. However, those who've done it have generally found any path they've chosen to be quite challenging, as it's essentially been a hack. Personally, I've also found issues with these libraries ranging from nasty memory leaks and crashes to under or unsupported basic features. Microsoft recently released an official SDK with drivers for the device. The drivers work like a dream without any fuss. A huge bonus in using the official SDK is that it can skeletonize a user without a calibration pose. That is, it can figure out where all the joints in your body are without any work. Other libraries require to stand in a specific stance for a few seconds, rendering the feature essentially useless. Incorporating the block into Cinder eliminates this problem. After a couple days of work, the Kinect SDK block beta is online. The result so far is a block which is fast, reliable, and dead simple to implement. It acquires skeletons almost instantly without calibration. Memory management is clean and the block even comes with audio input support. BLOCK + INSTALLATION Download ciKinectSdk for Cinder ciKinectSdk 0.0.9 beta Follow these easy steps to install: Download and install the official SDK and drivers here Download the ciKinectSdk block from the link above Unzip the contents into your main Cinder path, merging it with your "blocks" folder Go to " cinder /blocks/kinectSDK/samples/KinectApp/vc10" and open "KinectApp.sln" with Visual Studio C++ Express or Visual Studio 2010 Build and run IMPORTANT! Do NOT move any of the SDK's files into the sample projects. The projects rely on a properly installed Kinect SDK to work. To create your own project, I recommend starting with the KinectApp sample and then build out from there. This will save you the work of trying to set up linking, DLL copying, etc. The block includes three samples projects. One is an input test (pictured above) displaying depth, video, skeleton, and audio data. Another is a point cloud (pictured below), demonstrating the all-important technique of reading pixel data from the depth image into a 3D space. And there is a bare bones, pardon the pun, skeleton project. To acquire audio from your Kinect, you simply treat it as you would any other audio input device. The KinectApp sample project includes my ciAudioInputWin block to capture audio from the Kinect's microphone. Happy Kinecting. Updated 2011-12-08 Works with the new Kinect SDK 1.0 beta 2 Support for multiple devices Control device head angle Improved stability and performance in the block and demos Block arranged to meet new CinderBlock guidelines and improve portability

The link to the file doesn't work. Any chance that you could reupload it? Thanks!

Sorry, I'd left the "b" off the filename. Actually just about to post the latest, 0.0.6, with a few optimizations.

Great, thanks for the quick reply! Looking forward to using this :D

Will you be including OSC functionality into this at some point?

@NBlanchette: Yes, I'll have the OSC project up on GitHub in its own repo later today.

Hi, I tried the code with Cinder and it's amazing. the only thing is that my processor is amd64. in the new Microsoft SDK the address to the libraries are changed so after changing and relinking the libraries and include files There was another error with the xcopy in build events because of the same issue with address changes. so I deleted that and relinked everything. build successfully and runs, the skeleton and Audio part works fine but it doesn't show the depth and the rgb image. My usb is usb3. could it be the case that causes the problem because of different package sizes? What do you suggest? any help is really appreciated. Many thanks, Hadi

@Hadi: 0.0.9 beta addresses your issues. The version of the SDK for which 0.0.8- was built had some significant differences from the you downloaded. One thing I've found is that the new beta's "Kinect Management Service" is really buggy. The IR emitter will shut off after use and not come on for awhile sometimes. Even with the included demos. :/

Beautiful work on the block, very well designed and easy to work with. I see that you can connect to the device by id ( nice feature ) however I don't see any way to derive the id from the device ? Cheers, Chris.

- I see that you can connect to the device by id - ( nice feature ) however I don't see any way to - derive the id from the device ? Make sure you are using the block from Github. It sounds like you are, just wanted to make sure since you replied to the post for the old version of the block. The device name and ID are in the DeviceOptions class. KinectSdk::DeviceOptions do = mKinect->getDeviceOptions(); string id = do.getDeviceId(); int32_t index = do.getDeviceIndex(); This is especially handy when stitching together images from multiple devices. The DeviceOptions instance that is required in your callback will tell you which device sent the image. void MyApp::onVideo( Surface8u s, const DeviceOptions& do ) { console() << "Image from device #" << do.getDeviceIndex() << endl; }

Hi Stephen, I'm just getting an empty string for getDeviceId() ( yes with github version ). That's when calling it before or after start or in the callback. BTW it would also be nice to have access to the IR stream in a future update. Thanks for your help, Chris.