Эта статья воспроизводится с разрешения автора Anjie Идеи алгоритмов и коды в статье предназначены только для академического обмена.
Оригинал: https://zhuanlan.zhihu.com/p/32636329
В последнее время мини-игра WeChat, можно сказать, популярна по всей стране.От детей до больших детей, кажется, что все свайпают и прыгают.Программисты ИИ, мы думаем,можно ли нам играть в эту игру с искусственным интеллектом( AI) и методы компьютерного зрения (CV)?
Поэтому мы разработали алгоритм WeChat Jump Auto-Jump, который переопределяет правильную позу для игры в прыжки и прыжки.Наш алгоритм не только намного превосходит человеческий уровень, но также намного превосходит скорость и точность, которые использовались до сих пор. Все известные нам алгоритмы можно назвать современными.
Руководство по установке AutoJump см. в репозитории GitHub: https://github.com/Prinspield/Wechat_AutoJump.
Ниже мы подробно опишем наш алгоритм.
Первым шагом алгоритма является создание снимка экрана мобильного телефона и управление сенсорным управлением мобильного телефона.Наш репозиторий github подробно описывает методы настройки для мобильных телефонов Android и IOS.
Вам просто нужно подключить телефон к компьютеру и следовать инструкциям, чтобы завершить настройку. После того, как вы сделали снимок экрана, это простая визуальная проблема. Все, что нам нужно найти, это положение злодея и центр стола, куда нам нужно прыгнуть дальше.
Как показано на рисунке, зеленая точка представляет текущую позицию злодея, а красная точка представляет целевую позицию.
Многомасштабный поиск
Есть много способов решить эту проблему.Для того, чтобы попасть в список быстро и быстро, метод, который я использовал в начале, был многомасштабным поиском. Я случайно нашел картинку и вырезал злодея, как показано ниже.
Кроме того, я заметил, что размер злодея немного отличается в разных положениях экрана, поэтому я разработал многомасштабный поиск, сопоставил разные размеры и, наконец, выбрал тот, у которого самый высокий показатель достоверности.
Пример кода для многомасштабного поиска:
Давайте попробуем.Эффект неплохой.Надо сказать,что быстро и хорошо.За все свои эксперименты я ни разу не ошибся в поиске злодеев. Однако нижняя центральная позиция здесь не является позицией оппонента, реальная позиция находится над ней.
Таким же образом можно искать целевую столешницу, но нам нужно собрать несколько разных столешниц, таких как круглая, квадратная, мини-маркет, крышка люка, призма и так далее. Из-за большого количества и многомасштабных причин скорость будет снижена. В это время нам нужно найти способ ускориться.
Прежде всего, можно заметить, что целевая позиция всегда выше позиции злодея, поэтому смысл операции состоит в том, чтобы отбросить часть ниже позиции злодея после обнаружения позиции злодея, что может уменьшить пространство поиска. Но этого мало, нужно дальше копать историю в игре. Злодей и целевой стол в основном расположены симметрично относительно центра экрана. Это дает очень хорошую идею, чтобы сузить пространство поиска. Предположим, что разрешение экрана (1280, 720), положение низа злодея (h1, w1), тогда положение симметричной точки относительно центра (1280 - h1, 720 - w1), край с центром в этой точке. Внутри квадрата длиной 300, если мы перейдем к многомасштабному поиску целевой позиции, он снова будет точным.
Эффект показан на рисунке ниже: синее поле — область поиска (300, 300), красное поле — искомая таблица, а центр прямоугольника — координаты целевой точки.
Быстрый поиск
Игра в игры требует внимательного наблюдения. Мы можем обнаружить, что если злодей прыгнул в центр стола в прошлый раз, в следующий раз в центре целевого стола будет белое пятно, как на только что показанном рисунке. Более внимательный человек обнаружит, что значение RGB точки белого равно (245, 245, 245), что позволяет мне найти очень простой и эффективный способ, заключающийся в непосредственном поиске этой точки белого и обнаружении, что точка белого является связанной областью, количество пикселей со значением пикселя (245, 245, 245) стабильно между 280-310, поэтому мы можем использовать это, чтобы напрямую найти местоположение цели. Этот метод можно использовать только при прыжке в центр в предыдущий раз, но это не имеет значения, мы можем попробовать этот метод, который не требует времени каждый раз, и больше не рассматривать многомасштабный поиск.
На данный момент наш метод работает очень хорошо, по существу, как вечный двигатель. Ниже приведено состояние игры с моим мобильным телефоном около полутора часов и прыжков 859 раз.Наш метод правильно рассчитал позицию и целевую позицию злодея, но я выбрал собаку, потому что карта мобильного телефона больше не хорошо. .
Вот пример видео:
Это заканчивается здесь? Так в чем же разница между нами и игроками-любителями? Теперь введите серьезное академическое время, мирные жители, пожалуйста, быстро эвакуируйтесь!
Модель CNN от грубой к точной
Учитывая, что устройства IOS ограничены схемой захвата экрана (снимки экрана, полученные WebDriverAgent, сжаты, пиксели изображения повреждены и больше не являются исходными значениями пикселей. Причина неизвестна, и друзья, которые разбираются в деталях, могут предложить улучшения~) Быстрый не может быть использован.-поиск, и для совместимости с устройствами с несколькими разрешениями мы используем сверточные нейронные сети для создания более быстрой и надежной модели обнаружения целей.Следующие четыре части знакомят с нашим сбором данных и предварительной обработкой, грубая модель, точная модель и каскадный алгоритм.
Сбор и предварительная обработка данных
На основе наших очень точных моделей многомасштабного поиска и быстрого поиска мы собрали 7 экспериментальных данных, всего около 3000 скриншотов, каждый скриншот помечен целевой позицией, для каждого изображения мы провели два разных метода предварительной обработки, которые используются для обучения грубая модель и точная модель соответственно Ниже представлены два различных метода предварительной обработки.
Предварительная обработка данных грубой модели
Так как реально значимая для текущего суждения область в каждом изображении находится только в центре экрана, то есть там, где находится человек и целевой объект, то верхняя и нижняя части каждого снимка бессмысленны, поэтому будем collect Результирующее изображение размером 1280*720 обрезается на 320*720 вверх и вниз по оси x, и в качестве обучающих данных сохраняется только центральное изображение размером 640*720.
Мы заметили, что в игре каждый раз, когда злодей падает в центр мишени, в центре следующей мишени появляется белая точка.
Учитывая, что быстрый поиск в данных обучения будет генерировать большое количество данных с белыми точками, чтобы предотвратить вмешательство белых точек в обучение сети, мы выполнили операцию удаления белых точек на каждом изображении, Конкретный метод заключается в использовании окружающие белые точки Пиксели сплошного цвета заполняют область белых точек.
Предварительная обработка данных точной модели
Для дальнейшего повышения точности модели мы установили набор данных для тонкой модели.Для каждого изображения в обучающем наборе в качестве обучающих данных был перехвачен фрагмент размером 320*320 вблизи целевой точки.
Чтобы сеть не научилась тривиальным результатам, мы добавляем к каждому изображению случайное смещение в 50 пикселей. Данные точной модели также удалены.
Грубая модель
Мы рассматриваем эту проблему как проблему регрессии, в грубой модели используется сверточная нейронная сеть для регрессии положения цели.
После десяти часов обучения грубая модель достигла точности 6 пикселей на тестовом наборе, а фактическая точность теста составила около 10 пикселей, вывод на тестовой машине (MacBook Pro Retina, 15 дюймов, середина 2015 г., 2,2 ГГц Intel Core i7) Время 0,4 секунды. Эта модель может легко набрать более 1000 баллов, что далеко за пределами человеческого уровня и большинства автоматических алгоритмов, и этого достаточно для повседневного развлечения, но если вы думаете, что на этом мы остановимся, то вы очень ошибаетесь~
Прекрасная модель
Структура тонкой модели аналогична грубой модели, но параметры немного больше.Точная модель используется в качестве операции уточнения грубой модели.
После десяти часов обучения точность тестового набора точной модели достигла 0,5 пикселя, фактическая точность теста составила около 1 пикселя, а время вывода на тестовой машине составило 0,2 секунды.
Cascade
Общая точность составляет около 1 пикселя, а время — 0,6 секунды.
Суммировать
В ответ на эту проблему мы используем технологии AI и CV, чтобы предложить комплексное решение, подходящее для устройств IOS и Android. Пользователи с небольшим техническим опытом могут успешно настроить и запустить. Мы предлагаем Multiscale-Search, Fast-Search, CNN Coarse-to -Три три алгоритма для решения этой проблемы, три алгоритма взаимодействуют друг с другом, могут обеспечить быстрый и точный поиск, прыжок, пользователи могут настроить параметры прыжка для своего собственного оборудования, чтобы они были близки к реализации «вечного движения». Говоря об этом, кажется, мы можем объявить, что наша работа прекратила эту проблему, и мини-игра WeChat перескакивает через игру!
Дружеское напоминание: Умеренные игры полезны для мозга, пристрастие к играм вредит телу, удовольствие от технических средств заключается в самой технологии, а не в рейтингах игр Надеюсь, вы отнесетесь к рейтингам игр и технологиям, предложенным в этой статье. рационально и используйте игры, чтобы развлечь свою жизнь.
Заявление: Алгоритм и открытый исходный код, предложенные в этой статье, соответствуют соглашению об открытом исходном коде MIT, и все последствия использования алгоритма в коммерческих целях должен нести сам пользователь.
В статье о глубоком обучении рекомендуется очень мощный материал «Понимание глубокого обучения за 1 день», написанный профессором Ли Хунъи из Тайваня, и ответы официального аккаунта на «Глубокое обучение» для загрузки.
Рекомендуемое чтение:
-
Внедрение сканера общедоступных учетных записей WeChat на основе Python для анализа данных
-
В 2017 году спасибо, а в 2018 году мы продолжим усердно работать
-
10 наиболее часто задаваемых вопросов об управлении списками Python
Следуйте дзен Python и немного изучите Python
перейти кGitHubадрес