Every drive, frame by frame
The top strip is the truth, the strip under it is what Guardian said, and the ticks above mark where they disagree. The trace underneath is measured eyelid closure; the dashed line is the level above which an eye counts as shut.
T01-Sample
Eyes open throughout; the driver looks away and then back.
distracted → alert at 15s, followed 1.05s later
T02-Sample
Drowsy for the whole drive - eyes partly closed, head down.
T03-Sample
Yawning for the whole drive, eyes partly closed.
T04-Sample
Same pattern as T01, a different person - and the case that breaks.
distracted → alert at 15s, followed 1.05s later
T05-Sample
Micro-sleep: eyes closed, head down, for thirty seconds.
T06-Sample
Starts drowsy, becomes distracted halfway through.
drowsy → distracted at 15s, followed 2.10s later
The numbers behind the picture
| Trip | Impaired | Caught | Recall | Clear | False | Rate | Composite |
|---|---|---|---|---|---|---|---|
| T01-Sample | 0 | 0 | — | 600 | 24 | 4.0% | 93.5 |
| T02-Sample | 600 | 583 | 97.2% | 0 | 0 | — | 97.9 |
| T03-Sample | 600 | 600 | 100.0% | 0 | 0 | — | 100.0 |
| T04-Sample | 0 | 0 | — | 600 | 81 | 13.5% | 71.4 |
| T05-Sample | 600 | 600 | 100.0% | 0 | 0 | — | 100.0 |
| T06-Sample | 300 | 300 | 100.0% | 300 | 42 | 14.0% | 93.0 |
What this run actually shows
Sustained closure is the easy case, and it is the dangerous one
The micro-sleep and yawning drives are called correctly on every single frame. Physiology does the work: eyes shut for more than 1.2 seconds means micro-sleep whether the driver is twenty or sixty, so there is nothing to train and nothing to overfit.
The lag is bought, not accidental
Raw per-frame decisions flicker, so the output is a majority vote over about two seconds. That is exactly why the drowsy → distracted change on T06-Sample takes 2.10 s to appear. Steadier warnings cost response time, and that trade should be visible rather than buried.
T04-Sample is where it breaks
On one driver whose eyes never close, the jaw threshold fires anyway and produces stretches of phantom yawning — 81 false alarms across 600 clear frames, and the lowest composite here at 71.4. A resting mouth posture that reads as an open jaw is a real failure mode, not noise, and a fixed global threshold has no answer to it. This is the case the per-driver learning loop exists for.
Six drivers is six samples
Every number here comes from six people. It is enough to show the thresholds fire on real physiology; it is nowhere near enough to claim they hold for a population. The open-data evaluation in the repository exists to test the same thresholds against strangers, and it is where the weaknesses show up.