A hands-free mouse input and navigation interface powered by facial expressions.
NB: The frames are horizontally flipped.
- to scroll activate SCROLL_MODE and move up/down
- left-Click activate CLICK_MODE and blink with left eye
- right-Click activate CLICK_MODE and blink with right eye
- Blink with both eyes to activate CLICK_MODE
- Open mouth to activate SCROLL_MODE (close to deactivate)
- Move mouse pointer with motion of your head
- Calibrate for personal use
- The source code is in C++11
- Dlib for 68-point facial landmark detection.
- libX11 and XTEST for controlling mouse-pointer.
- OpenCV (C++) for overlay Text, markers, display and testing.
- Using X11: open sample_cursor.cpp and compile using
g++ sample_cursor.cpp -lX11
. Enter numbers between 1 to 5 to emulate different mouse keypresses. - If you mistakenly activate CLICK_MODE (stray blinks ¯\_(ツ)_/¯), activate SCROLL_MODE momentarily to deactivate the former.
- Set frame sensitivies for all actions. These the denote the number of frames the expression needs to be sustained for for activation. This protects against stray blinks. Adjust it!
LOW_FRAME_SENSITIVITY = 3, HIGH_FRAME_SENSITIVITY = 5, ...
- Set thresholds for actions. Most are auto-calibrated (see
set_thresh()
function), i.e. updated frame-by-frame. Works well if you are moving around a lot.MAR_THRESH = 0.3, LSQUINT_THRESH, RSQUINT_THRESH, LEAR_THRESH, REAR_THRESH;
- Avoid delaying the left/right blink action (or moving around too much in between) once CLICK_MODE is activated. Best if immediate!