PresentAir transforms a standard webcam into an intelligent, touchless command center for presentations. Leveraging MediaPipe (for high-speed hand tracking) and TensorFlow.js (for facial analysis), the application acts as both a Remote Control and a Public Speaking Coach. It controls presentation software like PowerPoint, Canva, and Keynote using natural mid-air gestures, eliminating the need for physical clickers.
- Touchless Navigation: Change slides without a clicker or keyboard. Includes a cooldown timer to prevent accidental double-skips.
- Virtual Laser Pointer: Point with your index finger to control the mouse cursor. Features "Cinematic Smoothing" for stable movement.
- Smart Timers: Trigger a Stopwatch or a 5-Minute Countdown with gestures to keep your talk on track.
- Universal Control: Works with any software that accepts keyboard shortcuts.
- Holographic UI: Visualizes your hand with a sci-fi glowing skeleton overlay.
- Gaze Coaching: Detects poor posture, stiffness, swaying, and lack of eye contact (looking down/up/sideways).
The PresentAir Gaze Coach uses TensorFlow.js Face Mesh to provide real-time feedback on common presentation faults. The system employs Heuristic Analysis on facial geometry to detect postural changes, triggering a warning after a 3-second delay and providing audio feedback.
| Bad Habit / State | Heuristic Metric | Corrective Action |
|---|---|---|
| Poor Eye Contact | Vertical Gaze Ratio (Nose Tip vs. Eye Line) is outside a neutral zone (Downwards). | "Please look at the audience" |
| Distracted (Ceiling) | Vertical Gaze Ratio is significantly above neutral (Nose Tip moves above eye line). | "Please look at the audience" |
| Side-Gazing | Yaw Ratio (Nose X distance compared to Eye Corners) exceeds the 8% tolerance threshold. | "Looking Side ⬅️/➡️" |
| Too Stiff | Cumulative frame-to-frame movement of the nose is near zero for 5 continuous seconds. | "You are too stiff. Try to move naturally." |
| Excessive Swaying | Cumulative movement of the nose exceeds a high threshold for 5 continuous seconds. | "You are swaying too much." |
| Face Blocked | Face detection fails or is obscured by paper while the timer is active. The system holds the last known state. | "Face Not Visible 🚫" |
| Gesture | Emoji | Action | Keyboard Shortcut Triggered |
|---|---|---|---|
| Open Hand | ✋ | Next Slide | Right Arrow |
| Fist | 👊 | Previous Slide | Left Arrow |
| Point | ☝️ | Laser Pointer | Moves Mouse + Ctrl+L |
| Peace Sign | ✌️ | Start Stopwatch | 1 + Enter (Internal/Canva) |
| Love Sign | 🤟 | 5-Min Timer | 0 + Enter (Canva 3s/Internal) |
Notes: Each Gesture's equivalent action can be changed based on the user's preference. When you stop pointing, the app automatically switches the cursor back to the standard Arrow (
Ctrl+A) and stops the laser.
This project uses a Hybrid Architecture to bridge the security gap between the Web Browser and the Operating System.
- Frontend (HTML/JS/AI): Captures video, tracks hand landmarks (MediaPipe), and analyzes facial geometry (TensorFlow.js) in the browser.
- Backend (Python/Flask): A lightweight local server that acts as the communication bridge.
- Automation (PyAutoGUI): Receives signals from the backend and executes physical keystrokes or mouse movements on the desktop.
- Python 3.x installed.
- VS Code with "Live Server" extension.
- A Webcam.
Open your terminal in the project folder and run:
pip install flask flask-cors pyautogui