A real-time machine learning system that processes electromyography (EMG) signals to detect hand gestures and fatigue levels, then transmits them to a Unity game as control inputs. This project demonstrates end-to-end development of a biomedical signal processing and machine learning pipeline.
- Real-time EMG Signal Processing: Captures and processes raw EMG data at 1000Hz sampling rate
- Advanced Feature Extraction: Calculates RMS, MAV, ZC, SSC, WL, and frequency-domain features
- Machine Learning Classification: Implements HistGradientBoosting classifiers for gesture recognition
- Fatigue Detection: Uses K-Means clustering to detect three levels of muscle fatigue
- Real-time Unity Integration: Sends classification results via UDP socket to our Unity game
- End-to-End Pipeline: From data acquisition to model deployment
- BITalino API: For EMG device communication
- NumPy & SciPy: Signal processing and numerical computation
- Digital Filtering: Butterworth bandpass filter (20-450Hz)
- Scikit-learn: HistGradientBoosting classifiers and K-Means clustering
- Feature Engineering: 12 time-domain and frequency-domain features per gesture
- Model Serialization: Pickle and Joblib for model persistence
- Multi-threading: Concurrent data acquisition and processing
- UDP Socket Communication: Real-time data transmission to Unity
- Modular Design: Separated data acquisition, processing, and ML components
- Data Collection: Recorded 60-second samples for each gesture (rest, fist, open hand)
- Signal Processing: Bandpass filtering and normalization
- Feature Extraction: 12 features per channel (RMS, MAV, ZC, SSC, WL, dominant frequency)
- Gesture Classification: Multi-class classifier detecting hand gestures
- Fatigue Analysis: Unsupervised clustering to detect fatigue levels
- Real-time Prediction: <100ms latency from signal acquisition to classification
This project showcases expertise in:
- Signal Processing: EMG signal filtering, feature extraction, and noise reduction
- Machine Learning: Supervised classification and unsupervised clustering
- Software Engineering: Modular code architecture, threading, and socket programming
- Data Pipelines: End-to-end development from raw data to deployed model
- Real-time Systems: Low-latency processing and prediction
- Biomedical Engineering: EMG signal interpretation and fatigue analysis
- Gesture Recognition Accuracy: 92-96% (varies by gesture)
- Fatigue Level Detection: 85-90% accuracy
- Latency: <100ms end-to-end processing
- Sample Rate: 1000Hz real-time processing
# Clone the repository
git clone https://github.com/walidght/emg-gesture-control.git
cd emg-gesture-control
# Install dependencies
pip install -r requirements.txt
# Connect BITalino device and run calibration
python main.py- Calibration: The system will automatically prompt for calibration if no models are found
- Data Collection: Perform each gesture (rest, fist, open hand) for 60 seconds when prompted
- Automatic Training: Models train automatically after data collection
- Real-time Control: Start the Unity application and begin gesture control
Note: This project was developed as part of an academic project in biomedical signal processing and machine learning applications for human-computer interaction.