Трибуна
Doubletapp
3355

Как нейросети помогают развивать навыки по стрельбе: история от чемпионов мира

С вами на связи чемпионы мира по практической стрельбе: Алёна Карелина и Роман Халитов. Мы далеки от мира разработки, но сегодня хотим рассказать, как создали профессиональный инструмент для нашего вида спорта в виде мобильного приложения.

В закладки
Аудио
Алёна Карелина и Роман Халитов

Что такое практическая стрельба

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

Результат соревнования — хитфактор.

Хитфактор — количество набранных очков, делённое на время прохождения.

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

Неудобства тренировочного процесса

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

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

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

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

У нас появилась идея сделать инструмент в виде мобильного приложения, который бы мог:

  • Одновременно проигрывать два видео, синхронизируя их по стартовому сигналу.
  • Отображать совершенные выстрелы на временной шкале.
  • Показывать время между соседними выстрелами.

С этой идеей мы пришли к ребятам из Doubletapp, дальше передаём слово им, чтобы они подробнее рассказали про процесс разработки.

Алёна Карелина, Роман Халитов и Doubletapp

Разработка

Разработка состояла из двух основных частей:

  1. Разработка алгоритма нахождения стартового сигнала и выстрелов.
  2. Разработка мобильного приложения под iOS.

Как распознавать выстрелы

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

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

Распознавание выстрелов по громкости звука не работает должным образом.

Поэтому мы решили задействовать нейронные сети. Алёна и Роман передали нам больше тысячи записей со стрельб, но они никак не были размечены.

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

​Вспомогательный инструмент для разметки видео

После мы сгенерировали аудиодорожки, в которых звуки выстрелов и стартовых сигналов были положены поверх самых разных аудиорядов: рёв мотоцикла, дыхание при беге, музыка Ивана Дорна, блог Артемия Лебедева и прочее. Для обучения использовались как оригинальные аудиодорожки, так и сгенерированные.

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

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

Каждый момент времени она относит к одному из четырёх классов:

  • Стартовый сигнал.
  • Начало выстрела.
  • Продолжение выстрела.
  • Фон.

Отдельный класс для начала выстрела нужен, чтобы сеть умела разделять идущие подряд выстрелы.

Итоговое качество распознавания

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

  • Точность распознавания составила 99,1%.
  • Полнота распознавания 97,8%.

Точность — вероятность того, что найденный выстрел — действительно выстрел.

Полнота — вероятность того, что существующий выстрел будет найден.

Приложение под iOS

Было разработано нативное приложение на Swift. Полученная нейронная сеть была интегрирована в него с помощью CoreML.

Приложение HitFactor:

  • Распознаёт и отображает звуки выстрелов и стартовых сигналов на временной шкале.
  • Показывает время между выстрелами в таблице.
  • Сравнивает два видео, имея для анализа на одном экране результаты обоих стрелков.
  • Работает полностью в офлайне.
  • Сохраняет итоговое видео анализа стрельбы в Full HD.

Приложение можно скачать в AppStore.

Стоимость и сроки разработки

С вами снова Алёна и Роман, стрелки, спортсмены и просто чемпионы мира, если вдруг вы успели забыть.

От возникновения у нас первоначальной идеи до выхода первой версии приложения в App Store прошло чуть меньше года. Стоимость разработки составила около 670 тысяч рублей.

Потрачено: 670 тысяч рублей.

Бизнес-модель

Приложение работает по фримиум-модели и позволяет бесплатно проанализировать и сравнить до пяти пар видео в месяц. Сейчас конверсия в платного пользователя из установки составляет 8%.

Наша потенциальная аудитория — все любители и профессионалы в практический стрельбе. Как минимум в России этим видом спорта занимаются более 25 тысяч человек.

Также практическая стрельба популярна во многих странах мира, в том числе и в США. Именно поэтому наше приложение на старте работает на английском языке.

Продвижение

Мы продвигаем приложение в наших соцсетях, показываем его на соревнованиях другим спортсменам. Сегодня добрались и до vc.ru.

Кроме того, наши разработчики записали большое видео, где мы максимально подробно рассказываем о продукте.

Что дальше

Нас много спрашивают про Android- и веб-версии нашего продукта.

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

Очень хочется услышать ваше мнение и немного повысить DAU :)

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Doubletapp", "author_type": "self", "tags": [], "comments": 25, "likes": 46, "favorites": 55, "is_advertisement": false, "subsite_label": "tribuna", "id": 92856, "is_wide": false, "is_ugc": true, "date": "Tue, 19 Nov 2019 13:46:30 +0300", "is_special": false }
0
{ "id": 92856, "author_id": 395634, "diff_limit": 1000, "urls": {"diff":"\/comments\/92856\/get","add":"\/comments\/92856\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/92856"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199116, "last_count_and_date": null }
25 комментариев
Популярные
По порядку
Написать комментарий...
8

Doubletapp — отличные ребята. Тоже с ними работаем по приложению Практика : )

Ответить
2

Спасибо, рады стараться ;)

Ответить
3

Почему начали с ios, а не с андроида?

Ответить
4

Потому что мы делали это приложение для себя в первую очередь. А у нас айфоны :)

Ответить
2

очевидно же
1) рынок США
2) платежеспособность аудитории
3) качество айфона\айпада как продукта - железо без сюрпризов + софт(API) без сюрпризов

Ответить
3

Теперь в новостях можно писать: задержанный тренировался стрелять в нейросетях.

Ответить
0

Как решаете кейс при стрельбе с глушителем?)

Ответить
5

Как то не встречал спортивной практической стрельбы с глушителем))

Ответить
0

А это не для спортивной, а для практической стрельбы 🙂

Ответить
0

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

Ответить
1

Там в принципе по людям не стреляют)

Ответить
1

Интересный кейс !!!

Ответить
1

А нейросеть поверх какой спектрограммы использовалась, fft / mel / mfcc? Были ли проблемы связанные с тем, что видео может быть сжато по разному и из-за этого спектр аудио обрезан?

Ответить
1

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

Ответить
–6

Удивительно, как персонажи Фенимора Купера развивали навыки в стрельбе без каких-либо смартфонов, приложений и нейросетей.

PS: Вообще, понятие "нейросеть" опошлили до предела и превратили в некий диджитал попкорн на уровне ловли покемонов в парках для школьников с низким уровнем IQ, что не может не огорчать. С другой стороны, как еще использовать искусственные нейроны, если не в качестве протезов для индивидуумов с острым недостатком своих естественных.

Ответить
0

Звучит так же, как например "удивительно, как люди раньше общались без речи".

Ответить
3

да и паровоз непонятно зачем изобрели, только загрязняет атмосферу.
Ломоносов пешком дошел - и ничего, стал великим! ))

Ответить
–2

Как же все-таки любят сравнивать жопу с пальцем на VC, просто поразительно

Ответить
0

Вопрос эффективности. Если у вас есть свободный доступ к оружию как в США и стоимость выстрела позволяет - можете отстреливать по ящику патронов в день и разовьете навыки. 

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

Ответить
1

Нет, просто настрел не поможет хорошо стрелять. Подробнее тут https://instagram.com/p/B2mTWekAxXY/

Ответить
0

Я не имел в виду просто сжечь ящик патронов в "молоко" ) 

И чаще, наверное, лучше чем больше. Лично для меня больше 150 за раз будет уже просто сжиганием патронов.

Ответить
0

Как скоро ожидать соревнование на Kaggle от Doubletapp?

Ответить
0

Мы вам персонально сообщим

Ответить
0

А пробовали сделать определение попадания? Эти металлические мишени ведь позвякивают, да и визуально отклоняются. П.с. Я не разбираюсь в стрельбе. Знаком с темой только по влогу Demolition ranch :-)

Ответить
0

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

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }