Guia de tarefas de reconhecimento de gestos

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.

Faça um teste.

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:

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:
  • Imagens estáticas
  • Frames de vídeo decodificados
  • Feed de vídeo ao vivo
O reconhecedor de gestos gera os seguintes resultados:
  • Categorias de gestos de mão
  • Mãos detectadas
  • Pontos de referência de mãos detectadas em coordenadas de imagem
  • Pontos de referência de mãos detectadas em coordenadas mundiais

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"]
  • Localidade dos nomes de exibição: a localidade a ser usada para os nomes de exibição especificados pelos metadados do modelo TFLite, se houver.
  • Máximo de resultados: o número máximo dos resultados de classificação com a melhor pontuação a serem retornados. Se < 0, todos os resultados disponíveis serão retornados.
  • Limite de pontuação: a pontuação abaixo da qual os resultados são rejeitados. Se definido como 0, todos os resultados disponíveis serão retornados.
  • Lista de permissões de categorias: a lista de permissões de nomes de categorias. Se não estiver em branco, os resultados de classificação em que a categoria não estiver nesse conjunto serão filtrados. Mutuamente exclusivo com a lista de bloqueio.
  • Lista de bloqueio da categoria: a lista de bloqueio de nomes de categorias. Se não estiver em branco, os resultados de classificação relacionados à categoria nesse conjunto serão filtrados. Mutuamente exclusivo com lista de permissões.
    • Local dos nomes de exibição: any string
    • Máximo de resultados: any integer
    • Limite de pontuação: 0.0-1.0
    • Lista de permissões da categoria: vector of strings
    • Lista de bloqueio da categoria: vector of strings
    • Local dos nomes de exibição: "en"
    • Máximo de resultados: -1
    • Limite de pontuação: 0
    • Lista de permissões de categoria: vazia
    • Lista de bloqueio da categoria: vazia
    custom_gestures_classifier_options Opções para configurar o comportamento do classificador de gestos personalizados.
  • Localidade dos nomes de exibição: a localidade a ser usada para os nomes de exibição especificados pelos metadados do modelo TFLite, se houver.
  • Máximo de resultados: o número máximo dos resultados de classificação com a melhor pontuação a serem retornados. Se < 0, todos os resultados disponíveis serão retornados.
  • Limite de pontuação: a pontuação abaixo da qual os resultados são rejeitados. Se definido como 0, todos os resultados disponíveis serão retornados.
  • Lista de permissões de categorias: a lista de permissões de nomes de categorias. Se não estiver em branco, os resultados de classificação em que a categoria não estiver nesse conjunto serão filtrados. Mutuamente exclusivo com a lista de bloqueio.
  • Lista de bloqueio da categoria: a lista de bloqueio de nomes de categorias. Se não estiver em branco, os resultados de classificação relacionados à categoria nesse conjunto serão filtrados. Mutuamente exclusivo com lista de permissões.
    • Local dos nomes de exibição: any string
    • Máximo de resultados: any integer
    • Limite de pontuação: 0.0-1.0
    • Lista de permissões da categoria: vector of strings
    • Lista de bloqueio da categoria: vector of strings
    • Local dos nomes de exibição: "en"
    • Máximo de resultados: -1
    • Limite de pontuação: 0
    • Lista de permissões de categoria: vazia
    • Lista de bloqueio da categoria: vazia
    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.