Use machine learning in JavaScript to detect a blink and build blink-controlled experiences!
Visit https://blink-detection.vercel.app (Works on mobile too!!)
Uses Tensorflow.js's face landmark detection model.
This tool detects when the user blinks. It can also detect a wink and separate eye blinks as well.
Via npm:
Using yarn
:
$ yarn add blink-detection
Start by importing it:
import blink from 'blink-detection';
Load the machine learning model:
await blink.loadModel();
Then, set up the camera feed needed for the detection. The setUpCamera
method needs a video
HTML element and, optionally, a camera device ID if you are using more than the default webcam.
const videoElement = document.querySelector('video');
const init = async () => {
// Using the default webcam
await gaze.setUpCamera(videoElement);
// Or, using more camera input devices
const mediaDevices = await navigator.mediaDevices.enumerateDevices();
const camera = mediaDevices.find(
(device) =>
device.kind === 'videoinput' &&
device.label.includes(/* The label from the list of available devices*/)
);
await gaze.setUpCamera(videoElement, camera.deviceId);
};
Run the predictions:
const predict = async () => {
const blinkPrediction = await blink.getBlinkPrediction();
console.log('Blink: ', blinkPrediction); // will return an object indicating the booleans for different states
// expect blinkPrediction to be {
// blink: boolean,
// wink: boolean,
// longBlink: boolean,
// left: boolean,
// right: boolean,
// rate: number
// }
if (blinkPrediction.blink) {
// do something when the user blinks
}
let raf = requestAnimationFrame(predict);
};
predict();
Stop the detection:
cancelAnimationFrame(raf);