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

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

Минчанин Константин Келлер создал сервис автоматической нарезки интересных игровых моментов из стримов, а потом переключился на распознавание скинов в «стрелялках». Но технологию не удалось довести до ума, и два уникальных сервиса пришлось заморозить. Константин рассказал в интервью Dev.by, что пошло не так и почему он не стал применять свои технологии в рекламе или порноиндустрии.

Читать далее…

Виртуальные матчи реальных спортсменов

Всё началось с моего увлечения видеоиграми и стримингом. Я разрабатывал приложение, которое позволяло играть в фэнтези-киберспорт. В Америке фэнтези-спорт пользуется совершенно сумасшедшей популярностью. Эта миллиардная индустрия зародилась где-то в 2006–м. Например, любишь ты баскетбол. Ты можешь собрать виртуальную команду игроков, которые в реальности будут играть в эти дни какие-то матчи, и соревноваться с такими же, как и ты, юзерами с их виртуальными командами — на основании тех очков, которые реальные игроки наберут в своих матчах. Можешь задрафтить себе Стефена Карри, Леброна Джеймса и, если они хорошо играют, ты наберёшь много очков.

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

Я придумал название Fansy: это от слова Fantasy, я игрался с формами, искал что-то компактное, ёмкое — вот и получилось «фэнси». И слово не было занято ещё. На самом деле, над названием долго не думали.

Мы начали эксперименты: оказалось, что вручную хайлайты вырезать тяжело, долго и дорого. Искали способ сделать это дёшево и быстро. В конце 2015 года в ряде штатов фэнтези-спорт приравняли к азартным играм, что привело к необходимости получать лицензию в каждом штате, где у тебя есть пользователи, — и мы работу над проектом остановили.

Если есть убийство — значит, интересно

Где-то через год, в декабре 2016-го, в Минске проходил AI-хакатон. Еще до него я создал пост на «Сабреддите Твитча» и спросил стримеров, нужен ли им сервис, который за них станет нарезать хайлайты. Если пост наберет сто апвотов — мы попробуем сделать прототип. Пост набрал несколько сотен апвотов и положительных комментариев всего за несколько часов.

Я стал искать разработчиков и по счастливой случайности познакомился с Сергеем. Он тогда жил в Ростове, работал в местном НИИ и преподавал компьютер-вижн. В тот момент он занимался похожей идеей для реального спорта. Мы начали обсуждать идею и решили разрабатывать продукт для киберспорта, для игр. Сергей прилетел на хакатон, мы впервые увидели друг друга и за 48 часов сделали прототип, который даже смог более-менее приемлемо нарезать хайлайты.

Видеоролики — это такие чёрные ящики интернета: нет возможности автоматически проиндексировать содержимое, добавить разметку либо сделать навигацию. Для компьютера это всего лишь набор пикселей. С появлением видеостриминга проблема стала ещё более актуальной: за 5 лет на платформе Twitch было создано около миллиарда часов игрового видеоконтента, который мало популярен — потому что по нему невозможна навигация.

Мне хотелось сделать сервис, который будет «понимать» игровые видео: научится определять, что это за игра и какие в ней ключевые события. Как оказалось, до нас никто ничего подобного не делал. Были компании, которые смотрели не на видео, а на поток данных. Они брали реплей, в котором были данные обо всех событиях, оцифровывали его, превращали в видео и размечали. То есть, они использовали не компьютер-вижн, а файл реплея с метаразметкой и данными. В гаражах эту идею с компьютер-вижном на коленке пилили около полудесятка людей, но они не выходили с ними и по разным причинам забрасывали.

Мы изучали вопрос и выяснили, что у топовых стримеров есть профессиональные видеоредакторы, которые за них делают всю работу: просматривают по много часов видео в день, находят самые интересные моменты и делают из них нарезки. И в большинстве случаев редактору принадлежит канал: стример платит ему какие-то деньги за монтаж, а весь доход с рекламы от просмотров тоже забирает видеоредактор. А стримеры с меньшей аудиторией делают это сами вручную либо же вообще не занимаются своими Ютуб-каналами. У большинства стримеров нет хороших каналов, там в лучшем случае быстро срезанные записи: «Вот я выложил 5-часовой стрим, смотрите».

Мы начали с League of Legend: около 80% всей аудитории сосредоточено вокруг 8-10 самых популярных игр. Так что мы взяли самую популярную: месячная аудитория там около 110 миллионов. Плюс она очень зрелищная, по ней проходят киберсоревнования, как и по «Доте» и «Каунтер Страйку», — за этими играми интересно смотреть. А поскольку я сам играю в «ЛоЛ», то понимаю, что там и как.

Когда я думал, как решить задачу, то видел три возможных варианта: анализировать на уровне клиент-сервер, брать данные из официальных API игры либо использовать компьютерное зрение. Универсальным вариантом оказалось именно компьютерное зрение. Сначала надо распознать игру, а потом распознать в ней разные события. Является ли видео игрой? Если да — то какой именно? Можно предположить, что в нужных нам играх для изображения характерен особый визуальный паттерн, который можно получить из численного представления гистограммы изображения. Используя эти данные, можно обучить классификатор.

В целом в играх интересные моменты строятся вокруг ключевых событий — например, убийств. И если было убийство — значит, момент точно был интересным. Вопрос в том, как выбрать точку начала и конца этого хайлайта. Как в футболе: все знают, что интересны голы, ещё иногда интересны пасы — их можно отследить.

Для распознавания самих событий можно использовать до пяти источников информации:

1.    Визуальные маркеры (движение персонажей, визуальные эффекты);

2.    Аудиомаркеры (звуки событий, выстрелов, заклинаний);

3.    UI-элементы (счёт, текстовый либо графический лог событий);

4.    Лог чата стриминг-платформы;

5.    Эмоции стримера (распознание речи и эмоций, если используется веб-камера).

Четвёртый и пятый источники лишь косвенно указывают на наличие события, но зато могут выступать маркерами значимости момента.

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

Но сложно определить, в какой момент начать вырезание. Иногда нужно брать не само убийство и даже не эпизод за пять секунд до убийства: бывает, кто-то кого-то преследует секунд двадцать и только потом убивает, — интересна вся сцена целиком. Для хакатона мы проанализировали, сколько в среднем занимает одна такая сцена — и на такой длительности остановились. Самые интересные моменты в «ЛоЛе» длятся 7-15 секунд, а крупные тим-файты — 30-40 секунд. Средняя игра длится 30-40 минут, и нарезка самых интересных моментов получалась на 5-10 минут, включая в себя 15-40 хайлайтов.

Нарезаю стримы: доллар за ведро

Ещё нужно было дать ответ на вопрос, где производить анализ и распознание видео: локально, на компьютере пользователя, или на сервере? Продуктам вроде MSQRD и Fabby критически важно переносить обработку фото/видео на мобильник пользователя. Для нас же ситуация была обратной. В связи с тем, что компьютер пользователя уже занят двумя очень тяжёлыми процессами — рендерингом игры и трансляцией стрима — добавление процессов декодирования и распознания привело бы к уменьшению fps в игре. А перенос алгоритмов распознания в облако не требовал от пользователя устанавливать наше ПО и давал возможность анализировать уже загруженные в сеть видео.

Тогда на хакатоне мы даже не попали в тройку лидеров. Начали ресерчить дальше и смотреть, что из этого можно сделать. Надо было проверить: как дорого будет стоить обработка одной минуты стрима? Популярный стример играет каждый день примерно по 6–8 часов, допустим, 25 дней в месяц, — итого около 175 часов. И если выйдет, что только на оплату серверов для каждого стримера надо будет платить 20-30-40 долларов — то эти же деньги лягут на плечи самих стримеров. А мы хотели выяснить: сможем ли мы сделать обработку стримов настолько дешёвой, чтобы для части стримеров вообще предложить бесплатную модель?

Для обработки видео мы стали использовать AWS EC2 spot instances: начали с версии m3.2xlarge и спускались вниз, к более дешёвым версиям, анализируя производительность. В итоге оказалось, что для обработки стрима в 1.080p достаточно инстанса t2.large. Цена на него колебалась в районе 3 центов в час. То есть, себестоимость поддержки топового стримера с точки зрения лишь работы оборудования составляла бы примерно 5 долларов в месяц, что уже позволяло нам дальше продолжать ресерч.

Чтобы сервера не простаивали в моменты, когда стример спит, мы написали микро-сервис, который следил за онлайн-статусом Twitch-каналов и запускал инстанс только в момент, когда начиналась трансляция. В команде этот микро-сервис получил прозвище Саурон.

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

Я подался на все местные конкурсы, что проводились: Imaguru проводил стартап-сауну и питч-батл от «Логина» (это крупная литовская конференция), и, соответственно, был венчур-дей. Мы тогда выиграли Venture Day, отобрались в весенний батч Startup Sauna и выиграли поездку на Login.

Следующей целью был прототип продукта, который можно тестировать на стримерах. Но мы начали понимать, что на SaaS-модели много не заработаешь. Весь рынок стримеров — это несколько сотен тысяч человек, но 90% аудитории сосредоточено у нескольких тысяч стримеров. Это хороший бизнес, но это не стартап: потенциальный размер рынка всего лишь пара тысяч стримеров, а не пара сотен тысяч. Мы решили ещё немного переформатировать продукт.

Хочу вот эту пушку

Если смотришь трансляцию «ЛоЛа» и видишь классный скин, то хочется купить его себе. Но сходу у зрителя нет информации, что это за скин — точно так же, как у телезрителя нет информации, что за бутсы носит футболист на экране. Скинов в игре несколько сотен, причем зритель ищет и покупает их только после просмотра стрима — соответственно, конверсия ниже. И мы решили, что надо научиться распознавать эти скины и предлагать зрителю возможность прямо сейчас отложить их в корзину, чтобы после окончания просмотра купить. Это хороший способ дополнительной монетизации как для платформы, так и для стримера.

Мы начали изучать рынок скинов и выяснили, что он очень большой. В 2016 году 160 миллионов геймеров потратили 6 миллиардов долларов на скины и вэнити-айтемы. Сумасшедший рынок! Начали думать, как его увеличить, как договориться с паблишерами. Сначала мы запустили на Ютубе прототип для тестирования конверсии. Обычный ролик, в конце которого были ссылки на покупку скинов из видео. Конверсия оказалась неплохой. Тогда мы обзвонили владельцев всех нишевых стриминговых платформ с предложением проинтегрировать прототип для тестирования; многие заинтересовались.

Выглядело бы это так. Ты смотришь какой-то стрим и видишь классный хайлайт: человек из «калаша» убивает пятерых, и у него какой-то сумасшедший зелёный скин. Тебе интересно — что это? Под стримом у тебя небольшой блок — это наш виджет, который встроен в дизайн сайта, как будто это фича самого сайта. Наводишь на блок — и тебе показывается: это такой-то скин, стоит столько-то, и тут же кнопка «Купить». ОК, думаешь ты, отложу в корзину и вернусь к этому позже. У тебя эта информация сохранилась, ты можешь не отвлекаться от стрима и ты знаешь, что в конце трансляции ты сможешь пересмотреть в корзине все скины, что встретились тебе во время матча, и купить какой захочешь.

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

Алгоритм распознания не зависит от платформы. Мы забираем стрим с платформы точно так же, как будто его забирает компьютер пользователя, анализируем его и возвращаем данные. Это могло бы работать и на консолях, но, как мне кажется, самые интересные конверсии были бы только на компьютерах. Отчасти потому, что на консолях нет таких крутых ММО и competitive-игр, на которых скины продаются такими объемами и у которых такое же внимание со стороны стриминга. То есть, это были бы «писишные» игры: Dota, LoL, Counter Strike, PUBG и так далее. Нам нужно лишь проинтегрировать свой виджет.

С шопами, которые продают эти скины, мы договорились о реферальной программе по следующей схеме: от покупки в 10 долларов примерно 10-15% доставалось бы нам. Из этой суммы 70% уходило бы самой платформе, оставшиеся 30% — непосредственно Fansy. По сути, похоже на Google AdWords. Но, конечно, мы понимали, что очень крупным платформам вроде Twitch, Douyutv или Beam в долгосрочной перспективе не выгодно делиться с нами комиссией. Посмотрев на работу нашего виджета и на конверсию, они бы просто купили нас.

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

«ЛоЛ» и «Танки» не продают свои скины через third party marketplaces, они продают только через свой маркетплейс. И шансы, что мы уговорим «ЛоЛ» делиться с нами комиссией с продажи, очень сомнительны. Но если бы мы договорились с Twitch, то потом, используя их имя и команду, могли бы уже зайти в «ЛоЛ» и договориться с ними о продажах. Потенциально к этим шести миллиардам долларов рынка мы бы могли добавить пару-тройку процентов.

Но гораздо сложнее, чем договориться, оказалось научиться распознавать эти скины. Это уже не просто сцены для нарезки хайлайтов — тут надо опознавать сам 3D-объект разных цветов, с разными фонами, в разных проекциях, — задача намного сложнее. Следующие три месяца Сергей работал над прототипом, а я общался с владельцами магазинов скинов, с паблишерами, со стриминговыми платформами.

Примерно с конца мая до середины июля мы этим занимались, между итерациями проходило по нескольку недель. А где-то к июлю 2017 года третья итерация алгоритма распознавания показала, что мы не можем делать распознавание объекта с достаточным качеством.

Мы не смогли обеспечить 99% распознавания и минимального ложного срабатывания — в таких случаях приходилось бы оформлять возврат денег, а это очень дорого и влияет на репутацию всех партнеров, начиная от стриминговой платформы и заканчивая магазином, который тебе айтем продал.

Даже если распознаванием скина платформа занимается через партнера, все равно все будут думать, что это делает «Твитч». И в случае неправильного распознавания и возврата денег падает репутация именно у «Твитча».

А мы не смогли сделать даже 90% распознавания: у третьего прототипа распознание было на уровне 70%, но в этих 70% было много некорректно распознанных скинов. Мы распознали скин, но это оказывался не тот айтем, — и это приходилось вручную отсекать. А для того, чтобы работать с крупными стриминговыми платформами, надо было или обеспечить 99% распознавания, или распознавать чуть меньше скинов, но зато с абсолютной точностью. А это сложно, потому что они маленькие, очень похожи друг на друга, в динамике, фон меняется.

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

И тогда мы решили заморозить проект до тех пор, пока не сможем сделать нормальное распознание. Мы не закрывали проект, там до сих пор работают сервера, и Сергей продолжает эксперименты. Но пока непонятно, как добиться приемлемого уровня распознавания.

Мы не будем патентовать свои находки, мы за опен-сорс. Если бы код был написан нормально, с комментариями, мы бы его выложили. Очень многие продукты в мире созданы на базе опенсорсных проектов, и мы тоже такими пользовались в своей работе. Рынок движется вперед благодаря ресерчам и проектам, которые выкладываются в открытый доступ.

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

Да, с точки зрения коммерции выгоднее делать распознавание объектов в рекламе, например. Это совершенно космический рынок: у YouTube миллионы видосов, и никто не знает, что там за вещи. Но мы не пытались заняться коммерцией, мы не делали стартап на миллион, мы просто хотели поиграться с технологией. Стартап — это такая штука, которой надо заниматься долго. Ты поднимаешь раунды, берёшь на себя обязательства и в целом увязаешь в этом на много лет, от двух до десяти. И ты должен очень любить то, что ты делаешь. А я не хочу распознавать объекты в рекламе. Мне после хакатона вообще предлагали начать распознавать сцены и объекты в порно — там ещё больше денег, там компании богаче. Тоже можно распознавать инструменты, игрушки, и тоже можно делать нарезки хайлайтов. Но это не та ниша, в которой я бы хотел работать.

Возвращаться к нарезке стримов тоже не будем: это не настолько интересная история, чтобы превращать её в стартап. От «Амазона» мы выиграли кредит на 120 тысяч долларов, благодаря этому работают наши серверы по нарезке стримов, и люди смогут пользоваться нашим сервисом до лета. Потом мы напишем им письмо и отключимся.

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

Текст: Александр Лычавко

Фото: Андрей Давыдчик

Читайте также: Всё про блокчейн и токены. Минчанин разработал сервис для повышения криптограмотности

Читайте также

Российский разработчик беспилотных систем Cognitive Pilot задумался об IPO
Российский разработчик беспилотных систем Cognitive Pilot задумался об IPO

Российский разработчик беспилотных систем Cognitive Pilot задумался об IPO

Финтех-стартап Revolut оценили в $6 млрд в последнем раунде финансирования
Финтех-стартап Revolut оценили в $6 млрд в последнем раунде финансирования

Финтех-стартап Revolut оценили в $6 млрд в последнем раунде финансирования

3 комментария
CEO OneSoil Вячеслав Мазай о том, что происходит со стартапом и как он зарабатывает
CEO OneSoil Вячеслав Мазай о том, что происходит со стартапом и как он зарабатывает

CEO OneSoil Вячеслав Мазай о том, что происходит со стартапом и как он зарабатывает

Стартап OneSoil входил в топы Product Hunt, привлекал инвестиции от Юрия Мельничка и Леонида Лознера, а стенд с интерактивными агрокартами в ПВТ — обязательная часть экскурсии для чиновников всех рангов. Сооснователь OneSoil Вячеслав Мазай рассказал dev.by о том, как сельское хозяйство разных стран ищет помощи у белорусских айтишников.   
1 комментарий
Разработчики Долины засомневались в плюсах работы в стартапах
Разработчики Долины засомневались в плюсах работы в стартапах

Разработчики Долины засомневались в плюсах работы в стартапах

Обитатели Кремниевой долины как ни во что другое верят, что будущее — за стартапами, пишет Quartz. Но всё больше разработчиков перестаёт смотреть на работу в них через розовые очки.
17 комментариев

Обсуждение

3

Константин, насколько заню в Dota 2 огромный маркетплейс, скины для которого пишут инди авторы и студии, а решение о допуске принимает valve. Пробовали ли вы анализировать ситуацию в других играх, думаю везде схожий принцип и фактически можно попытаться связаться с авторами и собрать dataset "исходников" (понятно то сам исходник не датут, но модельку для обработки вполне думаю могли бы дать, если нет жестких legal ограничений).

0

Да, в других играх очень детально проанализировали. Саму 3D модель достать не проблема, но датасет нужен когда модель оружения непосредственно в игре, например: https://cdn2.techadvisor.co.uk/cmsdata/features/3645914/best_counter_strike_tips__amp__tricks_bot.jpg

Сергей Скоков
Сергей Скоков Senior Software Engineer в EPAM
0

Ссылка "все силы отдаю новому проекту" никуда не ведет.

0

типичный стартап "Мы Можем Многое", и скины распознать и продать, пару тройку процентов к миллиардам, но на данный момент у нас ничего нет )) процент распознанных скинов был 0, а не "70%, но в этих 70% было много некорректно распознанных скинов". Распознанный - значит на 100% верный, а не вот что-то выдало, но тут половина неправильно и что именно неправильно - нельзя определить. Т.е. сразу красивые сказки для инвесторов, а на деле просто нерешаемая задача.