A computer vision system for analyzing squat and pushup exercise form using AI pose estimation. The system provides real-time rep counting, form validation, and comprehensive reporting.
- Exercise Analysis: Automated squat and pushup form analysis with rep counting
- Form Validation: Real-time feedback on exercise form using joint angle thresholds
- Side Detection: Automatic detection of body orientation using 3 heuristic algorithms
- Comprehensive Reporting: PDF reports, CSV data export, and JSON summaries
- Flask API: RESTful endpoints for video upload and analysis
- Docker Support: Containerized deployment for easy setup
- Unit Test: Create a unit test for the exercise and flask api
.
├── api/
│ ├── flask_api.py # Flask API endpoints
│ └── __init__.py
├── assets/
│ ├── output/ # Analysis output directory
│ └── yolo11x-pose.pt # YOLO pose estimation model
├── exercises/
│ ├── squat.py # Squat analysis logic
│ ├── pushup.py # Pushup analysis logic
│ └── __init__.py
├── src/
│ └── main.py # Main pipeline (non-Flask)
├── tests/
│ ├── test_api.py # API integration tests
│ └── test_exercises.py # Exercise logic unit tests
├── utils/
│ ├── config_utils.py # Configuration utilities
│ ├── generate_report.py # Report generation
│ ├── side_detection.py # Body orientation detection
│ └── visualization_utils.py # Visualization utilities
├── reports/ # Generated analysis reports
├── config.yaml # Configuration file
├── requirements.txt # Python dependencies
├── Dockerfile # Docker configuration
└── test_flask_api.py # Standalone API test script
- Squats: Primary angle is knee angle (hip-knee-ankle), with hip angle (shoulder-hip-knee) as support
- Pushups: Primary angle is elbow angle (wrist-elbow-shoulder), with back straightness (shoulder-hip-knee) validation
Uses YOLO11 for keypoint detection, chosen for its efficiency-latency tradeoff and superior keypoint detection accuracy.
Implements 3 heuristic algorithms to determine body orientation (left/right facing) for accurate angle calculations.
git clone https://github.com/khaledmoawad1/squat_pushup_ai_analyzer.git
cd squat_pushup_ai_analyzer# Using conda
conda create -n ai-trainer python=3.9
conda activate ai-trainer
# Using python venv
python -m venv ai-trainer
source ai-trainer/bin/activate # On Windows: ai-trainer\Scripts\activatepip install -r requirements.txtUpdate config.yaml based on your requirements:
- Input video paths
- Angle thresholds for exercise validation
- Model paths and output directories
- Visualization settings
# Build Docker image
sudo docker build -t ai-trainer .
# Run container
sudo docker run -p 5000:5000 ai-trainer# Start Flask server
python api/flask_api.py
# Test API using standalone script
python test_flask_api.py# Run analysis pipeline directly
python src/main.py --exercise squat --video path/to/video.mp4# Run all tests
pytest
# Run specific test files
pytest tests/test_api.py
pytest tests/test_exercises.pyGET /health- Health check endpointPOST /analyze- Video analysis endpoint- Parameters:
video(file),exercise(squat/pushup) - Returns: Analysis results with rep counts and form feedback
- Parameters:
The system generates comprehensive reports in ./reports/{video_id}/:
- PDF Report: Visual analysis with charts and sample frames
- CSV Results: Frame-by-frame angle data
- JSON Summary: Exercise statistics and form analysis
- Full Response: Complete API response data