Креативное приложение PoseNet, которое запускается в вашем браузере и пытается предсказать, прыгаете ли вы, приседаете или стоите на месте.
Вы все знаете, о чем эта игра. Это лучшая сервис-офлайн-извините страница в мире. Люди создали простых ботов, которые измеряют время от прыжка динозавра, чтобы пройти игру, до агентов обучения с подкреплением с помощью кодировщиков состояния CNN.
Это игра, и мы должны получать удовольствие. Сегодня я расскажу вам, как написать код JavaScript, чтобы играть в игру, прыгая по комнате.
В эту штуку сложно играть.
Вы можете попробовать игру здесь и просмотреть полный исходный код здесь.
Преодоление технических барьеров
Создание небольшой веб-страницы с базовой поддержкой javascript для получения видео с веб-камеры и контейнера с играми о динозаврах — тривиальная задача для опытных разработчиков. Все, что вам нужно, это последняя версия Chrome, тег <video>
, некоторые фрагменты JavaScript для загрузки канала веб-камеры из stackoveflow и разорванная игра t-rex.
Переходим к интересной части. Обнаружение движения/действия.
Tensorflow Lite предлагает множество хорошо настроенных моделей с открытым исходным кодом для использования в Интернете или на мобильных устройствах. Я решил использовать полный (и нижнюю, и верхнюю часть тела) детектор позы. Вы можете импортировать tensorflow lite для javascript, а также модель, которую я здесь использую, добавив эти 2 строки в ваш <head>
.
Когда все зависимости загружены и готовы, мы можем начать с обработки события loadeddata
элемента камеры.
Как только веб-камера будет готова, загрузите модель и запустите цикл прогнозирования позы.
Я также включил небольшую функцию воспроизведения/паузы записи, просто добавив событие «нажатие» в контейнер видеопотока.
Обнаружение действий
Posenet выводит список всех предсказанных позиций костей вместе со значением оценки.
Для простоты наш алгоритм довольно прост.
- Выделите левую и правую тазовые кости
- Выберите бедренную кость с наибольшей уверенностью (оценка)
- Если оценка не
> 0.6
(лучше, чем случайная догадка), перейти к следующему кадру. - В противном случае выполните простое пороговое значение для обнаружения действий на оси
y
.
Вот первая часть нашего алгоритма:
Переходим к пороговым значениям.
ЦЕЛОВАТЬ.
- Если бедро находится в нижней части (нижняя часть
20%
) канала камеры, расценивайте это как приседание. - Если бедро находится в середине канала (между
20%
и70%
высоты канала камеры), считайте это бездействующим. - В противном случае считайте это прыжком
Конечно, это предполагает, что игрок стоит в правильном положении перед камерой. Это довольно легко сделать. Просто убедитесь, что вы находитесь далеко, чтобы ваши бедра находились в центре окна просмотра, и у вас было достаточно места, чтобы вы могли приседать и прыгать.
Последняя часть, реализация toggleAction
довольно проста. Мы просто собираемся эмулировать события нажатия клавиш. Код клавиши 32
означает пробел, а код клавиши 40
означает стрелку вниз.
Вы можете попробовать игру здесь и просмотреть полный исходный код здесь.
Вот и все. Спасибо за чтение!