Сэм Гарг

С выпуском iPhone в 2007 году Apple открыла эру сенсорных экранов. То, что было сказано тогда, актуально и сегодня: использовать стилус сложно с самого начала, и тем более сложно в публичной среде, поэтому мы застряли в сенсорных экранах. Покупаем ли мы продукты, фаст-фуд или билеты на поезд, сенсорные экраны - вот то, что мы делаем изо дня в день.

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

Альтернативно бесконтактные интерфейсы, такие как голосовые пользовательские интерфейсы (VUI), могут заставить людей чувствовать себя неловко. Многим просто неудобно разговаривать с роботом в общественных местах, а в шумной или шумной обстановке это тоже непрактично.

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

  • Мы не должны слишком полагаться на сенсорные экраны
  • Мы не хотим использовать голосовые интерфейсы в качестве замены

Итак, как мы можем безопасно и комфортно управлять нашими технологиями? Одна из возможностей, которую мы изучаем, - это использование бесконтактных пользовательских интерфейсов (TUI). Их можно использовать для управления компьютером с помощью движений тела и жестов, не касаясь клавиатуры, мыши или экрана. Это обеспечивает эффективное взаимодействие, которое может казаться интуитивным для нашего легко выразительного тела.

Распознавание жестов рук - сложная задача, которая в последние годы приобрела значительный научный интерес, в основном из-за ее применения в взаимодействии человека с компьютером (HCI). В отличие от пользовательских интерфейсов, ориентированных на мышь или клавиатуру, интерфейсы на основе жестов предоставляют пользователю взаимодействия, отражающие его жизненный опыт вдали от экранов. Такие интерфейсы распознают и интерпретируют движения человеческого тела. Взаимодействие может казаться более естественным и обычно не требует дополнительных устройств.

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

1. HandTrack.js

Для нашего первого эксперимента мы решили использовать JavaScript, поскольку он легкий, имеет довольно много библиотек и может работать в любом браузере и на любом устройстве. После предварительного просмотра нескольких библиотек обнаружения и отслеживания рук в JavaScript мы решили сосредоточиться на Handtrack.js. Эта библиотека использует API обнаружения объектов TensorFlow для отслеживания руки пользователя на изображении и предположительно может работать в любой ориентации. Мы просмотрели интерактивные демонстрации на сайте библиотеки и были поражены результатами.

Чтобы сделать нашу собственную демонстрацию, мы создали простую статическую веб-страницу, которая импортировала Handtrack.js. Мы использовали это для обнаружения руки в видеопотоке веб-камеры и использовали двухстороннюю очередь (двусторонняя структура данных очереди), чтобы отслеживать последние 10 координат ограничивающей рамки, обнаруженной библиотекой. Позже мы вычислили дельты, dX и dY, между координатами x и y текущего кадра и кадра в конце двухсторонней очереди из 10 элементов, чтобы определить, в каком направлении двигалась рука.

Положительное значение dX означало, что рука двигалась слева направо, что соответствовало жесту смахивания вправо. Отрицательное значение означало, что он двигался справа налево, что соответствовало смахиванию влево. Точно так же положительное значение dY соответствовало жесту смахивания вверх, а отрицательное значение - смахиванию вниз. Мы уменьшили шум и ложные сообщения об изменении направления, установив порог величин dX и dY.

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

Преимущества этого подхода:

  1. Он может работать в любом браузере (на любом устройстве) без дополнительной настройки.

Ограничения этого подхода

  1. Он ограничен простыми жестами рук, такими как смахивание влево / вправо / вверх / вниз.
  2. Ему нужна рука, чтобы пройти от одной стороны рамки веб-камеры до другой, а затем выйти за пределы рамки. Например, чтобы провести пальцем вправо, рука должна пройти от левого края рамки веб-камеры до правого края, а затем от него. Неполные движения рукой, когда рука не проходит от края к краю, приводят к дрожанию экрана из-за ложных срабатываний - жесты распознаются более одного раза.
  3. Он ломается, если в данной рамке несколько рук движутся в разных направлениях.
  4. Он не может идентифицировать руки в видеопотоке и может отслеживать руки только покадрово, а не по кадрам.
  5. HandTrack.js иногда дает неверные прогнозы (например, иногда лицо определяется как рука).

В целом метод неплох, но можно было бы лучше.

2. OpenCV + Dlib + библиотека Python для отслеживания рук

Для нашего второго эксперимента мы черпали вдохновение из учебника PyImageSearch's OpenCV People Counter. Мы реализовали гибридный подход, объединив обнаружение объектов (через библиотеку Handtracking) и отслеживание объектов (через трекер корреляции dlib) в единый алгоритм. По сравнению с запуском в браузере с помощью JavaScript, для этого потребовались библиотеки, такие как Dlib, которые еще не поддерживаются браузером и требуют для работы интерпретатора Python.

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

С другой стороны, средство отслеживания объектов принимает координаты (x, y) местоположения объекта на изображении и:

  1. Однозначно идентифицирует этот объект
  2. Отслеживает объект при его перемещении по видеопотоку, прогнозируя новое местоположение объекта в следующем кадре на основе различных атрибутов кадра, таких как градиент или оптический поток.

Наш гибридный подход состоял из двух этапов:

  1. Обнаружение. На этом этапе мы запустили наш дорогостоящий в вычислительном отношении алгоритм обнаружения рук, чтобы определить, вошли ли новые руки в наше представление, и проверить, можем ли мы найти руки, которые были «потеряны» на этапе отслеживания. Для каждой обнаруженной руки мы создали или обновили трекер рук с новыми координатами ограничивающего прямоугольника.
  2. Отслеживание: когда мы не были на этапе обнаружения, мы были на этапе отслеживания. Для каждой обнаруженной руки мы создали трекер рук, отслеживающий движение руки по ленте. Мы продолжали отслеживать до N-го кадра, а затем перезапустили наш дорогостоящий в вычислительном отношении детектор рук. Затем весь процесс был повторен.

Чтобы объединить это в демонстрации, мы сначала использовали OpenCV для инициализации видеопотока с веб-камеры. Затем мы использовали наш гибридный подход для обнаружения, идентификации и отслеживания каждой руки в видеопотоке. Затем мы определили направление, в котором двигалась конкретная рука, взяв разности (dX и dY) между значениями (x, y) -координат текущего положения центроида и средним значением всех предыдущих положений центроида для этой конкретной руки. Наконец, мы сопоставили направления с соответствующими жестами (смахивание влево / вправо / вверх / вниз).

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

Преимущества этого подхода:

  1. Он может отслеживать несколько рук.
  2. Он работает более плавно, чем первый метод, метод HandTrack.js.

Ограничения этого подхода:

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

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

Как мы видели из предыдущих экспериментов, распознавание динамических жестов рук в реальном времени является сложной задачей, поскольку:

  1. Нет индикации, когда жест начинается и заканчивается на видео - это ограничение первого и второго экспериментов.
  2. Жесты нужно распознавать только один раз, чтобы избежать ложных срабатываний.

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

Набор данных

Мы использовали набор данных 20BN-JESTER, который представляет собой обширную коллекцию четко обозначенных видеоклипов, на которых показаны люди, выполняющие заранее определенные жесты руками перед камерой ноутбука или веб-камерой. Он состоит из 148 092 видео с ярлыками, изображающих 25 различных классов жестов человеческих рук, и позволяет обучать надежные модели машинного обучения распознавать такие жесты.

Сеть

Мы обучили трехмерные сверточные нейронные сети (3D-CNN) с помощью Keras и TensorFlow на наборе данных. 3D-CNN принимают видео, набор изображений в качестве входных данных и могут напрямую извлекать пространственно-временные особенности для распознавания действий.

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

Попробовав несколько моделей, мы решили использовать сверхлегкую модель 3D-CNN (рисунок 3), поскольку она смогла достичь точности 86,15% на тестовом наборе данных Jester и могла работать со скоростью 15 кадров в секунду на MacBook Pro.

Управление настольными приложениями

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

Мы создали соответствие между доступными типами жестов рук и сочетаниями клавиш, которые можно использовать для управления Spotify. Например, жест стоп можно использовать для воспроизведения или приостановки музыки, жесты смахивание влево и смахивание вправо можно использовать для переключения к предыдущей или следующей песне и т. д. Затем мы использовали OpenCV для захвата видеопотока с веб-камеры и применили нашу предварительно обученную модель для выполнения логического вывода по каналу. Наконец, на основе нашего сопоставления мы использовали PyAutoGUI для отправки соответствующих нажатий клавиш в Spotify для выполнения этого действия. Смотрите видео ниже для демонстрации:

Плюсы такого подхода:

  1. Он может распознавать сложные жесты, такие как увеличение или уменьшение масштаба полной рукой, поворот руки по или против часовой стрелки или перекатывание руки вперед или назад.
  2. Он может распознавать жесты в любом месте кадра.
  3. Он может отслеживать руки по кадрам видеопотока.

Минусы такого подхода:

  1. Для обучения, проверки и тестирования модели требуется много данных, памяти и вычислительной мощности (GPU).
  2. Для выполнения вывода в реальном времени требуется больше вычислительных мощностей.

Заключение

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

Методы на основе JavaScript, такие как Handtrack.js, могут быть более подходящими, когда вам нужна доступность, то есть когда вам нужна легкая система, которая может эффективно работать на стороне клиента в веб-браузере или собственном приложении. Однако вам, возможно, придется пожертвовать некоторой точностью для этой доступности.

Второй метод, использующий OpenCV + dlib + библиотеку Handtracking, работает немного лучше, чем подход на основе JavaScript. Однако мы не рекомендуем его, поскольку он лишь незначительно повышает точность, но требует гораздо большей вычислительной мощности.

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

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

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

Хотите узнать больше? Свяжитесь с командой здесь: [email protected] или свяжитесь с Сэмом напрямую здесь: https://uk.linkedin.com/in/samanyougarg