Руководство по задаче распознавания жестов

Задача «Распознаватель жестов MediaPipe» позволяет распознавать жесты рук в режиме реального времени и предоставляет результаты распознанных жестов рук вместе с ориентирами обнаруженных рук. Эту задачу можно использовать для распознавания определенных жестов рук пользователя и вызова функций приложения, соответствующих этим жестам.

Эта задача работает с данными изображения с помощью модели машинного обучения (ML) и принимает либо статические данные, либо непрерывный поток. Задача выводит ориентиры рук в координатах изображения, ориентиры рук в мировых координатах, направление руки (левая/правая рука) и категории жестов рук для нескольких рук.

Попробуй это!

Начать

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

Подробности задачи

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

Функции

  • Обработка входного изображения . Обработка включает в себя поворот изображения, изменение размера, нормализацию и преобразование цветового пространства.
  • Порог оценки — фильтрация результатов на основе оценок прогноза.
  • Пометить список разрешенных и список запрещенных — укажите категории жестов, распознаваемые моделью.
Входные данные задачи Результаты задачи
Распознаватель жестов принимает входные данные одного из следующих типов:
  • Неподвижные изображения
  • Декодированные видеокадры
  • Живое видео
Распознаватель жестов выдает следующие результаты:
  • Категории жестов рук.
  • Ручность обнаруженных рук
  • Ориентиры обнаруженных рук в координатах изображения
  • Ориентиры обнаруженных рук в мировых координатах

Варианты конфигурации

Эта задача имеет следующие параметры конфигурации:

Название опции Описание Диапазон значений Значение по умолчанию
running_mode Устанавливает режим выполнения задачи. Есть три режима:

ИЗОБРАЖЕНИЕ: Режим для ввода одного изображения.

ВИДЕО: Режим декодированных кадров видео.

LIVE_STREAM: режим прямой трансляции входных данных, например, с камеры. В этом режиме необходимо вызвать resultListener, чтобы настроить прослушиватель на асинхронное получение результатов.
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
num_hands Максимальное количество рук может быть обнаружено с помощью GestureRecognizer . Any integer > 0 1
min_hand_detection_confidence Минимальный показатель достоверности, позволяющий считать обнаружение рук успешным в модели обнаружения ладоней. 0.0 - 1.0 0.5
min_hand_presence_confidence Минимальный показатель достоверности оценки присутствия руки в модели обнаружения ориентиров рук. В режиме «Видео» и режиме прямой трансляции Распознаватель жестов, если показатель достоверности присутствия руки по модели ориентира руки ниже этого порога, активируется модель обнаружения ладони. В противном случае для определения местоположения руки (рук) для последующего обнаружения ориентиров используется упрощенный алгоритм отслеживания рук. 0.0 - 1.0 0.5
min_tracking_confidence Минимальный показатель достоверности, позволяющий считать отслеживание рук успешным. Это порог IoU ограничивающей рамки между руками в текущем кадре и последнем кадре. В режиме «Видео» и «Потоковый режим» Распознаватель жестов, если отслеживание не удается, Распознаватель жестов запускает обнаружение рук. В противном случае обнаружение руки пропускается. 0.0 - 1.0 0.5
canned_gestures_classifier_options Параметры настройки поведения классификатора стандартных жестов. Стандартные жесты: ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • Язык отображаемых имен: языковой стандарт, используемый для отображаемых имен, указанных в метаданных модели TFLite, если таковые имеются.
  • Максимальное количество результатов: максимальное количество возвращаемых результатов классификации с наибольшим количеством баллов. Если < 0, будут возвращены все доступные результаты.
  • Порог оценки: балл, ниже которого результаты отклоняются. Если установлено значение 0, будут возвращены все доступные результаты.
  • Список разрешенных категорий: список разрешенных названий категорий. Если поле не пусто, результаты классификации, категории которых нет в этом наборе, будут отфильтрованы. Взаимоисключающие со списком запретов.
  • Список запрещенных категорий: список запрещенных имен категорий. Если значение не пусто, результаты классификации, категория которых находится в этом наборе, будут отфильтрованы. Взаимоисключающее со списком разрешений.
    • Локаль отображаемых имен: any string
    • Максимальное количество результатов: any integer
    • Порог оценки: 0.0-1.0
    • Список разрешенных категорий: vector of strings
    • Список запрещенных категорий: vector of strings
    • Язык отображаемых имен: "en"
    • Максимальное количество результатов: -1
    • Порог оценки: 0
    • Белый список категорий: пусто
    • Список запрещенных категорий: пустой
    custom_gestures_classifier_options Параметры настройки поведения классификатора пользовательских жестов.
  • Язык отображаемых имен: языковой стандарт, используемый для отображаемых имен, указанных в метаданных модели TFLite, если таковые имеются.
  • Максимальное количество результатов: максимальное количество возвращаемых результатов классификации с наибольшим количеством баллов. Если < 0, будут возвращены все доступные результаты.
  • Порог оценки: балл, ниже которого результаты отклоняются. Если установлено значение 0, будут возвращены все доступные результаты.
  • Список разрешенных категорий: список разрешенных названий категорий. Если поле не пусто, результаты классификации, категории которых нет в этом наборе, будут отфильтрованы. Взаимоисключающее со списком запретов.
  • Список запрещенных категорий: список запрещенных имен категорий. Если значение не пусто, результаты классификации, категория которых находится в этом наборе, будут отфильтрованы. Взаимоисключающее со списком разрешений.
    • Локаль отображаемых имен: any string
    • Максимальное количество результатов: any integer
    • Порог оценки: 0.0-1.0
    • Список разрешенных категорий: vector of strings
    • Список запрещенных категорий: vector of strings
    • Язык отображаемых имен: "en"
    • Максимальное количество результатов: -1
    • Порог оценки: 0
    • Белый список категорий: пусто
    • Список запрещенных категорий: пустой
    result_callback Настраивает прослушиватель результатов на асинхронное получение результатов классификации, когда распознаватель жестов находится в режиме прямого потока. Может использоваться только в том случае, если для режима работы установлено значение LIVE_STREAM ResultListener Н/Д Н/Д

    Модели

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

    Название модели Введите форму Тип квантования Модель карты Версии
    РукаЖестКлассификатор 192 х 192, 224 х 224 поплавок 16 Информация Последний

    Эта задача также поддерживает модификацию пакета модели с помощью Model Maker. Дополнительные сведения об использовании Model Maker для настройки моделей для этой задачи см. на странице «Настройка моделей для распознавания жестов» .

    Комплект моделей ориентиров рук

    Пакет моделей ориентиров руки определяет локализацию ключевой точки 21 координаты сустава руки в обнаруженных областях руки. Модель была обучена примерно на 30 тысячах реальных изображений, а также на нескольких визуализированных синтетических моделях рук, наложенных на различный фон. См. определение 21 достопримечательности ниже:

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

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

    Пакет моделей классификации жестов

    Пакет модели классификации жестов может распознавать следующие распространенные жесты рук:

    0 - Unrecognized gesture, label: Unknown
    1 - Closed fist, label: Closed_Fist
    2 - Open palm, label: Open_Palm
    3 - Pointing up, label: Pointing_Up
    4 - Thumbs down, label: Thumb_Down
    5 - Thumbs up, label: Thumb_Up
    6 - Victory, label: Victory
    7 - Love, label: ILoveYou
    

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

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

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

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

    Тесты задач

    Вот тесты задач для всего конвейера, основанные на предварительно обученных моделях. Результатом задержки является средняя задержка на Pixel 6 с использованием ЦП/ГП.

    Название модели Задержка процессора Задержка графического процессора
    Распознаватель жестов 16,76 мс 20,87 мс

    Пользовательские модели

    Если вы хотите улучшить или изменить возможности моделей, представленных в этой задаче, вы можете использовать Model Maker для изменения существующих моделей. Пользовательские модели, используемые с MediaPipe, должны быть в формате .task , который представляет собой файл пакета модели. Вам следует рассмотреть возможность использования Model Maker для изменения предоставленных моделей для этой задачи, прежде чем создавать свои собственные.

    Дополнительные сведения о настройке модели для этой задачи см. в разделе Настройка моделей для Распознаватель жестов .