
Задача MediaPipe Gesture Recognizer позволяет распознавать жесты рук в реальном времени и предоставляет результаты распознавания жестов вместе с ориентирами обнаруженных рук. Вы можете использовать эту задачу для распознавания конкретных жестов рук пользователя и вызова функций приложения, соответствующих этим жестам.
Данная задача работает с данными изображений и использует модель машинного обучения (ML), принимая либо статические данные, либо непрерывный поток. В результате выполнения задачи выдаются координаты кистей рук в координатах изображения, координаты кистей рук в мировых координатах, информация о ведущей руке (левая/правая) и категории жестов нескольких рук.
Начать
Начните использовать эту задачу, следуя одному из этих руководств по реализации для вашей целевой платформы. Эти руководства, специфичные для каждой платформы, проведут вас через базовую реализацию этой задачи с использованием рекомендуемой модели и предоставят примеры кода с рекомендуемыми параметрами конфигурации:
- Android — пример кода
- Python - Пример кода
- Веб - [Пример кода](https://github.com/google-ai-edge/mediapipe-samples-web/blob/main/src/tasks/gesture-recognizer.ts - Руководство)
Детали задачи
В этом разделе описываются возможности, входные и выходные данные, а также параметры конфигурации данной задачи.
Функции
- Обработка входного изображения — обработка включает в себя поворот изображения, изменение размера, нормализацию и преобразование в цветовое пространство.
- Пороговое значение оценки — фильтрация результатов на основе оценок прогноза.
- Метки allowlist и denylist — укажите категории жестов, распознаваемые моделью.
| Входные данные задачи | Результаты выполнения задачи |
|---|---|
Распознаватель жестов принимает на вход данные одного из следующих типов:
| Распознаватель жестов выдает следующие результаты:
|
Параметры конфигурации
Данная задача имеет следующие параметры конфигурации:
| Название варианта | Описание | Диапазон значений | Значение по умолчанию | |
|---|---|---|---|---|
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 | Минимальный показатель достоверности наличия руки в модели обнаружения ориентиров руки. В режиме видео и режиме прямой трансляции Gesture Recognizer, если показатель достоверности наличия руки в модели обнаружения ориентиров руки ниже этого порога, запускается модель обнаружения ладони. В противном случае используется облегченный алгоритм отслеживания руки для определения местоположения руки (рук) для последующего обнаружения ориентиров. | 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 | Настраивает обработчик результатов для асинхронного получения результатов классификации, когда распознаватель жестов находится в режиме прямой трансляции. Может использоваться только в том случае, если для параметра running mode установлено значение LIVE_STREAM | ResultListener | Н/Д | Н/Д |
Модели
Распознаватель жестов использует набор моделей, включающий два предварительно упакованных пакета: пакет моделей для определения ориентиров на руке и пакет моделей для классификации жестов. Модель для определения ориентиров определяет наличие рук и их геометрию, а модель распознавания жестов распознает жесты на основе геометрии руки.
| Название модели | Форма входных данных | Тип квантования | Модель карты | Версии |
|---|---|---|---|---|
| HandGestureClassifier | 192 x 192, 224 x 224 | поплавок 16 | информация | Последний |
Эта задача также поддерживает модификацию пакета моделей с помощью Model Maker. Для получения дополнительной информации об использовании Model Maker для настройки моделей для этой задачи см. страницу « Настройка моделей для распознавателя жестов» .
Комплект моделей ориентиров для рук
Пакет моделей для определения ключевых точек на кисти позволяет определять локализацию 21 координаты суставов пальцев в пределах обнаруженных областей кисти. Модель была обучена на примерно 30 000 реальных изображениях, а также на нескольких визуализированных синтетических моделях кистей, наложенных на различные фоны. Определение 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
Если модель обнаруживает руки, но не распознает жест, распознаватель жестов возвращает результат «None». Если модель не обнаруживает руки, распознаватель жестов возвращает пустое значение.
Пакет моделей классификации жестов содержит двухэтапный конвейер нейронной сети, включающий модель встраивания жестов, за которой следует модель классификации жестов. Подробнее см. в карточке модели классификации жестов .
Модель встраивания жестов кодирует признаки изображения в вектор признаков, а модель классификации представляет собой облегченный классификатор жестов, принимающий этот вектор признаков в качестве входных данных. Предоставленный пакет моделей классификации жестов содержит стандартный классификатор жестов, который распознает 7 распространенных жестов рук, описанных выше. Вы можете расширить пакет моделей для распознавания большего количества жестов, обучив собственный пользовательский классификатор жестов. Подробнее см. в разделе «Пользовательские модели» .
Распознаватель жестов, использующий как стандартный, так и пользовательский классификатор жестов, отдает предпочтение пользовательскому жесту, если оба классификатора распознают один и тот же жест в своих категориях. Если жест распознается только одним классификатором жестов, распознаватель жестов выдает непосредственно распознанный жест.
Контрольные показатели задач
Ниже представлены результаты тестирования производительности всего конвейера на основе предварительно обученных моделей. Результат по задержке — это средняя задержка на Pixel 6 с использованием CPU/GPU.
| Название модели | Задержка ЦП | Задержка графического процессора |
|---|---|---|
| GestureRecognizer | 16,76 мс | 20,87 мс |
Пользовательские модели
Если вы хотите улучшить или изменить возможности моделей, предоставленных в этом задании, вы можете использовать Model Maker для модификации существующих моделей. Пользовательские модели, используемые с MediaPipe, должны быть в формате .task , который представляет собой файл пакета моделей. Перед созданием собственных моделей рекомендуется использовать Model Maker для модификации предоставленных для этого задания моделей.
Для получения дополнительной информации о настройке модели для этой задачи см. раздел «Настройка моделей для распознавателя жестов» .