What it does
Human Operator is a human augmentation tool that allows AI to briefly take control of your body to help you learn and do things you normally cannot do. To do this, it uses a Vision-Language Model for human motor control through Electrical Muscle Stimulation (EMS). Vision-based commands are generated via open-ended speech input through the Claude API to control finger and wrist stimulation for intuitive on-body interaction.
How we built it
Prerequisites
- Python 3.10.x
- Conda, Miniconda or other environment setup
- Arduino IDE 2.3.x (for firmware setup)
- Claude API key (from Anthropic)
Hardware Setup
EMS & Control:
- TENS/EMS Gel Electrodes
- Arduino-compatible microcontroller (Arduino Micro recommended)
- 5V Relays for finger control (pinky, middle, index)
- Custom or commercial TENS/EMS unit with electronic control capability
Sensing:
- Camera module (integrated or USB) for POV video capture
Software Setup
Clone the repository:
git clone <repository-url> cd Human-OperatorCreate Python environment:
conda env create -f environment.yml conda activate human-operatorConfigure API key:
cp .env_empty .env # Edit .env and add your Anthropic API key: # ANTHROPIC_API_KEY=your_api_key_hereUpload Arduino firmware:
- Open Arduino IDE
- Load
firmware/human_operator_ems/human_operator_ems.ino - Upload to your Arduino board
- Verify serial communication works (115200 baud)
Run Main Application
Start the real-time EMS control system:
python app.py
This launches:
- Video capture from your camera
- AI processing via Claude API for vision-based motor commands
- Hardware control for EMS stimulation of pinky, middle, and index fingers
- Voice trigger ("Hey Operator") to activate commands
Commands are triggered by physical interaction detected in your POV video.
Manual Stimulation GUI
Test and calibrate EMS parameters with the GUI:
python utils/stimGUIfingersHardMode.py
This tool allows you to:
- Manually trigger finger stimulation (pinky, middle, index)
- Adjust amplitude, frequency, and pulse width
- Visualize stimulation parameters in real-time
- Perfect for hardware calibration and testing
System Architecture
app.py (Main Application)
├── Video Capture (OpenCV)
├── Vision-Language Model (Claude API)
├── Command Planning (Motor control sequences)
└── Hardware Interface (receiver.py)
└── Flask Server (receiver.py)
└── Serial Communication → Arduino Firmware
└── Relay Control (Finger EMS)
stimGUIfingersHardMode.py (Manual Testing GUI)
└── Direct Hardware Interface (PyQt5 + Serial)
Additional Demo: Obstacle Avoidance
Run a ball-detection demo that triggers avoidance responses:
python utils/ball_demo.py
Challenges we ran into
Troubleshooting
Arduino not detected:
- Check USB cable connection
- Verify correct board selection in Arduino IDE
- Confirm serial port settings (115200 baud)
No camera detected:
- Verify camera permissions (especially on macOS)
Missing API key:
- Ensure
.envfile exists in the root directory - Verify
ANTHROPIC_API_KEYis correctly set
Accomplishments that we're proud of
What we learned
What's next for Human Operator
Experimenting with EMS electrode size and placement to explore new applications on other parts of the body.
Inspiration
Inspired by research and systems from the Human Computer Integration Lab at UChicago on neuromuscular interfaces and electrode placement optimization:

Log in or sign up for Devpost to join the conversation.