How it works

From camera frame to letter

Six steps turn an ordinary webcam image into text. Everything below happens in your browser, frame by frame, about 30 times a second.

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