Step 1 of 6
Face to points
In each video frame, MediaPipe’s FaceLandmarker finds 478 landmark points on the
face: 468 for the face itself and 10 for the irises. It runs entirely in your
browser with WebAssembly, so camera frames never leave your device.
The face drawn here is synthetic: it is generated from curves and a spiral fill, not
taken from any person. No real face appears anywhere on this site.
Step 2 of 6
Eye to six points
For blinks, six points per eye matter: the two corners (p1 and p4), two on the upper
lid (p2, p3) and two on the lower lid (p6, p5). The
eye aspect ratio
divides the two lid-to-lid distances by twice the eye’s width:
EAR = (|p2 − p6| + |p3 − p5|) / (2 · |p1 − p4|)
It is about 0.3 for an open eye and falls toward zero as the lid closes (Soukupová
& Čech, 2016). MediaPipe also reports a blink score for each eye; the study
compares both signals.
Step 3 of 6
Signal over time
Frame after frame, the EAR becomes a signal. A spontaneous blink is a brief dip; a
deliberate closure lasts longer. A closure starts when the signal falls below a
threshold and ends only when it rises back past a slightly higher level
(hysteresis), so jitter cannot split one closure into two.
Many blink detectors use one fixed threshold for everyone; the first version of
MorsEye used 0.21. For a person whose open eye naturally gives a low EAR, that line
sits in the noise and small squints count as closures. Calibration instead puts the
line halfway between the user’s own open and closed levels.
Illustrative synthetic signal, run through the app’s real detector. Recorded
snippets (features only) will replace it after Study A.
Step 4 of 6
Duration to symbol
Next, only the closure’s duration matters:
-
under
200 ms: ignored, as a probable natural blink
-
200–600 ms: dot
-
600–1400 ms: dash
-
1400–2000 ms: no
symbol; two of these within 4 s pause or resume input
-
2000 ms or more: delete the last character
These are starting values. The final bands will be chosen from the duration
distributions measured in Study A.
Step 5 of 6
Gaps to letters and words
Pauses with the eyes open do the spacing. After
1200 ms the decoder ends the letter and looks up
its pattern (···· is H). After 3000 ms it inserts
one space, and never two in a row. A pattern that is not in the Morse table is
flagged on screen and not typed.
On the tape: “HI YOU”, with the real timings.
Step 6 of 6
Your turn
Calibration takes under a minute: keep your eyes open for a few seconds, then close
them a few times when asked. It works best in even light, with your face 50–70 cm
from the camera.
Try it