A tarefa do reconhecedor de gestos do MediaPipe permite reconhecer gestos da mão em tempo real e fornecer os resultados reconhecidos, além dos pontos de referência das mãos detectadas. Use essa tarefa para reconhecer gestos específicos da mão 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 stream contínuo. A tarefa gera pontos de referência de mão em coordenadas de imagem, pontos de referência em coordenadas mundiais, mão livre (mão esquerda/direita) e categorias de gestos com várias mãos.
Comece já
Comece a usar essa tarefa seguindo um destes guias de implementação para sua plataforma de destino. Estes 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 - Guia
- Web – Exemplo de código – Guia
Detalhes da tarefa
Nesta seção, descrevemos os recursos, as entradas, as saídas e as opções de configuração desta tarefa.
Recursos
- Processamento de imagem de entrada: o processamento inclui rotação, redimensionamento, normalização e conversão do espaço de cor de imagens.
- Limite de pontuação: filtre os resultados com base nas pontuações de previsão.
- Lista de permissões e bloqueio de marcadores: especifica as categorias de gestos reconhecidas pelo modelo.
Entradas de tarefas | Saídas de tarefas |
---|---|
O Reconhecedor de gestos aceita uma entrada de um dos seguintes tipos de dados:
|
O reconhecedor de gestos 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, o 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 pode ser detectado pelo GestureRecognizer .
|
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
A pontuação de confiança mínima para que a detecção da mão seja considerada bem-sucedida no modelo de detecção de palma. | 0.0 - 1.0 |
0.5 |
|
min_hand_presence_confidence |
A pontuação de confiança mínima da pontuação de presença na mão no modelo de detecção de pontos de referência da mão. No modo de vídeo e no modo de transmissão ao vivo do Reconhecedor de gestos, se a pontuação de confiança de presença da mão do modelo de ponto de referência da mão estiver abaixo desse limite, o modelo de detecção de palma será acionado. Caso contrário, um algoritmo leve de rastreamento de mão será usado para determinar o local das mãos e, posteriormente, detectar pontos de referência. | 0.0 - 1.0 |
0.5 |
|
min_tracking_confidence |
A pontuação de confiança mínima para que o rastreamento da mão seja considerado bem-sucedido. Este é o limite de IoU da caixa delimitadora entre ponteiros no frame atual e no último frame. No modo de vídeo e no modo de streaming do Reconhecedor de gestos, se o rastreamento falhar, o reconhecedor de gestos acionará a detecção da mão. Caso contrário, a detecção da mão 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 automáticos 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 está no modo de transmissão ao vivo.
Só pode ser usado quando o modo de corrida está definido como LIVE_STREAM |
ResultListener |
N/A | N/A |
Modelos
O Reconhecedor de gestos usa um pacote com dois pacotes de modelos predefinidos: um de ponto de referência da mão e outro de classificação de gestos. O modelo de ponto de referência detecta a presença de mãos e a geometria da mão. Já o modelo de reconhecimento de gestos identifica gestos com base na geometria da mão.
Nome do modelo | Forma de entrada | Tipo de quantização | Card de modelo | Versions |
---|---|---|---|---|
HandGestureClassifier | 192 x 192, 224 x 224 | ponto flutuante 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 esta tarefa, consulte a página Personalizar modelos para o reconhecedor de gestos.
Pacote de modelos de ponto de referência de mão
O pacote de modelos do ponto de referência da mão detecta a localização do ponto-chave de 21 coordenadas da junta da mão nas regiões detectadas. O modelo foi treinado com aproximadamente 30 mil imagens do mundo real, bem como vários modelos de mão sintética renderizados impostos em vários planos de fundo. Confira a definição dos 21 pontos de referência abaixo:
O pacote de modelos de ponto de referência da mão contém um modelo de detecção de palma e de detecção de pontos de referência da mão. O modelo de detecção de palma localiza a região das mãos de toda a imagem de entrada, e o modelo de detecção de pontos de referência na mão encontra os pontos de referência na imagem da mão cortada definida pelo modelo de detecção de palma.
Como o modelo de detecção de palma leva muito mais tempo, no modo de vídeo ou de transmissão ao vivo, o reconhecedor de gestos usa a caixa delimitadora definida pelos pontos de referência detectados no frame atual para localizar a região das mãos no próximo frame. Isso reduz os tempos que o reconhecedor de gestos aciona o modelo de detecção de palma. Somente quando o modelo de pontos de referência da mão não consegue mais identificar o número necessário de mãos suficiente ou o rastreamento da mão falha, o modelo de detecção de palma é invocado para relocalizar os ponteiros.
Pacote de modelos de classificação de gestos
O pacote de modelos de classificação de gestos pode reconhecer estes gestos comuns:
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 retornará um resultado "None". Se o modelo não detectar mãos, o reconhecedor de gestos 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 em Card do modelo de classificação de gestos.
O modelo de embedding de gestos codifica os recursos de imagem em um vetor de atributo, e o modelo de classificação é um classificador de gestos leve que usa o vetor do atributo como entrada. O pacote de modelos de classificação de gestos fornecido contém o classificador de gestos automáticos, que detecta os sete gestos comuns apresentados acima. É possível estender o pacote de modelos para reconhecer mais gestos treinando seu próprio classificador de gestos personalizado. Confira mais detalhes na seção Modelos personalizados a seguir.
O reconhecedor de gestos com o classificador de gestos automático e o classificador de gestos personalizado prioriza o gesto personalizado se os dois classificadores reconhecem o mesmo gesto nas categorias. Se apenas um classificador de gestos reconhecer o gesto, o Reconhecedor de gestos vai gerar o gesto reconhecido diretamente.
Comparativos de mercado de tarefas
Aqui estão os comparativos de mercado de tarefas para todo o pipeline com base nos modelos pré-treinados acima. O resultado da 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 nesta 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 esta tarefa antes de criar seu próprio modelo.
Para saber mais sobre como personalizar um modelo para esta tarefa, consulte Personalizar modelos para o reconhecedor de gestos.