Hi - I see that the initial face detection uses the OpenCV haar classifier (at least I think so from a brief scan through the code). After that I'm not sure how the tracking is working - I'd love to understand a bit more about the algorithm - how is the gaze direction being extracted? Is there a paper describing the approach anywhere?
There is no paper (yet) describing the tracking algorithm of eViacam though the code itself provides an exact description of it.
This is more or less how it works:
To locate the presence and position of the face, we use a haar feature-based cascade classier which was initially proposed by Paul Viola\cite and improved by Rainer Lienhart. This classifier is implemented in the Open Computer Vision library which also provides several trained cascade classifier to detect faces.
Once the face is located, the motion inside of the user's face bounding area is estimated using the Horn and Schunck optical flow algorithm. As a result, two velocity fields (one for each axis) of the same resolution as the input images are obtained. Both fields are then downsampled to a 15x15 matrix and modulus is computed for each cell of such matrix. To avoid static areas (i.e. background) only these cells with enough motion (i.e. whose modulus is above a threshold) are picked up and averaged to compute the resulting motion vector which will drive the mouse cursor.