Everest for Chrome
More About Everest
1. click the Everest extension icon to start tracking
2. press Ctrl+Shift+3 at any time to re-calibrate distance for default zoom level
3. click the Everest extension icon to stop tracking and go back to original zoom level
4. optionally change jitter tolerance (default 10% zoom) and sample time (default 750ms) by right clicking on extension icon > options
Computer users often sit in one static position, which leads to pain and higher risk of health issues. To reduce strain, one should frequently change one's posture while using a computer. However, Herman Miller, a high-end furniture maker, noted in their [research](http://www.hermanmiller.com/research/solution-essays/maintaining-concordance-as-seated-postures-change.html) that ability to view materials on the screen is the most paramount need for computer users, and will stay in unhealthy postures if the alternative is an illegible screen.
When our team members worked together previously, we noted that one team member always changes the zoom level in Google Chrome as he changes his posture so that text stays legible when he moves away from the screen. We realized that this zooming can be automated by using a webcam to measure the distance between the user and the screen, and automatically adapt the text size according to the user's position. In doing so, we hope to make posture changes more natural, and thus improve the working conditions of computer users.
We implemented Everest as a lightweight Chrome extension that runs in the background to detect the user's position and zooms the page. The user can enable or disable the automatic zoom with a single click, and can press a key sequence (default to Ctrl+Shift+3) to recalibrate the resting position.
The core facial detection is handled by [Neave's face detection library](https://github.com/neave/face-detection). To access the webcam, we used WebRTC, part of HTML5, to stream the video data. We tweaked the detection frequency for efficiency: the current version samples the video at 4/3hz to avoid CPU usage. In initial testing, we discovered that the page would often "jitter", where the zoom will repeatedly change as the video data changes slightly, which disrupts reading. We fixed this problem by avoiding zoom changes that are less than 10%.
The actual zooming is performed by Chrome's zoom API, which was recently introduced on the Dev channel in Chrome 42, so this extension is one of the first extensions to take advantage of this feature.