traffic-video-analytics / docker-compose.yml
salvirezwan's picture
End-to-end real-time traffic analytics pipeline β€” YOLOv8s ONNX
5b60216
Raw
History Blame Contribute Delete
2.25 kB
version: "3.9"
services:
# ── Backend (FastAPI) ────────────────────────────────────────────────────────
api:
build:
context: .
dockerfile: api/Dockerfile
image: trafficvision-api
container_name: trafficvision-api
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- ./models/weights:/app/models/weights:ro # ONNX weights (read-only)
- ./data/sample_videos:/app/data/sample_videos:ro
- db_data:/app/data/db
environment:
- MODEL_PATH=${MODEL_PATH:-models/weights/yolov8s_traffic.onnx}
- VIDEO_SOURCE=${VIDEO_SOURCE:-data/sample_videos/traffic.mp4}
- CONFIDENCE_THRESHOLD=${CONFIDENCE_THRESHOLD:-0.4}
- IOU_THRESHOLD=${IOU_THRESHOLD:-0.5}
- TARGET_CLASSES=${TARGET_CLASSES:-2,3,5,7}
- TARGET_FPS=${TARGET_FPS:-25}
- FRAME_SKIP=${FRAME_SKIP:-1}
- METERS_PER_PIXEL=${METERS_PER_PIXEL:-0.05}
- ANOMALY_WINDOW_SECONDS=${ANOMALY_WINDOW_SECONDS:-60}
- ANOMALY_STD_THRESHOLD=${ANOMALY_STD_THRESHOLD:-2.0}
- API_HOST=0.0.0.0
- API_PORT=8000
- CORS_ORIGINS=http://localhost:3000,http://localhost:80,http://localhost,http://dashboard
- DATABASE_URL=sqlite+aiosqlite:///./data/db/trafficvision.db
- RING_BUFFER_SECONDS=${RING_BUFFER_SECONDS:-300}
- JPEG_QUALITY=${JPEG_QUALITY:-80}
- METRICS_INTERVAL_MS=${METRICS_INTERVAL_MS:-500}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
depends_on: []
networks:
- trafficvision
# ── Frontend (React + Nginx) ─────────────────────────────────────────────────
dashboard:
build:
context: dashboard
dockerfile: Dockerfile
image: trafficvision-dashboard
container_name: trafficvision-dashboard
restart: unless-stopped
ports:
- "80:80"
depends_on:
- api
networks:
- trafficvision
volumes:
db_data:
networks:
trafficvision:
driver: bridge