Inspiration
Drowning is one of the leading causes of accidental death worldwide, and the scary part is that it's silent. It doesn't look like splashing and yelling for help. It looks like someone quietly bobbing in place with their head barely above the surface, using the last of their strength just to breathe. Lifeguards are trained to catch this, but they're human. They blink, they scan a crowded pool, they get tired by hour three of a shift.
We saw an opportunity to give lifeguards a second set of eyes that never gets tired. But we also saw the failure mode of every "AI safety" pitch: a black box that screams "ALERT" with zero context, that nobody trusts enough to act on fast. So we set out to build something different. ATLAS doesn't just flag risk. It tells you why, in the same language a lifeguard would use in an incident report.
What it does
ATLAS turns any camera feed into a real time risk monitor for every swimmer in the water. It tracks each person individually, learns their normal movement pattern in the first few seconds, then continuously scores three signals: displacement, vertical bobbing, and whether arms are breaking the surface. Each swimmer gets a live risk score and a green, amber, or red tier.
When someone escalates to red, ATLAS fires an alert with a plain language reason ("minimal displacement for 7.2s," "arms not breaking the surface"), a photo, and a face thumbnail, so a lifeguard can verify at a glance instead of scanning the whole pool to find who tripped it. Every alert can be tagged confirmed or false positive, which rolls up into a live accuracy score. The system proves itself over a shift instead of asking for blind trust.
How we built it
- Pose tracking: real time, in browser pose estimation on every person in frame, with no server round trip and no added latency
- Per swimmer calibration: each new person gets a short baselining window before they're scored, so risk is measured against their own normal motion, not a generic average
- Risk engine: converts raw movement into a weighted composite score, split by passive drowning response versus active struggle, since the two look completely different biomechanically
- Explanation layer: takes the same signals driving the score and translates them into human readable reasons, built to match the shorthand of a real lifeguard incident report
- Alert logic: only fires on a sustained tier escalation, not a single noisy frame, which kills false alarms and alert fatigue
- Dashboard: an instrument panel UI with a live roster, a signal breakdown with a waveform for the top risk swimmer, and a full alert log, designed to feel like hardware you'd mount on a lifeguard stand, not a demo
Challenges we ran into
Telling "swimming hard" from "drowning" was the core problem. Vigorous movement is normal in the pool and terrifying in distress, and the real difference is whether it's producing net progress through the water. That pushed us toward tracking displacement over time instead of raw motion energy.
Alert fatigue almost killed the concept early on. Our first version fired on every dive and every float. Per person baselines and the tier escalation rule were what finally made it stop crying wolf.
Explainability without added lag was the hardest engineering tradeoff. It's easy to just show a number. Making the reasoning legible in near real time, without slowing down the pipeline, took the most iteration of anything we built.
Occlusion is a hard physical limit. Pose tracking degrades fast when hips or shoulders aren't visible, whether from splashing, camera angle, or partial submersion. Instead of guessing through it, we made ATLAS surface that uncertainty directly ("hips/shoulders not visible") rather than pretending to a confidence it doesn't have.
What we learned
We learned that the real drowning response looks nothing like the movies. There's often no splashing, no yelling, just quiet struggle. And we learned that "explainable AI" is much harder in practice than it sounds. Interpretable features aren't enough. You have to translate them into the exact vocabulary of the person who has seconds to act on them.
What's next
- Validating thresholds against real distress footage instead of tuned heuristics
- Multi camera fusion for full pool coverage with zero blind spots
- On device deployment for facilities without reliable internet
Built With
- blazepose
- canvas-api
- css3
- html5
- javascript
- mediapipe
- webaudioapi
Log in or sign up for Devpost to join the conversation.