Skip to content

Repository files navigation

echo

Real-time ASL translation wristband. Wear a Myo armband, sign — your words appear as natural English and are spoken aloud to your conversation partner.

Myo BLE → EMG + IMU → SVM phrase classifier → LLM grammar → English + TTS

What it does

  • Live translation — sign gestures are recognised in real time and converted to English sentences
  • Conversation mode — two-way: the signing user's words are spoken aloud (ElevenLabs TTS); the hearing partner replies by holding a mic button (Deepgram STT)
  • Teach Echo — record any new word or phrase in 5 reps and it's immediately added to the model
  • Personalize — add more reps for existing words from the Settings page to improve accuracy for your signing style
  • Null rejection — the model stays silent for random arm movements; only real signs produce output

Stack

LayerTech
SensorThalmic Myo armband — 8-channel EMG + IMU at 200 Hz over BLE
ClassifierSVM with RBF kernel, DTW features, Sakoe-Chiba banded warping
Sentence constructionRule-based ASL→English reordering + Claude Haiku fallback
TTSElevenLabs (eleven_turbo_v2_5)
STTDeepgram Nova-2 (WebSocket streaming)
FrontendNext.js 14 (App Router), Tailwind CSS
BackendPython asyncio WebSocket server (websockets)

Quickstart

1. Python backend

git clone https://github.com/alicej06/echo.git
cdecho
python -m venv .venv
source .venv/Scripts/activate # Windows
pip install -r requirements.txt

Copy .env and fill in your keys:

ANTHROPIC_API_KEY=sk-ant-...

Find your Myo's BLE address, then start the server:

python scripts/live_translate.py --scan
python scripts/live_translate.py --user alice --ws-port 8765

2. Frontend

cd frontend
npm install

Create frontend/.env.local:

NEXT_PUBLIC_DEEPGRAM_API_KEY=...
NEXT_PUBLIC_ELEVENLABS_API_KEY=...
NEXT_PUBLIC_ELEVENLABS_VOICE_ID=...
npm run dev # http://localhost:3000

Training

First-time setup — record phrase reps

python scripts/live_translate.py --user alice --train-words

Performs 5 reps per phrase interactively. Recordings are saved to models/user_alice/phrase_recordings.pkl and persist between sessions.

Record null / background gestures

python scripts/live_translate.py --user alice --train-null --train-null-reps 30

Vary each rep: arm resting, reaching, pointing, casual wave, transitions between signs. The null class prevents false positives.

Retrain the model

After recording, retrain from the frontend Train page, or the model is retrained automatically when you finish recording via the UI.

Evaluate

python scripts/train_dtw.py --user alice --evaluate

Runs leave-one-out cross-validation and prints a confusion matrix.


Vocabulary

Default phrases (9):

PhraseASL hint
helloWave hand side to side
myFlat hand on chest
nameTap index + middle fingers together
echoFingerspell E-C-H-O
nice to meet youFlat hand slides off other palm
how are youBent fingers roll forward, then point
thank youFlat hand from chin forward
greatThumbs up or fist push forward
what's your nameWH sign → point at person → name sign

Add any word or phrase via Teach Echo in the app (Settings → Teach, or the Teach tab).


Command reference

live_translate.py

FlagDefaultDescription
--user IDdefaultUser ID for loading/saving models
--device MACauto-discoverMyo BLE MAC address
--ws-port N8765WebSocket server port
--train-wordsTerminal training mode for phrases
--train-words-reps N5Reps per phrase
--train-nullTerminal training mode for null gestures
--train-null-reps N30Number of null reps to record
--no-llmSkip LLM sentence construction
--scanList nearby BLE devices and exit
--inspectStream raw EMG+IMU to terminal

Repo structure

echo/
├── scripts/
│ ├── live_translate.py # main server — BLE, classifier, WebSocket, LLM
│ ├── train_dtw.py # SVM training, DTW features, augmentation, evaluation
│ └── train_dyfav.py # DyFAV static-pose classifier (letter-level)
├── frontend/
│ ├── app/
│ │ ├── home/ # dashboard + recent sessions
│ │ ├── translate/ # live translation view
│ │ ├── conversation/ # two-way ASL ↔ voice chat
│ │ ├── teach/ # teach echo a new gesture
│ │ ├── train/ # record training reps + retrain model
│ │ ├── history/ # past sessions
│ │ └── profile/ # settings + personalization
│ └── hooks/
│ ├── use-myo-ws.ts # WebSocket client + state
│ ├── use-deepgram.ts # Deepgram STT hook
│ └── use-elevenlabs.ts # ElevenLabs TTS hook
├── models/
│ └── user_<id>/
│ ├── phrase_recordings.pkl # raw EMG recordings per phrase
│ └── dtw_model.pkl # trained SVM model
└── requirements.txt

What Echo is

Echo is infrastructure for communities to own the language they invent.

Every friend group, every signing community has expressions that exist nowhere in writing. Echo makes that language learnable, permanent, and transferable — starting with ASL, where communities evolve vocabulary faster than any institution can track.

About

Echo is a wearable EMG-based sign language translation system and app that uses machine learning for communication accessibility for the deaf community.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages