Найти тему

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

Оглавление

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

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

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

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

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

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

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

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

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

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

-3
-4

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

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

Плюсы:

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

Минусы:

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

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

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

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

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