Live callNext.jsWebSocketFastAPI10 s chunksmeaningWhispertranscriptMiniLMembeddingNeural netPyTorchtoneopenSMILEfeaturesRandom forestscikit-learnFusionlog. regression
How it works. Scroll sideways to see the whole diagram.

The problem

Overwhelmed 911 systems during large emergencies can leave calls unanswered, delaying life-saving responses. The goal was to rank incoming calls by urgency, so the most critical ones are answered first.

Key decisions

Two signals, scored separately
What the caller says and how they sound are analyzed in separate pipelines. Whisper transcribes the speech, and sentence-transformer embeddings of the transcript feed a PyTorch classifier. In parallel, openSMILE extracts acoustic features for a random forest that picks up vocal stress.
Built to avoid missed emergencies
The PyTorch model is trained with a weighted loss that penalizes ranking an urgent call too low, and a logistic-regression meta-classifier fuses both predictions. Missing an emergency is far worse than a false alarm.
A dataset built for the problem
Real 911 audio is scarce, so the 1,351 labeled calls combine public datasets, simulated calls, and data augmentation. Speech diarization with LLM-based speaker identification isolates the caller's audio.
Live, not batch
Audio streams from the browser to a FastAPI backend over WebSockets, so calls are classified while they happen. The services run in Docker containers on dedicated AI hardware.

Results

  • 94% classification accuracy
  • 1.5% false-negative rate

Built with

Python, PyTorch, scikit-learn, Whisper, Sentence Transformers, openSMILE, FastAPI, Next.js, Docker