Pull to refresh
13
0
Андрей Райц @DrReiz

Архитектор ИИ

Send message

Бот для аркады. Часть №2: подключаем OpenCV

Reading time 12 min
Views 41K

Введение

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

Для обработки изображений возьмем широкораспространенную библиотеку OpenCV. Она неродная (unmanaged) для .net, поэтому подключим ее через wrapper OpenCvSharp.

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


Затрагиваемые темы: выбор библиотеки для обработки изображений, выбор wrapper-а для работы с OpenCV, основные функции OpenCV, выделение движущихся объектов, цветовая модель HSV.


Читать дальше →
Total votes 28: ↑25 and ↓3 +22
Comments 11

Бот для DirectX-аркады. Часть №1: устанавливаем контакт

Reading time 9 min
Views 35K

Введение

imageКаждый, играя, хоть раз думал: «вот бы написать программу, которая играла бы за меня!». Но обычно эта мысль, так мыслью и остается… Постоянно что-то мешает: незнание с чего начать, страх перед неподъемностью задачи, шепоток из-за левого плеча «и зачем это? кому это надо, чтобы программа играла с программой?» и т.д.

В данном цикле статей я собираюсь показать, что, во-первых: «не так страшен черт, как его малюют», а во-вторых: позже собираюсь ответить и на вопрос: «зачем это надо?».

Сейчас начнем с простого. С установления взаимосвязи между игрой и программой-игроком (ботом). В качестве подопытного кролика берется широкоизвестная игра Zuma.

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

Основная цель этой статьи: получить программу, которая самостоятельно раз за разом заходит в игровой процесс, там что-то делает, а при game over-е начинает всё заново. Далее этот каркас будет развиваться в направлении, чтобы бот всё дальше и всё дольше продержался в игре до game over-а.


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

Читать дальше →
Total votes 35: ↑30 and ↓5 +25
Comments 12

Почему сравнение «ведет себя как робот» по смыслу означает «ведет себя как дурак»?

Reading time 3 min
Views 7K
Сравнивая человека с роботом (или автоматом) мы при этом подразумеваем, что поведение такого человека описывается слепым алгоритмом: человек механистически выполняет набор действий, не ставя перед собой вопросы «зачем эти действия выполняются?» и «почему ожидается, что эти действия приведут к ожидаемому результату?».

Почти все программы ведут себя подобным механистическим образом. Но ведь есть и другой подход.

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

Читать дальше →
Total votes 20: ↑6 and ↓14 -8
Comments 26

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity