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

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

Это игра, и мы должны получать удовольствие. Сегодня я расскажу вам, как написать код JavaScript, чтобы играть в игру, прыгая по комнате.

В эту штуку сложно играть.

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

Преодоление технических барьеров

Создание небольшой веб-страницы с базовой поддержкой javascript для получения видео с веб-камеры и контейнера с играми о динозаврах — тривиальная задача для опытных разработчиков. Все, что вам нужно, это последняя версия Chrome, тег <video>, некоторые фрагменты JavaScript для загрузки канала веб-камеры из stackoveflow и разорванная игра t-rex.

Переходим к интересной части. Обнаружение движения/действия.

Tensorflow Lite предлагает множество хорошо настроенных моделей с открытым исходным кодом для использования в Интернете или на мобильных устройствах. Я решил использовать полный (и нижнюю, и верхнюю часть тела) детектор позы. Вы можете импортировать tensorflow lite для javascript, а также модель, которую я здесь использую, добавив эти 2 строки в ваш <head> .

Когда все зависимости загружены и готовы, мы можем начать с обработки события loadeddata элемента камеры.

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

Я также включил небольшую функцию воспроизведения/паузы записи, просто добавив событие «нажатие» в контейнер видеопотока.

Обнаружение действий

Posenet выводит список всех предсказанных позиций костей вместе со значением оценки.

Для простоты наш алгоритм довольно прост.

  1. Выделите левую и правую тазовые кости
  2. Выберите бедренную кость с наибольшей уверенностью (оценка)
  3. Если оценка не > 0.6 (лучше, чем случайная догадка), перейти к следующему кадру.
  4. В противном случае выполните простое пороговое значение для обнаружения действий на оси y.

Вот первая часть нашего алгоритма:

Переходим к пороговым значениям.

ЦЕЛОВАТЬ.

  • Если бедро находится в нижней части (нижняя часть 20% ) канала камеры, расценивайте это как приседание.
  • Если бедро находится в середине канала (между 20% и 70% высоты канала камеры), считайте это бездействующим.
  • В противном случае считайте это прыжком

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

Последняя часть, реализация toggleAction довольно проста. Мы просто собираемся эмулировать события нажатия клавиш. Код клавиши 32 означает пробел, а код клавиши 40 означает стрелку вниз.

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

Вот и все. Спасибо за чтение!