Skip to content

masouduut94/volleyball_analytics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

230 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ Volleyball Analytics

image source

๐Ÿ“Œ Overview

Volleyball Analytics is an end-to-end computer vision project that turns volleyball match video into structured, queryable informationโ€”so you can move from โ€œwatching footageโ€ to measuring what happened. Itโ€™s built for practical, real-time workflows where coaches, analysts, and developers want automated tagging, breakdowns, and visual overlays from broadcast-style games.

At its core, the system combines game-state understanding (SERVICE / PLAY / NO-PLAY) with action and object detection (serve/receive/set/spike/block + ball) and court segmentation. These signals can be streamed into a live demo, exported as annotated video, and used as building blocks for higher-level KPIs (e.g., rally segmentation, action counts, and moment extraction like ace points).

The project also includes a FastAPI backend (optional) for storing and retrieving results, making it easier to integrate this pipeline into larger applications (dashboards, scouting tools, or data pipelines). The machine learning functionality is organized through a unified ML Manager module (included as a git submodule) to keep training/inference components reusable and cleanly separated.

๐Ÿš€ Quick Start

๐Ÿ“ฅ 1. Clone the Repository including its submodules.

This repository uses Git submodules for the ML Manager. You must clone it correctly:

# Clone with submodules (RECOMMENDED)
git clone --recursive https://github.com/masouduut94/volleyball_analytics.git

# OR if already cloned, initialize submodules
git submodule update --init --recursive

๐Ÿ 2. Create the Python Environment

You can set up the project using either uv (recommended for speed) or Conda.

โšก Option A: Using uv

Install dependencies directly from the pyproject.toml file:

# Create and sync the virtual environment
uv sync

# Activate the environment
source .venv/bin/activate      # Linux / macOS
.venv\Scripts\activate         # Windows

๐Ÿ Option B: Using Conda

Create the environment from the provided requirements.yml file:

# Create the conda environment
conda env create -f requirements.yml

# Activate the environment
conda activate volleyball_analytics

๐Ÿงช 3. Validate the Installation

To verify that the environment and models are set up correctly, run the setup.ipynb notebook located in the notebooks/ directory.

Before launching Jupyter Notebook, make sure your environment is available as a Jupyter kernel.

๐Ÿ“ Register the Environment as a Jupyter Kernel

If using uv:

python -m ipykernel install --user --name volleyball_analytics --display-name "Python (volleyball_analytics)"

If using Conda, activate the environment first and then run:

python -m ipykernel install --user --name volleyball_analytics --display-name "Python (volleyball_analytics)"

๐Ÿš€ Launch Jupyter

jupyter notebook

Open:

notebooks/setup.ipynb

and select the Python (volleyball_analytics) kernel before running the notebook.

The notebook will download any required assets (if needed) and validate that the models and dependencies are installed correctly. โœ…

๐ŸŽฏ Model Weights Setup and test individually.

The system requires pre-trained models for inference. Weights are automatically downloaded when you first run the system, or you can download them manually.

๐Ÿš€ Automatic Download (Recommended)

from src.ml_manager import MLManager

# Weights are automatically downloaded if missing
manager = MLManager()

๐Ÿ“ฅ Manual Download

from src.ml_manager.utils.downloader import download_all_models

# Download all models in one ZIP file
success = download_all_models()

๐Ÿง  Model weights URLs

  1. Court segmentation
  2. Ball segmentation
  3. Action detection
  4. Gamestate classification

๐Ÿ›ข๏ธ Dataset URLs

  1. Ball segmentation
  2. Action detection
  3. Gamestate classification

๐Ÿ“ Final Directory Structure

weights/
โ”œโ”€โ”€ ๐Ÿ ball/weights/best.pt           # Ball detection & segmentation
โ”œโ”€โ”€ ๐ŸŽญ action/weights/best.pt         # Action detection (6 classes)  
โ”œโ”€โ”€ ๐ŸŸ๏ธ court/weights/best.pt          # Court segmentation
โ””โ”€โ”€ ๐ŸŽฎ game_state/                    # Game state classification
    โ””โ”€โ”€ [checkpoint files]

Download Source: Complete Weights ZIP

๐ŸŽฏ ML Manager Integration

The system uses a unified ML Manager module for all machine learning operations:

from src.ml_manager import MLManager
import cv2
# Initialize ML Manager
ml_manager = MLManager(verbose=True)

cap = cv2.VideoCapture('sample_video.mp4')
frames = []
for i in range(16):
    status, frame = cap.read()
    frames.append(frame)
# Game state classification
game_state = ml_manager.classify_game_state(frames)

# Action detection
actions = ml_manager.detect_actions(frames[0])

# Ball detection
ball_detections = ml_manager.detect_ball(frames[0])

๐Ÿ“š ML Manager Documentation: See src/ml_manager/README.md for comprehensive usage.

๐ŸŽฏ What You'll Get

  • ๐Ÿ ML Pipeline: Video classification + Object detection for volleyball analysis
  • ๐ŸŽฎ Game State Classification: Service, Play, No-Play detection using VideoMAE
  • ๐ŸŽญ Action Detection: 6 volleyball actions (serve, receive, set, spike, block, ball)
  • ๐ŸŸ๏ธ Court Segmentation: Court boundary detection
  • ๐Ÿ“Š Analytics: Real-time statistics and insights
  • ๐ŸŒ API Backend: FastAPI-based backend for data storage and retrieval

๐Ÿ—๏ธ Project Architecture

This machine learning project runs in real-time on top of 2 deep learning models:

๐ŸŽฌ Video Classification Model (VideoMAE)

In a live broadcast game, it's important to run processes only when the game is on. To extract the periods when the game is active, HuggingFace VideoMAE is utilized.

๐ŸŽฏ Purpose: Game state classification with 3 labels

  • ๐Ÿ SERVICE: Start of play when a player tosses the ball to serve
  • ๐ŸŽฎ PLAY: Active game periods where players are playing
  • โธ๏ธ NO-PLAY: Inactive periods where players are not playing

๐Ÿ—๏ธ Architecture: videomae architecture

image source

๐ŸŽฏ YOLOv8 Object Detection Model

This state-of-the-art model is trained on a custom volleyball dataset for object detection and action recognition.

๐Ÿ—๏ธ Architecture: Yolov8

image source

๐ŸŽจ Detection Classes (6 different objects with color-coded bounding boxes):

  • ๐Ÿ”ด Red box: Volleyball ball
  • ๐ŸŸค Brown box: Volleyball service action
  • ๐ŸŸข Green box: Volleyball reception action
  • ๐Ÿ”ต Blue box: Volleyball setting action
  • ๐ŸŸฃ Purple box: Volleyball blocking action
  • ๐ŸŸ  Orange box: Volleyball spike action

๐ŸŽฅ Demo Results

The system provides real-time analysis with:

  • ๐ŸŽฎ Game State: Displayed in top-left corner (SERVICE/PLAY/NO-PLAY)
  • ๐ŸŽฏ Object Detection: Color-coded bounding boxes (only on SERVICE and PLAY frames)
  • ๐Ÿ“Š Analytics: Real-time statistics and insights

๐Ÿ† Demo Videos

๐Ÿ‡ซ๐Ÿ‡ท France vs ๐Ÿ‡ต๐Ÿ‡ฑ Poland

demo1

๐Ÿ‡บ๐Ÿ‡ธ USA vs ๐Ÿ‡จ๐Ÿ‡ฆ Canada

demo2

๐Ÿ‡บ๐Ÿ‡ธ USA vs ๐Ÿ‡ต๐Ÿ‡ฑ Poland

demo3

๐ŸŽฏ Ace Point Detection

The system can extract specific game moments, like ace points: ace

๐ŸŽฏ Individual Model Testing

Test specific components individually:

# Basic inference test using demo.py
python src/demo.py --video_path path/to/your/video.mp4

๐Ÿ“Š Data Sources

The video clips used for training and testing are sourced from:

  • ๐Ÿ“บ YouTube Channel: Volleyball Watchdog
  • ๐Ÿ† Content: International volleyball matches and tournaments

๐Ÿ”ฎ Future Development

๐Ÿ“ˆ Planned Features

  1. ๐Ÿ“Š Data Analysis: Advanced KPIs and analytics

    • Service success rate analysis
    • Service zone analysis
    • Reception success rate
    • Player performance metrics
    • Team strategy analysis
  2. ๐ŸŽฏ Real-time Analytics: Live match analysis

    • Real-time statistics
    • Live performance metrics
    • Instant insights for coaches

๐Ÿ—๏ธ Project Structure

volleyball_analytics/
โ”œโ”€โ”€ ๐Ÿง  src/                         # Main source code
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ ml_manager/               # ML Manager submodule
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ vb_backend/                # FastAPI backend
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ weights/                   # Model weights
โ”‚   โ”œโ”€โ”€ ๐ŸŽฌ main.py                    # Main ML pipeline (coming soon!)
โ”‚   โ”œโ”€โ”€ ๐ŸŽฅ demo.py                   # Demo application
โ”œโ”€โ”€ ๐Ÿ“Š data/                         # Datasets and processed data
โ”œโ”€โ”€ ๐Ÿ“š notebooks/                    # Jupyter notebooks
โ”œโ”€โ”€ ๐Ÿ› ๏ธ scripts/                     # Utility scripts
โ”œโ”€โ”€ ๐Ÿ“‹ conf/                         # Configuration files
โ””โ”€โ”€ ๐Ÿ“– README.md                     # This file

๐Ÿ”— Additional Resources


๐Ÿ Happy Volleyball Analytics! Let's revolutionize the game with AI! ๐Ÿš€โœจ

Releases

No releases published

Packages

 
 
 

Contributors