VERA is an advanced multi-modal AI pipeline designed to analyze communication performance. It processes video input to evaluate Face (micro-expressions, gaze...), Body (posture, gestures...), and Audio (tonality, pacing...) metrics. By leveraging computer vision and audio signal processing, VERA provides objective, data-driven feedback to help users improve their communication skills.
Disclaimer:
- VERA is a prototype and we recommend to not upload videos longer than 1 to 2 minutes (e.g. elevator pitch).
- Some metrics are under fine-tuning and may not be as accurate as others.
Public speaking and communication are critical soft skills for Founders, Students, Executives.... Yet, feedback is often subjective and scarce.
VERA solves this by providing:
- Scientific Objectivity: Moving beyond "you look nervous" to "your gaze stability dropped by 20%".
- Holistic Feedback: Analyzing not just what you say, but how you say it through your non-verbal communication (Face, Body, Voice).
- Automated Coaching: offering actionable tips.
- Multi-Modal Analysis: Parallel processing of visual signals (using MediaPipe) and auditory signals (using Whisper and Librosa).
- 14 Core Metrics: Comprehensive tracking of engagement indicators (e.g., Gaze Stability, Gesture Magnitude, Vocal dynamic).
- Persona K-means Clustering: Unsupervised ML that automatically assigns a "Communication Persona" based on high-dimensional metric clusters.
- Rich Visualization: Generates debug videos with skeletal overlays to visualize exactly what the AI sees.
VERA sees what you can't. Our computer vision pipelines track micro-expressions and skeletal dynamics in real-time.
Left: Mediapipe FaceMesh - 13 facial landmarks out of the 468 for Face analysis
Right: MediapipeHolistic - 6 body landmarks out of the 33for Gesture Analysis
A minimal, high-impact dashboard gives you instant feedback on your communication skills.
Unsupervised ML that automatically assigns a "Communication Persona" based on raw high-dimensional extracted metrics. e.g:
VERA/
βββ assets/ # Project assets (logo, example outputs)
β βββ examples/ # Sample videos, GIFs, and screenshots
βββ data/ # Data storage for analysis
β βββ clustering_dataset/ # Master dataset (master_vector_data_set.csv)
β βββ clustering_results/ # Generated K-Means plots
β βββ models/ # Serialized ML models (scaler.pkl, kmeans_model.pkl)
β βββ processed/ # Intermediate CSV outputs (CLI)
β βββ raw/ # Source videos (CLI)
βββ docs/ # Documentation resources
β βββ metrics_reference_guide.md # Detailed metrics guide
βββ front-end/ # Streamlit Web Application
β βββ app.py # Main dashboard application
β βββ processed/ # Session-specific analysis outputs
β βββ uploaded/ # Temporary user uploads
βββ notebooks/ # Jupyter notebooks for exploration
βββ reports/ # Calibration and audit reports
βββ src/ # Source Code
β βββ analysis/ # Analytics, Calibration, Clustering logic
β βββ api/ # API Logic
β βββ audio/ # Audio module (Whisper/Librosa)
β βββ body/ # Body module (MediaPipe Pose)
β βββ face/ # Face module (MediaPipe FaceMesh)
β βββ presentation/ # Presentation logic
β βββ schemas/ # Config and Metric Specs (JSON)
β βββ utils/ # Shared utilities
β βββ main.py # CLI Entry point
βββ tests/ # Unit tests
βββ .gitignore # Git configuration
βββ Docker_README # Docker documentation
βββ Dockerfile # Container configuration
βββ requirements.txt # Python dependencies
βββ README.md # Main documentation- Python 3.10+
ffmpeg(Required for audio processing. Install viabrew install ffmpegon Mac orapt install ffmpegon Linux).
# Clone the repository
git clone https://github.com/WiwiC/VERA.git
cd VERA
# Create a virtual environment
python -m venv VERA-env
source VERA-env/bin/activate # or VERA-env\Scripts\activate on Windows
# Install dependencies
pip install -r requirements.txtTo analyze a single video file directly from the terminal:
python src/main.py <path/to/video.mp4>- Output:
data/processed/<video_filename>/
To analyze videos and visualize results in the interactive dashboard:
streamlit run front-end/app.py- Output:
front-end/processed/<video_filename>/
- File Types:
.mp4or.MOV. - Duration: Recommended 1 to 2 minutes (e.g., elevator pitch).
- Note: This is a prototype. A 1 min video takes ~2 min to process.
- Camera Setup:
- Front-facing camera.
- Camera at eye level.
- Framing: Ensure body is visible from hips to head to capture hand gestures.
All text definitions, coaching tips, and interpretation labels are centralized in:
src/schemas/metrics_spec.json
Important: This file is the "Source of Truth". It should be kept in synchronization with the numerical thresholds defined in src/*/config.py.
A more readable reference file constructed from src/schemas/metrics_spec.json list the metrics guide (both should be keep in synch as much as possible):
docs/metrics_reference_guide.md
| Module | Metric | Description |
|---|---|---|
| Face | head_stability |
Measures head steadiness (nodding vs. frozen). |
| Face | gaze_stability |
Tracks eye contact focus and consistency. |
| Face | smile_activation |
Measures smile intensity and frequency. |
| Face | head_down_ratio |
Percentage of time looking down. |
| Body | gesture_magnitude |
Expansiveness/size of hand gestures. |
| Body | gesture_activity |
Speed and frequency of gestures. |
| Body | gesture_stability |
Smoothness vs. jitteriness of movement. |
| Body | body_sway |
Torso movement (rocking vs. grounded). |
| Body | posture_openness |
Shoulder/chest openness. |
| Audio | speech_rate |
Words per minute (WPM). |
| Audio | pause_ratio |
Ratio of silence to speech. |
| Audio | pitch_dynamic |
Tonal variation (avoiding monotone). |
| Audio | volume_dynamic |
Loudness variation. |
| Audio | vocal_punch |
Peak volume clarity and emphasis. |
To ensure scientific rigor, VERA uses a calibration system to fine-tune scoring thresholds.
- Labeled Data: We maintained a
reports/calibration_manifest.csvcontaining IDs of videos (contained in data/raw folder) labeled by human (scores 0-100). - Analysis Scripts: Scripts in
src/analysis/(e.g.,generate_calibration_report.py) compare VERA's outputs results against these human labels. - Threshold Tuning: We use
final_calibration_search.pyto find the optimal parabolic thresholds that maximize correlation with human judgment.
- Add Labeled Videos: Update
calibration_manifest.csvwith new video IDs and manual labels. (For labels list check:src/schemas/metrics_spec.json) - Run Analysis: Execute
python src/analysis/generate_calibration_report.pyto see current performance. - Update Thresholds: Adjust
BASELINE_*constants insrc/*/config.pybased on the report. - Validate: Re-run the report to confirm Spearman correlation improvements.
VERA uses K-means clustering to identify "Communication Personas" without explicit labels.
- Dataset:
data/clustering_dataset/master_vector_data_set.csv. This file accumulates feature vectors from all processed videos. - Mechanism:
- Each analysis extracts a rawhigh-dimensional feature vector (all 14 metrics).
- This vector is added to the master dataset.
- We run K-Means to find natural groupings.
- New users are assigned to the nearest cluster center to predict their persona.
The pipeline follows a linear data flow:
graph LR
A[Video Input] --> B(Extraction)
B --> C{Multimodal Processing}
C -->|Face| D[FaceMesh + Gaze]
C -->|Body| E[Pose Landmarks]
C -->|Audio| F[Librosa Spectral]
D --> G[Raw 1s Timeline]
E --> G
F --> G
G --> H[5s Rolling Window]
H --> I[Scoring Engine]
I --> J[Enrichment & Coaching]
J --> K[JSON & Dashboard Output]
We prioritize metrics that show strong correlation with communication effectiveness. Based on our latest calibration:
- Strong Signals:
speech_rate,gaze_stability,gesture_magnitudeshow high Spearman correlation (>0.7) with human expertise. - Calibration: The tiered parabolic scoring helps normalize differences between webcam hardware.
Note: Based on our last calibration report:
- Global accuracy:
| Metric | N | Exact Match (%) | Within Β±1 Bucket (%) |
|---|---|---|---|
| gesture_activity | 322 | 78.3% | 100.0% |
| speech_rate | 322 | 78.3% | 95.7% |
| posture_openness | 322 | 52.2% | 91.3% |
| gesture_magnitude | 322 | 39.1% | 87.0% |
| body_sway | 322 | 21.7% | 87.0% |
| gesture_stability | 322 | 39.1% | 87.0% |
| head_stability | 322 | 26.1% | 78.3% |
| pause_ratio | 322 | 34.8% | 78.3% |
| gaze_stability | 322 | 17.4% | 78.3% |
| pitch_dynamic | 322 | 39.1% | 73.9% |
| volume_dynamic | 322 | 8.7% | 73.9% |
| smile_activation | 322 | 13.0% | 69.6% |
| vocal_punch | 322 | 34.8% | 65.2% |
| head_down_ratio | 322 | 0.0% | 65.2% |
| AVERAGE | 322 | 34.5% | 80.8% |
(Calibration Report 2025-12-11).
- Accuracy per metric:
- Strong, reliable metrics (high exact AND high within-1 step):
- gesture_activity
- speech_rate
- posture_openness
- gesture_magnitude
- body_sway
- gesture_stability
- Moderately noisy but still directionally useful:
- head_stability
- gaze_stability
- pause_ratio
- pitch_dynamic
- volume_dynamic
- Noisiest / Further calibration needed:
- smile_activation
- vocal_punch
- head_down_ratio
| Issue | Solution |
|---|---|
ffmpeg not installed |
Install FFmpeg system-wide. Audio processing will fail without it. |
| MediaPipe failing | Ensure good lighting and that the face is fully visible/unobstructed. Zoom your video if needed but try to keep the body visible from hips to head. Debugged videos are here to see if everything was correctly captured |
| Missing folders | Run python src/main.py once to auto-generate data/processed. |
| CUDA error | VERA defaults to CPU to ensure compatibility. If verifying CUDA, check torch version. |
- Local Processing: All analysis happens locally on your machine.
- No Cloud Storage: Videos are not uploaded to any external server.
- User Control: You retain full ownership of your data and bio-metric information.
- No Tracking: No third-party analytics or tracking pixels are used.
MIT License Copyright (c) 2025 WiwiC Commercial use prohibited without explicit permission
- Author: William Chalons
- Core Libraries:
- MediaPipe (Vision)
- Librosa (Audio)
- Streamlit (UI)
- Pandas/Numpy (Data)
- Scikit-learn (Clustering)