GAIT_API / README.md
UdasriHasindu
docs: complete doc
98a97f4
|
Raw
History Blame Contribute Delete
5.04 kB
---
title: GAIT_API
emoji: 🚶
colorFrom: blue
colorTo: indigo
sdk: docker
app_file: app.py
pinned: false
---
# Gait Analysis API
Clinical gait analysis service built with FastAPI, OpenCV, and MediaPipe Pose.
It processes a front-view walking video and returns:
- extracted gait biomarkers
- rule-based clinical interpretation
- overall gait stability score
- annotated skeleton video
- clinical dashboard plot
The notebook prototype is kept in [gait.ipynb](<gait.ipynb>), and the production API implementation is in [app.py](app.py).
## Table of contents
- Overview
- Project structure
- How it works
- API reference
- Local development
- Docker usage
- Storage cleanup strategy
- Hugging Face Spaces deployment
- GitHub Actions auto-deploy
- Troubleshooting
## Overview
This API is designed for single-video gait assessment.
Core stack:
- FastAPI for REST endpoints
- MediaPipe Pose for landmark extraction
- OpenCV for video I/O and skeleton overlay
- NumPy/SciPy for signal processing and feature extraction
- Matplotlib for biomarker visualizations
Dependencies are listed in [requirements.txt](requirements.txt).
## Project structure
- [app.py](app.py): Main API + gait analysis pipeline
- [requirements.txt](requirements.txt): Python dependencies
- [Dockerfile](Dockerfile): Container build (HF Spaces compatible)
- [scripts/start.sh](scripts/start.sh): Container startup + background cleanup loop
- [scripts/cleanup_runs.py](scripts/cleanup_runs.py): Deletes old generated files
- [.github/workflows/deploy-hf-space.yml](.github/workflows/deploy-hf-space.yml): Auto-sync GitHub repo to HF Space
- [gait.ipynb](<gait.ipynb>): Original notebook source logic
## How it works
High-level flow:
1. Upload `video` + `gender`
2. Extract pose landmarks for each frame
3. Validate video (person detected, front-view check)
4. Build temporal signals (ankles, feet, arm swing, hip center)
5. Smooth + detrend + detect peaks
6. Compute biomarkers (`stride_variability`, `cadence`, `symmetry_ratio`, arm metrics)
7. Create clinical interpretation text
8. Compute weighted gait stability score
9. Generate dashboard image + annotated video
10. Return JSON payload
Main endpoints are declared in [app.py](app.py#L560-L785).
## API reference
### `GET /`
Basic API metadata and endpoint hints.
### `POST /analyze`
Accepts multipart form-data:
- `video`: gait video (`mp4/mov/avi/...`)
- `gender`: `male` or `female`
Returns analysis JSON with base64-embedded files (`annotated_video`, `clinical_dashboard`).
Use this when you want everything in one response.
### `POST /analyze_files`
Accepts multipart form-data:
- `video`: gait video
- `gender`: `male` or `female`
Returns analysis JSON with downloadable URLs:
- `/download/{session_id}_annotated.mp4`
- `/download/{session_id}_dashboard.png`
This is generally the better choice for deployment because responses stay smaller than full base64 payloads.
### `GET /download/{filename}`
Downloads generated output files from `runs/outputs`.
### `GET /health`
Simple health check.
## Local development
1. Create environment and install dependencies
```bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
2. Run API
```bash
uvicorn app:app --reload --host 0.0.0.0 --port 8000
```
3. Open docs
- Swagger UI: http://127.0.0.1:8000/docs
- ReDoc: http://127.0.0.1:8000/redoc
## Docker usage
Build:
```bash
docker build -t gait-api:latest .
```
Run:
```bash
docker run --rm -p 7860:7860 gait-api:latest
```
Container defaults:
- serves on port `7860`
- startup script: [scripts/start.sh](scripts/start.sh)
- output directory: `/app/runs/outputs`
## Storage cleanup strategy
Generated files from `/analyze_files` are stored under `runs/outputs`.
Cleanup is handled by [scripts/cleanup_runs.py](scripts/cleanup_runs.py):
- default retention: 30 minutes
- deletes old files under `runs/`
- preserves required directory structure
In Docker/HF Spaces, [scripts/start.sh](scripts/start.sh) starts a background cleanup loop automatically.
Configurable environment variables:
- `CLEANUP_INTERVAL_SECONDS` (default: `1800`)
- `RUNS_MAX_AGE_MINUTES` (default: `30`)
Optional manual run:
```bash
python scripts/cleanup_runs.py --path ./runs --max-age-minutes 30 --dry-run
```
## Hugging Face Spaces deployment (Docker)
This repository is configured for Docker Spaces.
Key points:
- README front matter is required and already included
- container uses [Dockerfile](Dockerfile)
- app starts via [scripts/start.sh](scripts/start.sh)
- `PORT` env is respected (default `7860`)
Recommended endpoint on Spaces:
- Use `/analyze_files` for better response size and reliability
## GitHub Actions auto-deploy to HF Space
Workflow: [.github/workflows/deploy-hf-space.yml](.github/workflows/deploy-hf-space.yml)
Behavior:
- triggers on push to `main`
- sanitizes `HF_TOKEN`
- force-pushes repository to `xplorers/GAIT_API`
Required GitHub secret:
- `HF_TOKEN`: Hugging Face token with write access to the target Space