Задача «Распознаватель жестов MediaPipe» позволяет распознавать жесты рук в режиме реального времени и предоставляет результаты распознанных жестов рук вместе с ориентирами обнаруженных рук. Эту задачу можно использовать для распознавания определенных жестов рук пользователя и вызова функций приложения, соответствующих этим жестам.
Эта задача работает с данными изображения с помощью модели машинного обучения (ML) и принимает либо статические данные, либо непрерывный поток. Задача выводит ориентиры рук в координатах изображения, ориентиры рук в мировых координатах, направление руки (левая/правая рука) и категории жестов рук для нескольких рук.
Начать
Начните использовать эту задачу, следуя одному из этих руководств по реализации для вашей целевой платформы. Эти руководства для конкретных платформ покажут вам базовую реализацию этой задачи с использованием рекомендуемой модели и предоставят примеры кода с рекомендуемыми параметрами конфигурации:
- Android – Пример кода – Руководство
- Python — Пример кода — Руководство
- Интернет — Пример кода — Руководство
Подробности задачи
В этом разделе описаны возможности, входы, выходы и параметры конфигурации этой задачи.
Функции
- Обработка входного изображения . Обработка включает в себя поворот изображения, изменение размера, нормализацию и преобразование цветового пространства.
- Порог оценки — фильтрация результатов на основе оценок прогноза.
- Пометить список разрешенных и список запрещенных — укажите категории жестов, распознаваемые моделью.
Входные данные задачи | Результаты задачи |
---|---|
Распознаватель жестов принимает входные данные одного из следующих типов:
| Распознаватель жестов выдает следующие результаты:
|
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации:
Название опции | Описание | Диапазон значений | Значение по умолчанию | |
---|---|---|---|---|
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"] |
|
| |
custom_gestures_classifier_options | Параметры настройки поведения классификатора пользовательских жестов. |
|
| |
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 для изменения предоставленных моделей для этой задачи, прежде чем создавать свои собственные.
Дополнительные сведения о настройке модели для этой задачи см. в разделе Настройка моделей для Распознаватель жестов .