A tarefa do MediaPipe Gesture Recognizer permite reconhecer gestos com as mãos em tempo real e fornece os resultados de gestos com as mãos reconhecidos, além dos pontos de referência das mãos detectadas. Você pode usar essa tarefa para reconhecer gestos específicos de um usuário e invocar recursos do aplicativo que correspondam a esses gestos.
Essa tarefa opera em dados de imagem com um modelo de machine learning (ML) e aceita dados estáticos ou um fluxo contínuo. A tarefa gera pontos de referência das mãos em coordenadas de imagem, pontos de referência das mãos em coordenadas mundiais, lateralidade (mão esquerda/direita) e as categorias de gestos com a mão de várias mãos.
Começar
Comece a usar essa tarefa seguindo um destes guias de implementação para sua plataforma segmentada. Esses guias específicos da plataforma orientam você em uma implementação básica dessa tarefa, usando um modelo recomendado, e fornecem exemplos de código com as opções de configuração recomendadas:
- Android - exemplo
de
- código
- Guia
- Python : exemplo de código
- Web : [exemplo de código](https://github.com/google-ai-edge/mediapipe-samples-web/blob/main/src/tasks/gesture-recognizer.ts - Guia
Detalhes da tarefa
Esta seção descreve os recursos, as entradas, as saídas e as opções de configuração dessa tarefa.
Recursos
- Processamento de imagens de entrada : o processamento inclui rotação, redimensionamento, normalização e conversão de espaço de cores de imagens.
- Limite de pontuação : filtre os resultados com base nas pontuações de previsão.
- Lista de permissões e lista de bloqueio de rótulos : especifique as categorias de gestos reconhecidas pelo modelo.
| Entradas da tarefa | Saídas da tarefa |
|---|---|
O Gesture Recognizer aceita uma entrada de um dos seguintes tipos de dados:
|
O Gesture Recognizer gera os seguintes resultados:
|
Opções de configuração
Essa tarefa tem as seguintes opções de configuração:
| Nome da opção | Descrição | Intervalo de valor | Valor padrão | |
|---|---|---|---|---|
running_mode |
Define o modo de execução da tarefa. Há três
modos: IMAGE: o modo para entradas de imagem única. VIDEO: o modo para frames decodificados de um vídeo. LIVE_STREAM: o modo para uma transmissão ao vivo de dados de entrada, como de uma câmera. Nesse modo, resultListener precisa ser chamado para configurar um listener para receber resultados de forma assíncrona. |
{IMAGE, VIDEO, LIVE_STREAM} |
IMAGE |
|
num_hands |
O número máximo de mãos que podem ser detectadas por
GestureRecognizer.
|
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
A pontuação de confiança mínima para que a detecção de mãos seja considerada bem-sucedida no modelo de detecção de palmas. | 0.0 - 1.0 |
0.5 |
|
min_hand_presence_confidence |
A pontuação de confiança mínima da pontuação de presença de mãos no modelo de detecção de pontos de referência das mãos. No modo de vídeo e no modo de transmissão ao vivo do Gesture Recognizer, se a pontuação de confiança de presença de mãos do modelo de pontos de referência das mãos estiver abaixo desse limite, ela vai acionar o modelo de detecção de palmas. Caso contrário, um algoritmo leve de captura de movimentos das mãos será usado para determinar a localização das mãos para a detecção de pontos de referência subsequente. | 0.0 - 1.0 |
0.5 |
|
min_tracking_confidence |
A pontuação de confiança mínima para que a captura de movimentos das mãos seja considerada bem-sucedida. Esse é o limite de IoU da caixa delimitadora entre as mãos no frame atual e no último frame. No modo de vídeo e no modo de transmissão do Gesture Recognizer, se o rastreamento falhar, o Gesture Recognizer vai acionar a detecção de mãos. Caso contrário, a detecção de mãos será ignorada. | 0.0 - 1.0 |
0.5 |
|
canned_gestures_classifier_options |
Opções para configurar o comportamento do classificador de gestos predefinidos. Os gestos predefinidos são ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"] |
|
|
|
custom_gestures_classifier_options |
Opções para configurar o comportamento do classificador de gestos personalizados. |
|
|
|
result_callback |
Define o listener de resultados para receber os resultados da classificação
de forma assíncrona quando o reconhecedor de gestos estiver no modo de transmissão ao vivo.
Só pode ser usado quando o modo de execução estiver definido como LIVE_STREAM |
ResultListener |
N/A | N/A |
Modelos
O Gesture Recognizer usa um pacote de modelos com dois pacotes pré-empacotados: um pacote de modelos de pontos de referência das mãos e um pacote de modelos de classificação de gestos. O modelo de pontos de referência detecta a presença de mãos e a geometria das mãos, e o modelo de reconhecimento de gestos reconhece gestos com base na geometria das mãos.
| Nome do modelo | Formato de entrada | Tipo de quantização | Card de modelo | Versões |
|---|---|---|---|---|
| HandGestureClassifier | 192 x 192, 224 x 224 | float 16 | informações | Mais recente |
Essa tarefa também oferece suporte à modificação do pacote de modelos usando o Model Maker. Para mais informações sobre como usar o Model Maker para personalizar modelos para essa tarefa, consulte a página Personalizar modelos para o Gesture Recognizer.
Pacote de modelos de pontos de referência das mãos
O pacote de modelos de pontos de referência das mãos detecta a localização do ponto-chave de 21 coordenadas de nós dos dedos dentro das regiões de mãos detectadas. O modelo foi treinado em aproximadamente 30 mil imagens do mundo real, além de vários modelos de mãos sintéticas renderizadas impostas em vários planos de fundo. Confira a definição dos 21 pontos de referência abaixo:

O pacote de modelos de pontos de referência das mãos contém o modelo de detecção de palmas e o modelo de detecção de pontos de referência das mãos. O modelo de detecção de palmas localiza a região das mãos em toda a imagem de entrada, e o modelo de detecção de pontos de referência das mãos encontra os pontos de referência na imagem de mão recortada definida pelo modelo de detecção de palmas.
Como o modelo de detecção de palmas consome muito mais tempo, no modo de vídeo ou de transmissão ao vivo, o Gesture Recognizer usa a caixa delimitadora definida pelos pontos de referência das mãos detectadas no frame atual para localizar a região das mãos no próximo frame. Isso reduz as vezes que o Gesture Recognizer aciona o modelo de detecção de palmas. Somente quando o modelo de pontos de referência das mãos não consegue mais identificar o número necessário de mãos ou a captura de movimentos das mãos falha, o modelo de detecção de palmas é invocado para relocalizar as mãos.
Pacote de modelos de classificação de gestos
O pacote de modelos de classificação de gestos pode reconhecer estes gestos comuns com as mãos:
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
Se o modelo detectar mãos, mas não reconhecer um gesto, o reconhecedor de gestos vai retornar um resultado de "Nenhum". Se o modelo não detectar mãos, o reconhecedor de gestos vai retornar vazio.
O pacote de modelos de classificação de gestos contém um pipeline de rede neural de duas etapas com um modelo de incorporação de gestos seguido por um modelo de classificação de gestos. Confira mais detalhes no card do modelo de classificação de gestos.
O modelo de incorporação de gestos codifica os recursos da imagem em um vetor de recursos, e o modelo de classificação é um classificador de gestos leve que usa o vetor de recursos como entrada. O pacote de modelos de classificação de gestos fornecido contém o classificador de gestos predefinidos, que detecta os 7 gestos comuns com as mãos apresentados acima. É possível estender o pacote de modelos para reconhecer mais gestos treinando seu próprio classificador de gestos personalizados. Confira mais detalhes na seção Modelos personalizados abaixo.
O Gesture Recognizer com o classificador de gestos predefinidos e o classificador de gestos personalizados prefere o gesto personalizado se ambos os classificadores reconhecerem o mesmo gesto nas categorias. Se apenas um classificador de gestos reconhecer o gesto, o Gesture Recognizer vai gerar o gesto reconhecido diretamente.
Benchmarks de tarefas
Confira os benchmarks de tarefas para todo o pipeline com base nos modelos pré-treinados acima. O resultado de latência é a latência média no Pixel 6 usando CPU / GPU.
| Nome do modelo | Latência da CPU | Latência da GPU |
|---|---|---|
| GestureRecognizer | 16,76 ms | 20,87 ms |
Modelos personalizados
Se você quiser melhorar ou alterar os recursos dos modelos fornecidos nessa tarefa, use o Model Maker para modificar os modelos atuais. Os modelos personalizados usados com o MediaPipe precisam estar no formato .task, que é um arquivo de pacote de modelos. Considere usar o Model Maker para modificar os modelos fornecidos para essa tarefa antes de criar seus próprios.
Para mais informações sobre como personalizar um modelo para essa tarefa, consulte Personalizar modelos para o Gesture Recognizer.