Детекция игроков на площадке — только первый слой задачи. Практическая ценность видеоаналитики в волейболе начинается там, где система понимает, когда произошло касание мяча и какое действие выполнил игрок: подача, приём, передача, атака, блок. Ниже — рабочий каркас такого пайплайна, критерии выбора подходов и ошибки, которые съедают больше всего времени.

Сразу обозначим границы: универсального решения «из коробки» нет. Волейбол сложен для компьютерного зрения из-за плотных пересечений игроков, быстрого мяча, ракурсов камеры и неоднозначных ситуаций (касание блока vs касание сетки). Поэтому строить систему стоит итеративно, начиная с узкой постановки: одна камера, фиксированный ракурс, ограниченный набор классов действий.

Шаг 1. Формализуйте задачу до строчки кода

Прежде чем выбирать модель, зафиксируйте, что считается событием. Касание мяча — это момент контакта или интервал в несколько кадров? Действие размечается по игроку, по эпизоду или по розыгрышу целиком? От ответов зависит и разметка, и метрики.

  • Единица анализа. Рекомендую начать с эпизода: короткий временной отрезок вокруг касания (например, окно кадров до и после контакта). Так проще и размечать, и обучать классификатор.
  • Список классов. Держите его минимальным: подача, приём, передача, атака, блок. Экзотику вроде «скидка» или «страховка» добавляйте позже, когда базовый контур стабилен.
  • Метрика успеха. Для детекции касаний — полнота и точность по событиям с допуском по времени. Для классификации — матрица ошибок: она покажет, какие пары классов путаются чаще всего.

Типичная ошибка здесь — сразу замахиваться на полный матч с нескольких камер и десять классов действий. На старте это гарантирует хаос в разметке и невозможность понять, где именно ломается система.

Шаг 2. Зафиксируйте касание мяча

Касание — это событие, а не объект, поэтому одного детектора объектов недостаточно. Нужен трекинг мяча и игроков плюс правило или модель, определяющая контакт. Практичный вариант — гибрид: геометрические эвристики отсекают очевидные случаи, а модель уточняет спорные.

  • Трекинг мяча. Мяч быстрый и часто смазан, поэтому трекер должен уметь предсказывать положение между кадрами и переживать пропуски детекций.
  • Связь мяча и игрока. Касание фиксируется, когда траектория мяча меняется рядом с конечностями игрока. Полезно использовать скелет игрока, а не только bounding box: контакт часто происходит на границе бокса.
  • Проверка гипотез. Резкое изменение скорости или направления мяча — сильный сигнал касания. Но он же срабатывает на отскоке от пола, поэтому нужен фильтр по зоне площадки и близости к игроку.

Пример из практики: система уверенно ловит подачи и атаки, но пропускает приём, потому что мяч приходит с большой скоростью и на кадрах размыт. Лечится это не «более мощной моделью», а повышением частоты кадров на входе и допуском по времени при оценке события.

Шаг 3. Классифицируйте действие

Когда эпизоды касаний выделены, задача сводится к классификации коротких видеофрагментов. Здесь важно не тащить в модель всё подряд: контекст должен быть достаточным, но не избыточным.

  • Вход классификатора. Окно кадров вокруг касания плюс координаты игрока и мяча. Позиционные признаки часто дают больше, чем сам видеоряд: передача и атака различимы по расположению относительно сетки.
  • Архитектура. Начните с компактной видео-модели или последовательности кадров с временной агрегацией. Тяжёлые архитектуры оправданы, когда данных достаточно и базовая версия упирается в потолок качества.
  • Разметка. Размечайте эпизоды, а не кадры. Один эпизод — одна метка действия. Спорные случаи выносите в отдельную папку и пересматривайте правила, а не «дожимайте» интуитивно.

Частая ошибка — дисбаланс классов: атак и передач в разы больше, чем блоков. Без стратифицированной выборки и учёта дисбаланса в функции потерь модель будет предсказуемо игнорировать редкие действия.

Шаг 4. Оценивайте систему как продукт, а не как модель

Метрики на валидации — необходимое, но недостаточное условие. Смотрите на поведение системы на полном розыгрыше: не теряется ли последовательность событий, нет ли дублей касаний, совпадает ли число действий с реальным.

  • Событийная оценка. Сопоставляйте предсказанные касания с эталонными с допуском по времени и считайте пропуски и ложные срабатывания отдельно.
  • Ошибки каскада. Разделяйте промахи детекции касаний и ошибки классификации. Это разные задачи с разными способами лечения.
  • Ручная проверка. Регулярно просматривайте случайную выборку эпизодов глазами. Это быстрее выявляет системные проблемы, чем очередной прогон метрик.

Практический вывод: аналитика волейбольного видео строится как конвейер — детекция и трекинг, фиксация касаний, классификация эпизодов, событийная оценка. Начинайте с узкой постановки и одного ракурса, держите список классов коротким, размечайте эпизоды и разделяйте ошибки каскада. Такой подход даёт измеримый прогресс без иллюзий, что одна модель решит всё сразу.