diff --git a/EyeTab.jpg b/EyeTab.jpg new file mode 100644 index 0000000..8ccf9e7 Binary files /dev/null and b/EyeTab.jpg differ diff --git a/README.md b/README.md index f709688..93f4aba 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,38 @@ # EyeTab -EyeTab is a __3D model-based gaze tracker__ that runs entirely on unmodified commodity tablet computers, taking their limited computational and sensor resources into account. +_EyeTab_ is a __3D model-based gaze tracker__ that runs entirely on unmodified commodity tablet computers, taking their limited computational resources and low quality cameras into account. + +![Image of EyeTab](http://www.cl.cam.ac.uk/research/rainbow/projects/eyetab/images/teaser.jpg "Image of EyeTab") The code is available in two forms: -* A _basic_ version which runs on a supplied example video file. This should give you an idea of the system's operation. -* An _extended_ version for real-time operation on a _Microsoft Surface Pro 2_. Unfortunately camera APIs are non-trivial, so this is not guaranteed to work on other tablet devices. +* `EyeTab` – A demonstration version which runs on a supplied example video file. +* `EyeTab_SP2` – An interactive version developed for a _Microsoft Surface Pro 2_. This should also work on other devices with small tweaks. ## System overview -# Deployment instructions +We track gaze by modelling the iris as a 2D ellipse in an image, and _back-projecting_ this to a 3D circle, getting the real-world position and orientation of the iris. We take the normal vector of this to be the gaze direction. -EyeTab is written in Visual C++, a small extension of C++ which includes ... It should also work fine as generic C++ with minor replacements of VC++ code. +The system has three main components: -I chose not to include Visual Studio _solution_ and _project_ files as these will vary depending on how your dependency installations are laid out. +1. We first precisely find regions-of-interest for the eyes in an image. +2. Then we robustly fit a 2D ellipse to each _limbus_ – the boundary between iris and sclera. +3. We finally back-project these to 3D circles, and intersect the circle normals with the screen for a point-of-gaze. + +# Deployment instructions -A very rough guide for setting this code up from scratch: +A rough guide for setting this code up from scratch: -1. Make a new empty console application in Visual Studio. -2. Correctly include, link, and input the system dependencies. -3. Copy the source, header and resource files into your empty project. +1. Open the solution file `EyeTab.sln` in Visual Studio. I used VS2012. +2. Add dependencies to Visual Studio' _Additional include directories_ field, _Additional library directories_ field, and as _Additional input_ in the linker. +3. Ensure the required `.dll`s can be found on your `PATH` or in Visual Studio's debugging environment. ## Dependencies The system has several dependencies: -* [OpenCV](http://jquery.com/) - a multi-purpose computer vision library -* [TBB](http://jquery.com/) - for multi-threading -* [Eigen](http://jquery.com/) - provides simple vector maths +* [OpenCV](http://opencv.org/) – a multi-purpose computer vision library +* [TBB](https://www.threadingbuildingblocks.org/) – for parellization +* [Eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page) – provides vector maths -In addition, the SP2 version of the system depends on [VideoInput](http://jquery.com/) for providing high-resolution access to the front-facing camera. OpenCV's camera API is broken and does not support this. +In addition, the SP2 version of the system depends on [VideoInput](// see: http://www.codeproject.com/Articles/559437/Capturing-video-from-web-camera-on-Windows-and) for providing high-resolution access to the front-facing camera. OpenCV's camera API is broken and does not support this. This library `videoInput.lib` is supplied.