Решил описать этапы создания программы для распознавания объектов в игре StarCraft 2, с использованием алгоритмов компьютерного зрения (CV).
Программа должна работать поверх, игры принимать на вход скриншот из игры, распознавать на ней объекты и на выходе выдавать название объекта и его координаты.
Пример скриншота из игры
Желаемый результат работы программы
Первый взгляд
При первом взгляде на игру видим, что у всех объектов в игре сверку есть индикатор здоровья, решив задачу поиска этих областей мы сможем упростить задачу от object decetion (когда вся картинка подается на вход сети и на выходе получаем области в который есть предполагаемые объекты) до простой классификации изображений (на вход сети подается изображение, на выходе получаем какого класса это изображение).
Поскольку объектов в игре очень много, для начала решено было взять для распознавания только объекты зданий и только за расу протосов, таким образом будем распознавать всего 16 объектов зданий.
Итак, будем распознавать следующие объекты:
Второй взгляд
При втором взгляде, выделим какие есть плюсы (облегчающие процесс) и минусы (усложняющие процесс).
Плюсы:
- Мы работаем с изображениями с экрана компьютера, они всегда одинаковых цветов, на них не влияет например время суток или освещение, как было бы если бы мы работали с фотографиями реального мира.
- Здания неподвижны
- Здания стоят примерно в одном ракурсе, нельзя повернуть здание например на 90 градусов вокруг своей оси.
Минусы:
- Здания хоть и неподвижны, однако некоторые из них имеют подвижные части, чтобы отобразить что в здании идет какой-то процесс (анимация движения)
- Здания хоть и стоят под одним и тем же углом, тем не менее этот угол автоматически меняется при перемещении камеры игроком
- Здание может быть частично перекрыто другим зданием или юнитами, или текстом
- Здания могут иметь различный фон, т.к. в игре есть много разных типов грунта, на которых может быть построено зданием, то получается и часть этого грунта попадает на изображения, что делает их разными
- Здания отличаются по размерам и форме, некоторые большие, некоторые меньше, значит нужно делать resize к какому-то одному размеру, чтобы подавать на вход сети одинаковые изображения.
- Некоторые здания являются модификациями других зданий, таким образом получается, что они очень похожи, но являются разными зданиями.
- Часть цветов здания отличаются в зависимости от цвета игрока (чтобы можно было отличить свои от чужих)
Несколько примеров сложностей:
Как видим сложностей гораздо больше, чем вещей упрощающих распознавание. Что ж, тем интереснее будет решать данную задачу.
В следующей статье опишу программу для поиска областей с индикаторами здоровья.