Guia de tarefas de reconhecimento de gestos

Uma mão fazendo um gesto de polegar para cima que é identificado como um gesto de
polegar para cima pelo modelo com uma classificação de confiança de 63%

A tarefa do MediaPipe Gesture Recognizer permite reconhecer gestos da mão em tempo real e fornece os resultados dos gestos reconhecidos com os 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 correspondem a esses gestos.

Essa tarefa opera em dados de imagem com um modelo de aprendizado de máquina (ML) e aceita dados estáticos ou um fluxo contínuo. A tarefa gera pontos de referência da mão em coordenadas de imagem, pontos de referência da mão em coordenadas do mundo, lateralidade (mão esquerda/direita) e as categorias de gestos de várias mãos.

Teste!

Começar

Para começar a usar essa tarefa, siga um destes guias de implementação para sua plataforma de destino. Estes guias específicos para plataformas orientam você em uma implementação básica desta tarefa, usando um modelo recomendado, e fornecem exemplos de código com as opções de configuração recomendadas:

Detalhes da tarefa

Esta seção descreve os recursos, entradas, saídas e opções de configuração desta tarefa.

Recursos

  • Processamento de imagem de entrada: o processamento inclui rotação, redimensionamento, normalização e conversão de espaço de cores.
  • Limite de pontuação: filtre os resultados com base nas pontuações de previsão.
  • Lista de permissões e de bloqueio de rótulos: especifique as categorias de gestos reconhecidas pelo modelo.
Entradas da tarefa Saídas de tarefas
O GestureRecognizer 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 Gesture Recognizer gera os seguintes resultados:
  • Categorias de gestos com a mão
  • Mão dominante das mãos detectadas
  • Pontos de referência das mãos detectadas nas coordenadas da imagem
  • Pontos de referência de mãos detectadas em coordenadas mundiais

Opções de configuração

Esta 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.

VÍDEO: o modo para quadros decodificados de um vídeo.

LIVE_STREAM: o modo de 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 de mão seja considerada bem-sucedida no modelo de detecção de palma. 0.0 - 1.0 0.5
min_hand_presence_confidence O nível mínimo de confiança da pontuação de presença da mão no modelo de detecção de ponto de referência da mão. 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 da mão do modelo de ponto de referência da mão estiver abaixo desse limite, o modelo de detecção de palmas será acionado. Caso contrário, um algoritmo de rastreamento de mão leve é usado para determinar a localização da mão para a detecção de pontos de referência subsequentes. 0.0 - 1.0 0.5
min_tracking_confidence A pontuação de confiança mínima para que o rastreamento de mãos seja considerado bem-sucedido. Esse é o limite de IoU da caixa delimitadora entre as mãos no frame atual e no último. No modo de vídeo e no modo de transmissão do reconhecedor de gestos, se o rastreamento falhar, o reconhecedor de gestos aciona a detecção da mão. Caso contrário, a detecção de mão será ignorada. 0.0 - 1.0 0.5
canned_gestures_classifier_options Opções para configurar o comportamento do classificador de gestos pré-definidos. 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.
  • Resultados máximos: o número máximo de resultados de classificação com a maior pontuação a serem retornados. Se for < 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 categoria: a lista de permissões de nomes de categorias. Se não estiver vazio, os resultados de classificação cuja categoria não estiver neste conjunto serão filtrados. Mutuamente exclusivo com a lista de bloqueio.
  • Lista de bloqueio de categorias: lista de nomes de categorias. Se não estiver vazio, os resultados de classificação com a categoria neste conjunto serão filtrados. Mutuamente exclusivo com a lista de permissões.
    • Localidade dos nomes de exibição: any string
    • Resultados máximos: 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
    • Localidade dos nomes de exibição: "en"
    • Resultados máximos: -1
    • Limite de pontuação: 0
    • Lista de permissões de categoria: vazia
    • Lista de bloqueio de 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.
  • Resultados máximos: o número máximo de resultados de classificação com a maior pontuação a serem retornados. Se for < 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 categoria: a lista de permissões de nomes de categorias. Se não estiver vazio, os resultados de classificação cuja categoria não estiver neste conjunto serão filtrados. Mutuamente exclusivo com a lista de bloqueio.
  • Lista de bloqueio de categorias: lista de nomes de categorias. Se não estiver vazio, os resultados de classificação com a categoria neste conjunto serão filtrados. Mutuamente exclusivo com a lista de permissões.
    • Localidade dos nomes de exibição: any string
    • Resultados máximos: 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
    • Localidade dos nomes de exibição: "en"
    • Resultados máximos: -1
    • Limite de pontuação: 0
    • Lista de permissões de categoria: vazia
    • Lista de bloqueio de categoria: vazia
    result_callback Define o listener de resultado para receber os resultados de 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 execução está definido como LIVE_STREAM. ResultListener N/A N/A

    Modelos

    O Gesture Recognizer usa um pacote de modelos com dois pacotes de modelos pré-empacotados: um de modelo de ponto de referência da mão e um de modelo de classificação de gestos. O modelo de marco 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 Forma 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 modelo de ponto de referência manual

    O pacote de modelo de marco da mão detecta a localização do ponto principal de 21 coordenadas de juntas da mão nas regiões da mão detectadas. O modelo foi treinado em aproximadamente 30 mil imagens do mundo real, além de vários modelos de mãos sintéticas renderizados sobre vários planos de fundo. Confira a definição dos 21 marcos abaixo:

    Códigos para pontos de referência específicos da mão

    O pacote de modelo de ponto de referência da mão contém o modelo de detecção de palma e o modelo de detecção de pontos de referência da mão. O modelo de detecção de palmas localiza a região das mãos de 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 cortada da mão 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 reconhecedor de gestos usa a caixa delimitadora definida pelos pontos de referência da mão detectados no frame atual para localizar a região das mãos no próximo frame. Isso reduz as vezes em que o Gesture Recognizer 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 presença de mãos ou quando o rastreamento de mãos falha, o modelo de detecção de palmas é invocado para localizar novamente as mãos.

    Pacote de modelos de classificação de gestos

    O pacote de modelo de classificação de gestos pode reconhecer estes gestos comuns de mão:

    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 reconhecimento de gestos vai retornar o resultado "None". Se o modelo não detectar mãos, o reconhecedor de gestos vai retornar vazio.

    O pacote de modelo 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 modelo de classificação de gestos fornecido contém o classificador de gestos pré-definidos, que detecta os sete gestos comuns de mão 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 Gesture Recognizer com o classificador de gestos pré-definidos 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 GestureRecognizer vai gerar o gesto reconhecido diretamente.

    Comparações de mercado de tarefas

    Confira os comparativos de mercado da tarefa 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 modelo. Use o Model Maker para modificar os modelos fornecidos para esta tarefa antes de criar o seu.

    Para mais informações sobre como personalizar um modelo para essa tarefa, consulte Personalizar modelos para o Gesture Recognizer.