Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Real-Time Indian Sign Language (ISL) Interpreter

Flutter Python TensorFlow MediaPipe License

A real-time Indian Sign Language interpreter that recognizes hand gestures from a phone camera and converts them into text and speech. A Flutter app captures the gesture, a Python inference server extracts hand landmarks with MediaPipe and classifies them with trained deep-learning models, and the recognized sign is displayed and spoken aloud via TTS.

Academic mini-project (2025) — full write-up in docs/Report_Mini_Project.pdf.


Demo

ISL Interpreter app UI

Flutter app — capture a sign, get it back as text and speech.


Architecture

The app talks to the inference server over HTTP: single frames go to /predict (MobileViT), short clips go to /predict-video (LSTM). The server extracts MediaPipe landmarks, classifies them, and returns the predicted gesture.

System architecture

  • Static path — a single frame → hand landmarks → MobileViT → letter/number.
  • Dynamic path — a short clip → 30 sampled frames of landmarks → LSTM → word.

Data flow


Results

Task Model Classes Accuracy
Static signs MobileViT (on hand landmarks) 35 — A–Z, 1–9 98.82%
Dynamic signs 2-layer LSTM (30-frame sequences) 6 — Doctor, Help, Hot, Lose, Pain, Thief 95.16%

Trained on a custom-built dataset (~1,400 images + augmentation). MediaPipe extracts 21 hand landmarks (x, y, z) per hand, which are fed to the classifiers instead of raw pixels — making inference lightweight and robust to background.

Sample recognitions

Static signs (MobileViT) Dynamic signs (LSTM)
A · G · H · X Lose · Thief

Repository structure

ISL-interpreter/
├── app/                 # Flutter mobile app (camera capture, HTTP, TTS)
│   ├── lib/             #   main.dart, screens/home_screen.dart
│   ├── android/         #   Android config (build artifacts are git-ignored)
│   └── assets/
├── server/              # Flask inference server (MediaPipe + Keras)
│   ├── app.py           #   /predict (static) + /predict-video (dynamic)
│   └── requirements.txt
├── notebooks/           # Model training (see docs for provenance)
│   ├── train_static_mobilevit.ipynb
│   ├── train_dynamic_lstm.ipynb
│   └── train_static_vit_prototype.ipynb
├── docs/
│   ├── images/                   # diagrams + app/sign screenshots
│   ├── PROJECT_DOCUMENTATION.md   # detailed design notes & API reference
│   └── Report_Mini_Project.pdf    # full academic report
└── README.md

Model weights (*.h5) are not committed — place your trained files next to server/app.py (git-ignored) or point the server at them with the ISL_STATIC_MODEL / ISL_DYNAMIC_MODEL env vars. Train your own from the notebooks in notebooks/.

Provenance. The reported metrics come from the project report (docs/Report_Mini_Project.pdf), the record of the completed project. The original training notebooks were lost; the train_static_mobilevit and train_dynamic_lstm notebooks are faithful reconstructions of the report's architectures (run them to reproduce), and train_static_vit_prototype is the surviving earlier prototype with its real output.


Getting started

1. Inference server

cd server
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python app.py                    # serves on http://0.0.0.0:5000

The server exposes POST /predict (static signs) and POST /predict-video (dynamic signs), each returning { gesture, confidence }, plus a /network-info endpoint the app uses to discover the server on the local network.

2. Flutter app

cd app
flutter pub get
flutter run

In the app's settings, set the server IP so your device can reach the machine running the inference server (they must be on the same network).


Tech stack

Layer Technologies
Mobile Flutter, Dart, camera, flutter_tts, http
Inference Python, Flask, Flask-CORS
ML / CV TensorFlow / Keras, MediaPipe, OpenCV, NumPy
Training Jupyter, MobileViT, LSTM

Limitations & future work

  • Fixed gesture vocabulary (no custom-gesture training yet).
  • Dynamic recognition uses a fixed 30-frame window.
  • Requires the app and server to share a local network.
  • Next: on-device TFLite inference, sentence-level recognition, larger dataset.

See docs/PROJECT_DOCUMENTATION.md for the full API reference, model I/O shapes, and design notes.


Credits

A team academic mini-project (2025) by:

  • Albrin T B
  • KM Aravind Krishna
  • Deva Nanda Gopi
  • Goutham Krishna K S — @silverdawn-gtm

License

Released under the MIT License.

About

Real-time Indian Sign Language to text-and-speech interpreter — Flutter app + MediaPipe/TensorFlow inference server, MobileViT for static signs and LSTM for dynamic ones.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages