Loading repository data…
Loading repository data…
fredopoku / repository
Type with your hands — real-time gesture keyboard for any app. Personal ML model, full A–Z alphabet, word prediction. Built for accessibility and speed. Active development.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
🚧 Actively in development — new features, gestures, and platform support are being added continuously. Star or watch to follow progress.
Real-time hand gesture communication — type into any app on any device using only your hands.
GestureKey turns your laptop camera into a full gesture keyboard. It recognises ASL-inspired hand shapes, predicts words as you spell, and injects text directly into WhatsApp, Gmail, Google Docs, or any application — no controller, no wearable, no plug-in required.
| Feature | GestureKey | Others |
|---|---|---|
| Personal ML model trained to your hands | ✅ | ❌ Generic |
| Full A–Z alphabet + word prediction | ✅ | ❌ 5–10 gestures |
| Types into every app on your OS | ✅ | ❌ Locked in-app |
| Train your own model — no code needed | ✅ | ❌ |
| Hybrid ML + rule fallback, always works | ✅ | ❌ |
| Open, extensible gesture vocabulary | ✅ | ❌ |
Requirements: Python 3.10 or 3.11
git clone https://github.com/fredopoku/gesturekey
cd gesturekey
pip install mediapipe opencv-python pyautogui numpy scikit-learn PyQt6
On macOS you may also need:
pip install pyobjc-framework-Quartz
python3 gesturekey_ui.py
The camera opens immediately. If you already have a trained model it activates automatically — the header badge shows ML XX%. Without a trained model it falls back to the built-in rule-based classifier instantly.
The ML model is trained on your hands, not a generic dataset. This is why accuracy is high.
In the app:
Each time you retrain, all recorded samples are used — old data is never lost. The more gestures and samples you add, the better the model gets.
From the command line (original trainer):
python3 gesture_trainer.py
| Gesture | Hand shape | Types |
|---|---|---|
| A | Fist, thumb beside index | a |
| B | Four fingers up, thumb folded | b |
| C | Curved hand, O-like opening | c |
| D | Index pointing up, others form circle | d |
| E | All fingers bent, thumb tucked | e |
| F | Index + thumb touch, others up | f |
| G | Index pointing sideways | g |
| H | Index + middle pointing flat | h |
| I | Pinky up, others closed | i |
| L | L-shape: thumb + index out | l |
| O | All fingers curve to thumb | o |
| V | Peace sign: index + middle spread | v |
| W | Three fingers up (index, middle, ring) | w |
| Y | Thumb + pinky out | y |
| Gesture | Selects |
|---|---|
| 👍 Thumbs up | Word slot 1 (top prediction) |
| ✌️ Peace sign | Word slot 2 |
| 3 fingers | Word slot 3 |
| 4 fingers | Word slot 4 |
| 🤙 Shaka | Word slot 5 |
| Gesture | Types |
|---|---|
| Open palm (all 5 spread) | Hello |
| Fist nod | Yes |
| Flat hand from chin | Thank you |
Camera (OpenCV)
│
▼
MediaPipe Hands → 21 landmarks (x, y, z)
│
▼
Normalise → wrist-centred, scale-invariant 63-dim vector
│
├── GestureMLModel (sklearn MLP 256→128→64) ← your personal model
│ confidence ≥ 72% → use result
│
└── Rule-based classifier ← always available fallback
│
▼
GestureMapper → gesture name → character / command
│
├── WordPredictor (Trie + bigram scoring) → 5 candidates
│
└── TextOutput (pyautogui) → types into active OS window
Model files:
data/
vocabulary.json word frequency table
bigrams.json context pairs for prediction
trie.pkl cached prefix tree
gesture_mlp.pkl your trained MLP model
gesture_training_data.json raw keypoint samples per gesture
.app (macOS), .exe (Windows)gesturekey/
├── gesturekey_ui.py main application (PyQt6)
├── gesture_mapper.py hybrid ML + rule classifier
├── gesture_model.py MLP training and inference engine
├── gesture_trainer.py CLI gesture recording tool
├── word_predictor.py Trie + bigram word prediction
├── text_output.py pyautogui text injection layer
├── gesture_training_data.json captured keypoint samples
└── data/
├── vocabulary.json
├── bigrams.json
├── trie.pkl
└── gesture_mlp.pkl trained model (created after first training)
Frederick Opoku-Afriyie
MSc Computer Science, 2025
GestureKey concept, system design, and implementation.
Built with:
GestureKey — a universal gesture input paradigm for accessible digital communication.