Skip to content

Krasavina26/Tennis_statistics

Repository files navigation

Tennis Video Analysis System

Содержание

Описание

Система на основе Computer Vision, позволяющая получать характеристики по видеозаписи игры в теннис двух игроков.

Инструкция по запуску

  1. Подготовка файлов

    • Загрузите свои веса моделей в папку models
    • Поместите исходное видео в папку input_videos
  2. Настройка параметров

    • Отредактируйте файл constants/__init__.py
    • Укажите рост игроков:
      • PLAYER_1_HEIGHT_METERS — рост ближайшего к камере игрока
      • PLAYER_2_HEIGHT_METERS — рост второго игрока (дальше от камеры)
  3. Запуск

    • main.py — получение характеристик без отрисовки bbox'ов и точек корта
    • main_with_draw.py — тот же анализ, но с отладочной информацией

Итоговый результат

На выходном видео отображается:

  • Мини-корт — в правом верхнем углу
  • Табло со скоростями игроков — в правом нижнем углу
Без отладки С отладкой

Сохраняемые характеристики

Система генерирует текстовый файл со следующими метриками:

  1. Количество ударов и подач каждого игрока
  2. Доли успешных подач каждого игрока
  3. Доли двойных ошибок при подачах
  4. Количество совершенных розыгрышей
  5. Среднее и максимальное число ударов за розыгрыш
  6. Длина пробега каждого игрока (в метрах)
  7. Средние и максимальные скорости игроков (км/ч)
  8. Видео горизонтального мини-корта и карта покрытия корта:

Мини-корт

Карта покрытия корта

Обучение моделей

Выбранные архитектуры

Задача Модель
Детекция игроков и сетки yolov8s
Детекция мяча yolov26n
Детекция точек корта yolo26s-pose

Датасеты

Датасеты собраны на платформе Roboflow. Размечены кадры с любительских видео и профессиональных турниров с разных ракурсов, при разном освещении и в различных локациях.

Ссылки на датасеты:

Примечание: Последний датасет содержит 4 класса (сетка, игроки, мяч, ракетки), но количество кадров недостаточно для качественного обучения детекции мелких объектов (мяча и ракеток).

Результаты обучения

Детекция мяча Детекция игрока, сетки, мяча, ракетки
Обнаружение мяча Обнаружение объектов

Реализация

Трекинг

1. Трекинг точек корта

Точки корта определяются только на первом кадре с помощью обученной модели YOLO. Реализована возможность их уточнения с помощью компьютерного зрения: в окрестности каждой предсказанной точки выполняется поиск пересечений белых линий разметки, что позволяет повысить точность позиционирования. Данный функционал требует дополнительной настройки параметров для оптимальной работы.


Рисунок 1 — Точки корта с нумерацией

Важно: Модель детектирует только точки 0-13 включительно. Точки 14-18 вычисляются программно в процессе деления корта сеткой.

В случаях, когда корт частично выходит за пределы кадра, применяется специальная логика для восстановления недостающих точек:


Рисунок 2 — Пример с точками за пределами кадра

Обозначения на рисунке:

🔴 Красные точки — исходные точки, вышедшие за границы кадра

🟢 Зеленые точки — восстановленные позиции точек

Алгоритм восстановления:

  • Точки 2 и 3 получают координаты (0, y_5) и (width, y_7) соответственно, где y_5, y_7 — координаты точек 5 и 7 по оси ординат
  • Точки 14 и 15 определяются как первые "белые" пиксели при вертикальном сканировании вверх от восстановленных точек 2 и 3

2. Трекинг мяча

Мяч представляет собой наиболее сложный объект для детекции ввиду своих особенностей:

  • Малый размер объекта
  • Высокая скорость перемещения
  • Размытие при быстром движении
  • Низкая различимость на некоторых кадрах

Примеры проблемных кадров:

Размытый мяч Малозаметный мяч
Движущийся мяч Мяч на фоне

Для обеспечения непрерывного трекинга применяется двухэтапный подход:

  1. Интерполяция пропусков — при отсутствии детекции мяча на кадре, его позиция восстанавливается на основе соседних кадров с детекцией
  2. Сглаживание траектории — для отображения на мини-корте применяется дополнительное сглаживание интерполированных позиций, что устраняет резкие скачки

3. Трекинг игроков

В процессе анализа были выявлены две основные проблемы при трекинге игроков:

  • Модель может детектировать более двух объектов как "игроков" (например, судей или зрителей);
  • Игроки могут временно покидать кадр и возвращаться обратно.

Алгоритм определения игроков

  1. Инициализация:

    • Собираются все кандидаты в игроки;
    • Выбираются 2 объекта, ближайших к точкам корта;
    • Присваиваются ID: Игрок 1 — ближе к камере, Игрок 2 — дальше от камеры.
  2. Поддержание трекинга:

    • При обнаружении новых кандидатов, близких к точкам корта;
    • Если один из игроков пропал с предыдущего кадра, новому кандидату присваивается ID пропавшего игрока.

Получение характеристик

Реализовано на основе правил (rule-based подход).


Деление корта на зоны

Важно: На данный момент учет конкретных зон корта не реализован.

Деление мини-корта происходит по точкам, без дополнительных расчетов. Все зоны с делением сеткой и без представлены ниже на Рисунке 2 и Рисунке 3.

schema_before
Рисунок 3 — Схема корта до деления сеткой на зоны
schema_after
Рисунок 4 — Схема корта после деления сеткой на зоны

Алгоритм деления реального корта:

  1. Обученная модель детектирует bounding box сетки на кадре
  2. Нижняя линия bbox'а принимается за линию сетки
  3. Линия сетки корректируется для параллельности другой линии корта (отрезок BC на Рисунке 5)
  4. Находятся пересечения линий зон с откорректированной линией сетки

Зачем корректировать линию сетки?

При наклоне камеры возникает искажение, которое необходимо компенсировать:

корт_primer
Рисунок 5 — Пример определения линии сетки при наклоне камеры

Без коррекции линия сетки прошла бы по траектории HP, тогда как правильная линия — AP.


Перспективы улучшения

About

Система на основе Computer Vision, позволяющая получать характеристики по видеозаписи игры в теннис двух игроков

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages