The new Kinect SDK 1.7 features a very interesting tool: hand detection including open and closed hands (grip). However, the documentation for how to use the WPF controls or even how to set up and handle hand interaction events is quite poor, especially without using a KinectRegion.
We at CMSoft bring you a very basic sample demonstration to show how to handle Kinect open/close hand interactions. We show how to use C# to implement IInteractionClient to create the InteractionStream and handle the InteractionFrameReady event.
In this example, we demonstrate how to track positions and grips of left and right hands from 2 users. The Labels move and change color as users grip.
We’re working to develop hand-controlled presentation software and 3D interaction with virtual worlds, stay tuned! Also feel free to comment or ask questions in our forum.
In the age of information, where huge amounts of data is available in the most diverse formats such as text, pictures, movies and audio and in a myriad of applications such as the Web itself, Facebook, Linkedin, Instagram, retrieving the most useful information is still a challenge.
The topic is closely related to parallel processing insofar as lots of computing power is necessary to fulfill queries whose complexity doesn’t cease to increase. It would not come as a surprise to see servers resort to GPU-powered OpenCL solutions for improved performance in the near future.
The topic has raised interest in the corporate world: the Wall Street Journal published two very interesting articles about the theme:
Interactive technologies have become extremely important in a world where busy users demand intuitive devices which demand little to no learning time. In this modern scenario, tablets have emerged with their easy-to-use touchscreens, gaming consoles have been successfully exploring movement controls (Wii, PS3 eye, Kinect) and augmented reality has started to emerge as a viable technology.
However, implementation of intelligent systems using devices such as the Kinect usually involves real-time processing of data from multiple sensors (RGB camera, depth camera, audio, accelerometers). This task can be achieved using OpenCL to harness the processing power of multicore GPUs and CPUs.
CMSoft brings you a tutorial on how to create a C# framework to capture Microsoft Kinect sensor data and transfer it to an OpenCL GPU Device, thus enabling the development of software that can potentially process Kinect data hundreds of times faster when compared to pure CPU processing.
In the results we show two OpenGL textured quads which are used to display RGB and depth information acquired from a Kinect sensor. Notice that there is a full false coloring procedure which includes highlighting players detected by Kinect.
Amdahl software has posted an interesting article about why they think programmers should like OpenCL, which has quite useful insights. Some of the reasons are direct criticism to CUDA (without explicitly naming it). OpenCL has advantages in some aspects but it also has drawbacks considering CUDA’s maturity is undeniably higher and that CUDA can be specifically tuned (since it only targets NVidia GPUs anyway).
Here are their thoughts with a brief comment of ours: (bold letters are theirs, regular writing are our thoughts – we agree with every aspect pointed out)
1 – OpenCL can accelerate code by a factor 10 or more – without too much trouble for a C programmer. If the code is finely tuned we’re looking at 40-300x speedup. 2 – OpenCL is an open standard – good because any manufacturer can comply; the drawback is that it limits optimizations. 3 – OpenCL can help save power – true, and often taken for granted. 4 – OpenCL can save you hardware cost – well… not that we have too many CPU and GPU manufacturers… let’s hope for some FPGAs and handheld OpenCL soon. 5 – OpenCL adoption is ramping up rapidly – although there’s a LOT of ground to cover. The hardware and programmer sides are going well but there aren’t very many softwares around using it. 6 – OpenCL may be used as the basis for generating custom hardware – unquestionable. 7 – The OpenCL C99 language is based on C – this is good news for C programmers alright. 8 – OpenCL can be used from a variety of host languages – but you’re still stuck with OpenCL C99 for the kernels… 9 – It is easy to start with OpenCL – as long as you already know parallel patterns, which is the major difficulty when learning CUDA, MPI, Cilk, Microsoft.Parallel etc. 10 – OpenCL is platform independent – and we hope to see it available in many more platforms very soon.
We’d like to add a 11-th: OpenCL can compile code during execution time
The 8th conference on High Performance and Embedded Architectures and Compilers will take place in Berlin. This might be a good chance to discuss heterogeneous systems, especially since professor Hwu, who is offering the online course of Heterogeneous Computing, will be delivering one of the keynote talks:
We at CMSoft would like to wish Happy New Year to all the parallel programming and computational math community. 2012 has been interesting and 2013 promises to be even more so considering GPUs and OpenCL are expected to arrive for mobile devices. This year we intend to bring OpenCL tutorials focused on processing Kinect data with OpenCL and double-precision computation.
Those interested in learning more about heterogeneous computing models (such as OpenCL and CUDA) should definitely take part or at least take a look at the Cousera Heterogeneous Parallel Programming Course, taught by Dr. Wen-mei W. Hwu at University of Illinois.
This is a great opportunity to learn the foundations of the architecture and get acquainted with basic CUDA commands. We at CMSoft will be taking part as well, and we’d be glad to join all of you online to create OpenCL content that goes beyond the programming assignments.
Intel Xeon Phi Coprocessor, consisting of various smaller, lower-power Intel cores (as per Intel’s own description), will support OpenCL 1.2 programmability (click to read more). It is possible that it will provide unbeatable performance on algorithms that are parallel to a coarser level, provided that the OpenCL programmer can balance the workload correctly.
Correctly exploiting the parallelism of algorithms is still a challenge, as James Reinders, Intel summarizes: “Most applications in the world have not been structured to exploit parallelism. This leaves a wealth of capabilities untapped on nearly every computer system.”