Распознавание объектов в игре StarCraft 2

Видео для затравки

Решил описать этапы создания программы для распознавания объектов в игре StarCraft 2, с использованием алгоритмов компьютерного зрения (CV).

Программа должна работать поверх, игры принимать на вход скриншот из игры, распознавать на ней объекты и на выходе выдавать название объекта и его координаты.

Пример скриншота из игры

Пример скриншота из игры

Желаемый результат работы программы

Желаемый результат работы программы

Первый взгляд

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

Поскольку объектов в игре очень много, для начала решено было взять для распознавания только объекты зданий и только за расу протосов, таким образом будем распознавать всего 16 объектов зданий.

Итак, будем распознавать следующие объекты:

Второй взгляд

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

Плюсы:

  • Мы работаем с изображениями с экрана компьютера, они всегда одинаковых цветов, на них не влияет например время суток или освещение, как было бы если бы мы работали с фотографиями реального мира.
  • Здания неподвижны
  • Здания стоят примерно в одном ракурсе, нельзя повернуть здание например на 90 градусов вокруг своей оси.

Минусы:

  • Здания хоть и неподвижны, однако некоторые из них имеют подвижные части, чтобы отобразить что в здании идет какой-то процесс (анимация движения)
  • Здания хоть и стоят под одним и тем же углом, тем не менее этот угол автоматически меняется при перемещении камеры игроком
  • Здание может быть частично перекрыто другим зданием или юнитами, или текстом
  • Здания могут иметь различный фон, т.к. в игре есть много разных типов грунта, на которых может быть построено зданием, то получается и часть этого грунта попадает на изображения, что делает их разными
  • Здания отличаются по размерам и форме, некоторые большие, некоторые меньше, значит нужно делать resize к какому-то одному размеру, чтобы подавать на вход сети одинаковые изображения.
  • Некоторые здания являются модификациями других зданий, таким образом получается, что они очень похожи, но являются разными зданиями.
  • Часть цветов здания отличаются в зависимости от цвета игрока (чтобы можно было отличить свои от чужих)

Несколько примеров сложностей:

Одно и то же здание с разных ракурсов
Трансформация одного здания в другое. Выглядят похожими, но это разные здания
Анимация здания, одно и то же здание.
Здание перекрыто другим объектом

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

В следующей статье опишу программу для поиска областей с индикаторами здоровья.