Built an AI system last year for my college project that watches your face and yells at you before you fall asleep at the wheel

So last year for my final year project I built FocusFleet — a drowsy driver detection thing that actually works pretty well, and I’ve kept improving it since.

Basically it watches your face through the camera (468 landmarks via MediaPipe), tracks how much your eyes are closing and whether you’re yawning, and runs that alongside a Keras model I trained myself for a second opinion. If it thinks you’re actually falling asleep (not just blinking), it sets off an audio alert loud enough to snap you back.

There’s a whole state machine behind it too — active, warning, drowsy, face lost — so it’s not just spamming alerts on every blink, it actually waits for a real pattern before reacting.

You can run it two ways:

  • Desktop app with a proper GUI, login system, the works
  • Or just try the web version straight from your browser, no install needed (Gradio + Hugging Face Spaces)

Honestly proudest of this one out of everything I built in college, so figured I’d finally share it here instead of letting it die in a folder. Would love to know what you think, if the detection feels accurate, or if it triggers false positives for anyone.

Project link

Um, for now, there may be a couple of things worth checking first…:


While looking through the public repository, I noticed that the training notebook appears to create a kaggle.json file using a literal Kaggle username and API key.

I did not try to authenticate with it, so I cannot tell whether it is still valid. It may already be revoked, expired, or just a dummy value. Still, since the notebook is publicly downloadable, it would probably be safest to check this privately before more people clone the project.

If it is or was a real credential, the safest order is:

  1. Revoke/replace it through Kaggle first.
  2. Remove it from the current notebook and use an uploaded credential file, an environment variable, or a notebook secret instead.
  3. Then decide whether cleaning it from the Git history is necessary.

Deleting the value in a new commit does not invalidate the original credential by itself. GitHub’s guidance also recommends revoking or rotating an exposed secret before dealing with repository-history cleanup:

There is also a committed SQLite driver.db, and the application appears to store and compare user passwords directly rather than storing password hashes. If the database contains only dummy test records, this is probably just a cleanup item: replacing it with an empty database—or creating it on first launch—would avoid accidentally publishing future test data. If any records are real, though, it would be worth removing the database and changing any passwords that may have been reused elsewhere.

This is not evidence that an active breach occurred, and the sleeping state of the Space does not tell us whether the Kaggle credential is active. It is just a quiet “please verify these first” note. There is no need to post the credential or confirm its value publicly.