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

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

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

Run AI - первая мобильная игра с компьютерным зрением без рук. Это дает игрокам новый игровой опыт, позволяя им управлять игровым объектом, поворачивая голову.

Важно: мы никуда не храним и не отправляем изображения (или любые другие данные) с телефонов игроков. Он используется исключительно для обеспечения основной механики игры.

Пост будет охватывать следующие темы:

1. Идея и мотивация
2. Разработка
3. Публикация
4. Заключение

1. Идея и мотивация

Хотя бы время от времени каждому нужно убить время, стоя в очереди или ожидая лифта. Распространенный способ сделать это - играть в мобильные игры.

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

Есть несколько причин, по которым эти два взрывающихся поля почти не пересекаются друг с другом. Например, разработчики игр хотят, чтобы их ИИ-персонажи вели предсказуемое поведение, чего может быть трудно достичь с помощью обучения с подкреплением, используемого для разработки агентов ИИ. Таким образом, нашей мотивацией было стимулировать интерес к машинному обучению в области разработки игр и создать тенденцию к отказу от старой механики.

Под «мы» я имею в виду меня и Андрея Бабаева - моего коллегу - еще одного Data Scientist из Roonyx. Без него я бы не справился.

2. Развитие

2.1. Машинное обучение в играх с Unity

Мы исследовали различные способы использования машинного обучения в Unity:

  1. Barracuda - кроссплатформенный фреймворк для запуска нейронных сетей в формате ONNX в Unity с использованием как CPU, так и GPU
  2. Создать собственную версию OpenCV для C #
  3. Купить готовые пакеты OpenCV и Dlib в Unity Asset Store

С помощью Barracuda вы можете запускать сложные модели глубокого обучения для компьютерного зрения или любой другой задачи. Однако мы хотели, чтобы наше приложение было как можно более дешевым с точки зрения вычислений, чтобы люди со старыми моделями смартфонов могли им пользоваться.

Мы решили поближе познакомиться с комбинацией OpenCV + Dlib. Он показал нам лучшую производительность для нашей задачи (в среднем почти в 3 раза больше FPS по сравнению с моделями ONNX с Barracuda).

Важно отметить, что пакет OpenCV для Unity позволяет использовать как легкие модели каскадов Хаара, так и модели глубокого обучения, разработанные в TensorFlow, Caffe и других фреймворках, которые обеспечивают преобразование в ONNX.

Мы знали, что этот вариант сэкономит нам массу времени, поэтому решили придерживаться его вместо создания нашей версии библиотек для C #.

2.2. Трубопровод

Для специалиста по данным предоставить мобильное приложение или игру с моделями машинного обучения с Unity значительно проще, чем с чем-либо еще, о чем мы знаем. Учитывая популярность платформы среди разработчиков игр, мы решили, что Unity - правильный выбор.

На высоком уровне наш процесс разработки включал следующие этапы:

  1. Придумываем основную механику. Никто не может позволить себе беспокоиться о дизайне UI / UX или о чем-то в этом роде, если у него нет забавной и увлекательной основной механики.
  2. Установка Unity, создание проекта и сцены.
  3. Импорт пакетов OpenCV и Dlib из Unity Asset Store.
  4. Создание скриптов запуска моделей на изображениях с фронтальной камеры. Пакеты поставляются с исчерпывающими примерами кода.
  5. Привязка вывода скрипта к поведению игрового объекта. Вам нужно настроить атрибуты объекта из другого скрипта.
  6. Полировка - добавление UI, иконки, звуков и т.д., настройка параметров. Вы можете найти множество бесплатных высококачественных ресурсов либо в Unity Asset Store, либо на других платформах, таких как cgtrader.com.
  7. Добавление SDK - любые внешние инструменты, которые вы, возможно, захотите добавить в свою игру (например, инструменты аналитики), имеют собственный SDK. В большинстве случаев его легко интегрировать. Используйте документацию к соответствующему инструменту.

За переходом от одного шага к другому следовала серия сеансов тестирования.

3. Публикация

В этом разделе мы поступим так же, как и раньше. Я думаю, что может быть полезно понять процесс публикации, прежде чем брать на себя какие-либо обязательства. Итак, позвольте мне рассказать вам, как нам удалось, шаг за шагом, опубликовать нашу игру в Google Play:

  1. Создание учетной записи разработчика. Требуется единовременный платеж в размере 25 долларов США. После этого вы сможете добавлять, публиковать и поддерживать проекты в консоли Google Play.
  2. Создание представления списка магазинов. Это включает добавление значка, заголовка, описания, снимков экрана и т. Д. Отнеситесь к этому шагу серьезно, потому что непривлекательный значок может значительно повлиять на коэффициент конверсии.
  3. Юридический. На этом этапе вам как издателю необходимо защитить себя от юридических проблем. Он включает в себя анкету для определения возрастного рейтинга, добавления политики конфиденциальности, условий использования и т. Д.
  4. Тестирование. Это не обязательно для публикации, но настоятельно рекомендуется проводить тесты с доверенными пользователями. Вы можете настроить внутренние, закрытые или открытые тестовые треки. Здесь вы можете узнать, чем они отличаются.
  5. Жду обзора. Когда вы загружаете свой пакет - особый формат публикации Google - вам нужно подождать, пока он не будет рассмотрен. В нашем случае на это ушло четыре дня.

По сути, это все, что вам нужно, но вкратце я хочу упомянуть дополнительные инструменты, которые мы решили использовать.

Сервисы Google Play - замечательный инструмент, который мы использовали, в частности, для добавления таблицы лидеров в нашу игру.

Firebase - еще один продукт Google, который помогает людям добавлять аналитику в свои проекты. С его помощью вы можете узнать, что работает для вашей аудитории, а что нет, и определить направление для дальнейшего улучшения.

4. Вывод

Разработка игры - непростое дело. Нам потребовалось три месяца, чтобы сделать так, как мы хотели. И мы все еще в процессе. Я хочу дать вам несколько практик, которые мы использовали, и те, которые мы должны были использовать в процессе:

  1. Основная механика. Как я упоминал ранее, он должен быть ясным, и в него должно быть весело играть. Между прочим, это не моя идея.
  2. Соберите отзывы как можно скорее. В идеале ваши тестировщики должны быть из вашей целевой аудитории. Вы можете найти их, например, на форумах или в чатах.
  3. Установите крайние сроки и расставьте приоритеты задач. Сроки сэкономят вам много времени и помогут сосредоточиться. Приоритизация задач поможет в первую очередь устранить самые высокие риски, чтобы избежать огромной траты времени, если что-то пойдет не так, как ожидалось.
  4. Если вы работаете в команде, у вас должно быть четкое распределение обязанностей, чтобы каждый член команды знал, что им делать дальше.

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