A small program I wrote in C++ in order to demonstrate the following concept:

A user is standing in front of a web camera and scrolls the letters of a virtual keyboard by moving his head or hand or body or whatever he/she likes to the appropriate direction. Then he/she selects the appropriate letter (atm using a key but I intend to change it and select letters by making a sound) and an X event is sent to the X-server.

This small program was a good opportunity to familiarize myself with the concept of optical flow and learn how to use the Xlib, the posix threads and the unix pipes in order to synchronize the camera and the Xserver events.

Here is a video of it:

The code can be downloaded from here.
And a blog post about this keyboard can be found at hikikoblog