Как мы оцифровали футбольные матчи с помощью CV

в 7:09, , рубрики: computer vision, sportech, Алгоритмы, анализ данных, обработка видео, спорт, стриминг, яндекс
Как мы оцифровали футбольные матчи с помощью CV - 1

Привет! Меня зовут Владимир Цуканов, я СТО спортивного направления в Яндекс Плюсе. Мы занимаемся съёмкой, обработкой и стримингом спортивных событий. В этом посте я расскажу о работе с технической съёмкой и анализом футбольных матчей.

Расскажу о том, как и на что снимать футбол, если вы хотите его проанализировать, какие есть сложности в плане распознавания толпы бегающих спортсменов, как отреагирует машинное зрение, если за мяч начнётся нешуточная борьба, чем вся эта затея полезна для тренеров и экспертов и многое, многое другое.

Почему мы вообще решили этим заняться

Спорт в России достаточно технологичен. В стране есть успешный опыт организации и проведения масштабных соревнований: самые яркие примеры — Олимпиада в Сочи в 2014 году и чемпионат мира по футболу в 2018 году. А ещё есть много хорошо обставленных в плане  железа стадионов, и их становится всё больше. В общем, спорт сейчас — отрасль интересная и нужная, у клубов и инвесторов есть мотивация и возможности вкладываться в её развитие и совершенствование. 

Мы в команде обсуждали разные варианты интеграции технологий Яндекса в спорт — от VR-трансляций до ИИ-комментирования — чтобы дать полезный инструмент одновременно и зрителям, и спортивной отрасли в целом. В итоге мы остановились на разработке собственной системы видеоаналитики и профессиональной статистики для спортивных событий. В целом каждый из этих вариантов рабочий, но мы решили написать свою систему видеотрекинга. И вот почему.

У этой технологии довольно обширное применение, ведь речь идёт о данных, которые могут быть интересны не просто людям, интересующимся спортом, но и более широкой аудитории: спортивным комментаторам, аналитикам, авторам разных статистик, спортивным СМИ. Тем более что у нас уже были некоторые готовые наработки по этой теме и необходимые компетенции. 

Мы стали изучать спортивную отрасль и поняли, что в ней есть много видов трекинга. Есть классический GPS-трекинг, когда на игрока надевается метка, которая и помогает отслеживать его перемещение по полю. Есть LPS-системы —  это радиолокационные истории: по периметру игрового поля ставят специальные радары, а на игрока надевают чип.

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

Выбираем вид спорта

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

Кто пользуется нашим решением

Мы выделили четыре основные группы пользователей:

  1. Тренеры и аналитики. Они смотрят эти данные перед игрой, готовят команду к матчу, обсуждают характеристики соперников. К тому же информацию можно использовать и для скаутинга  (просмотр матчей профессиональными аналитиками с целью выявления талантов), чтобы отслеживать результативность игроков с малых лет, а также их развитие.

  2. Зрители и болельщики. Мы выстраиваем очень большое количество данных, и не весь собранный массив интересен людям. Но какие-то вещи могут пригодиться и рядовым зрителям. Например, сколько игрок пробежал километров за матч, какая у него была максимальная скорость и подобное. 

  3. СМИ. Скажем, sports.ru или championat.com делают множество полезных редакционных материалов и насыщают их данными, чтобы людям было интереснее их читать.

  4. Вещатели (например, Матч.тв). Они могут интегрировать данные непосредственно в трансляцию и делать её интерактивной.

Что и как мы трекаем

Мы пообщались с клубами, чтобы понять, что именно и как нам стоит отслеживать и на чём сфокусироваться. Получился вот такой список:

  1. Фитнес и технико-тактические данные. Когда мы говорим про фитнес, то имеем в виду всё, что касается физической активности человека: скорость, дистанция, количество рывков и прочее. Технико-тактические данные — это информация о действиях игрока на поле (пасы, единоборства, голы и всё, что связано с этой активностью).

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

  3. Единая база видео. Необходима, чтобы ретроспективно смотреть за активностью конкретного игрока или оценить, как в среднем команда выступила на протяжении последних матчей.

  4. Трансляции и статистика игр вторых, молодёжных и женских команд. Для примера: в ФК «Краснодар» есть 20 полей, там очень много играют дети от 12 лет и старше, матчей проходит немало, но не все транслируются. А для клуба внутри очень важно отслеживать, как растёт мастерство молодых ребят, чтобы в будущем понимать, как с ними работать, на что обратить внимание.

Наше решение

На данном этапе развития работа нашего спорттех-направления сводится к следующему. 

Как мы оцифровали футбольные матчи с помощью CV - 2

Мы приезжаем на стадион, устанавливаем камеры, обрабатываем полученные данные и передаём их на платформу так, что тренеры могут в реальном времени наблюдать за происходящим на поле. После окончания матча мы выгружаем данные на платформу в течение 24 часов, после чего с ними можно полноценно работать.

Проект вышел многосоставным, в нём принимали участие многие технологические команды Яндекса.

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

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

Этап детекции

Прежде всего надо определить передвигающиеся фигурки на поле именно как игроков. По каждому из них мы строим уникальную траекторию, привязанную к координатам, чтобы понимать, что вот это — Дзюба, а вот там — уже кто-то другой.

Камеры со стадиона передают видео на сервер. Сервер предобрабатывает видео для каждого потребителя в нужном ему формате — например, тренерам важно получать картинку в HD-качестве, в live-режиме, да ещё и панорамную, а компьютерному зрению нужно максимальное качество. Когда компьютерное зрение получает видео, оно производит расчёты и передаёт данные в наш бэкенд, а уже оттуда они уходят в интерфейс тренерам.

Готовим наши камеры к работе

Готовим наши камеры к работе

Давайте немного подробнее поговорим о каждом пункте — начнём с камер. Когда мы их выбирали, то ориентировались на несколько критериев: 

  • камеры снимают в хорошем качестве (минимум — 6K); 

  • ими можно управлять через IP;

  • есть функция стриминга видео через сеть. 

Что касается оптики — мы выбрали объективы с фиксированным фокусным расстоянием. Да, никакого зума, специально. Это нужно, чтобы при обработке не думать о том, как синхронизировать параметры зума с разных камер. Когда фокусное расстояние фиксированное, такой проблемы нет.

Центральные камеры. Это самая удобная точка съёмки на стадионе: отсюда чаще всего транслируют матчи. Самое главное — к этой точке подведены электричество и быстрый интернет

Центральные камеры. Это самая удобная точка съёмки на стадионе: отсюда чаще всего транслируют матчи. Самое главное — к этой точке подведены электричество и быстрый интернет

Зачем нам две центральные камеры и почему не обойтись одной? Если бы мы пользовались одной камерой, то пришлось бы столкнуться с серьёзными неудобствами. Расстояние от камер до поля довольно большое, ведь место съёмки находится на возвышении. Поле тоже большое, более 100 метров, и если снимать всё это только одной камерой, игроки будут казаться очень маленькими. В такой ситуации рассмотреть какие-то конкретные действия с мячом будет нереально. Само собой, можно взять одну 12K-камеру, но даже для неё понадобится широкоугольный объектив, который будет давать искажения. 

Так что наш выбор — две 6K-камеры. Каждая снимает свою картинку, а итог мы потом склеиваем. 

Кстати, под такую установку не было оригинальных креплений, поэтому нам пришлось собрать собственные

Кстати, под такую установку не было оригинальных креплений, поэтому нам пришлось собрать собственные
Заворотные камеры. Чтобы точно не пропустить гол

Заворотные камеры. Чтобы точно не пропустить гол

По одной камере мы располагаем по бокам стадиона. Каждая из них снимает из-за ворот, поэтому они и называются «заворотными». Они помогают в случаях, когда один игрок забегает за другого и его номера не видно при съёмке из центральной точки. Или когда мы отслеживаем движение мяча — он может находиться в воздухе, а на фоне зелёного поля будет непонятно, катится он по какой-то траектории или же летит. Имея больше ракурсов, мы можем собирать больший массив данных для работы.

В таком виде мы отдаём камеры операторам на стадионе

В таком виде мы отдаём камеры операторам на стадионе

Кроме технической настройки камер, мы провели большую работу по обучению операторов. У нас в РПЛ (Российской премьер-лиге) 16 стадионов в работе, везде свои представления о прекрасном и своя квалификация персонала, а нам надо добиться единого уровня качества на выходе. Так что мы написали отдельный трек с подробными мастер-классами и обучающими материалами.

Со стадиона — на сервер

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

Мы перестраховались и заложили в процесс две схемы работы. Во-первых, это офлайн-обработка, когда мы пишем исходное видео на SSD и в случае проблем можем выгрузить его офлайн на наши серверы. Во-вторых, это realtime, когда с интернетом всё хорошо. Сейчас, конечно, стадионов с хорошим интернетом всё больше, поэтому чаще мы пользуемся этой схемой.

Вот как работает схема передачи видео.

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

Изображение на серверы поступает в таком виде

Изображение на серверы поступает в таком виде

Здесь заметно, что углы съёмки разные, а ещё что каждая камера захватывает чужую половину поля. В общем, без предобработки никуда. Каждую половину поля мы размечаем четырьмя точками, используя предиктивные преобразования, и в итоге получаем вот такую панораму, с которой уже можно работать.

Итог предобработки

Итог предобработки

Её можно транслировать в тренерский штаб и отдавать команде компьютерного зрения для дальнейшей обработки.

Считаем статистику

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

Детекция игроков на поле

Детекция игроков на поле

После определения игроков и снятия дополнительных параметров мы переходим к построению треков. По каждому игроку нам надо понять, как он передвигался по полю в течение матча. Здесь важно, чтобы внутри конкретного трека был именно один игрок.

Построение траекторий игроков

Построение траекторий игроков

Выше картинка для примера. Как видите, игрок под номером 7 при пересечении с игроком из своей команды перестаёт быть номером 7 и становится номером 6. Потому что трекинг сбился. 

Мы боремся с подобным несколькими способами. Во-первых, здесь пригождаются те самые дополнительные биометрические данные для распознавания игроков. Во-вторых, у нас есть толокеры, которые находят такие ошибки вручную. Всё это мы учитываем для дообучения модели, минимизируя вероятность таких ошибок в будущем.

Ещё нередки ситуации, когда на поле возникает откровенная куча-мала из нескольких игроков в одном месте. 

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

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

Вот так можно визуализировать результаты нашей работы

Вот так можно визуализировать результаты нашей работы

2D-карта, на которой видно, где в каждый момент находится каждый игрок. Этот вид синхронизирован с видео, где при необходимости можно провалидировать, что это на самом деле тот игрок в нужной точке.

Благодаря большому количеству камер мы видим происходящее на поле в конкретный момент. Собранная таким образом статистика передаётся футбольным клубам. По каждому из игроков можно посмотреть его скорость, пройденное расстояние, количество рывков, время, проведённое в разных скоростных режимах, и многое другое. 

Пример отчёта после матча

Пример отчёта после матча

А ещё, зная координаты, можно строить тепловые карты, которые отражают активность футболиста на поле, зоны, где он чаще всего получал мяч, открывался и боролся с соперником.

Валидация данных

Главный вопрос к таким данным — вопрос доверия. Ведь это не просто данные для красоты — это то, на основе чего тренер будет оценивать результативность игроков, да и самим игрокам такая информация нужна в максимально точном виде. 

Есть несколько подходов к валидации статистики — мы используем три.

Первый мы использовали в самом начале пути, когда делали proof of concept проекта: просто сравнивали наши данные с данными похожих решений конкурентов. Это был пристрелочный способ, чтобы понять, ошибаемся ли мы в разы или в десятки раз.

Второй вариант — идеальный, когда у вас есть какие-то заведомо эталонные решения и вы сравниваете с ними свои результаты. В России есть стадионы, на которых стоят радары. Это очень дорогая в плане установки и обслуживания инфраструктура, зато на выходе получаются максимально точные данные. Мы работаем с клубом, которому принадлежит стадион, и, когда матчи проходят на их поле, можем сравнивать их данные с нашей статистикой на уровне координат каждого игрока. Затем используем итоги сравнения для повышения точности нашей модели.

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

Пример синтетического теста

Пример синтетического теста

В таблице выше — итог одного из таких тестов. Однажды мы приехали на стадион «Спартака» и попросили спортсменов побегать разными способами: по прямой, по диагонали, змейкой, с пересечением траекторий друг друга. На примере вы видите фактическое расстояние (569,5 метра) и расстояние, которое выдал наш пайплайн, — 569,06 метра. Расхождение в 44 сантиметров для систем оптического класса считается очень хорошим результатом.

Небольшое подведение итогов

Мы начали этот проект в феврале 2023 года и довольно быстро прошли путь от идеи до подтверждения факта, что можно быстро сделать хорошее решение и вывести его в прод. Уже в августе мы начали обрабатывать матчи туров Российской премьер-лиги всех топовых команд страны. Пока идём от простого к сложному, итерационно добавляя в продукт новые слои.

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

Из особенностей могу отметить много различных составных частей, они же — потенциальные точки отказа: камеры, железо на стадионе, интернет, серверы и прочее. Поэтому стараемся резервировать всё, до чего дотягиваемся, — у нас много автоматики и мониторингов. И казалось бы, мы уже в проде, и всё уже работает, но сохраняется внутреннее ощущение, что мы ещё в самом начале пути. Мы протестировали realtime-статистику и до конца года хотим уже стабильно уметь обрабатывать её в реальном времени. Это поднимет проект на новый уровень и позволит работать со СМИ и вещателями.

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

Автор: Цуканов Владимир

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js