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

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

Но обо всем по порядку, и давайте проверим, как здесь работает отслеживание мяча. Дрон несет камеру с подвесом, который поглощает движения дрона.

Видео с камеры выглядит совершенно стабильно, но мой подход, основанный на удалении фона, здесь не удался:

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

Для сравнения - аналогичное статичное видео с удаленным фоном выглядит так:

Так что нам ничего не остается, как искать новые пути. К счастью, OpenCV - старая и богатая библиотека, в которой нужно проверить множество алгоритмов.

Раньше у меня был опыт работы с Canny edge для поиска объектов по их контурам.

      gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
      gray = cv.GaussianBlur(gray, (5, 5),0)
      mask = cv.Canny(gray, 50, 100)

Применение этого алгоритма к видео с дрона дает многообещающие результаты:

Как видно, мяч распознается и отслеживается. Интересно, что Canny дает худшие (чем удаление фона) результаты на действительно статичных видео, поэтому мы не можем использовать его везде. Это можно объяснить тем, что Кэнни распознает множество фоновых объектов, и мяч может потеряться при полете.

Затем удалите фон на изображении с фильтром Canny:

      mask = backSub.apply(frame)
      mask = cv.dilate(mask, None)
      mask = cv.GaussianBlur(mask, (15, 15),0)
      ret,mask = cv.threshold(mask,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)

Выглядит лучше:

Трек подачи теперь довольно точен:

Еще мои статьи о волейболе и компьютерном зрении





Репозиторий Github