Guia de tarefas de reconhecimento de gestos

A tarefa Reconhecedor de gestos do MediaPipe permite reconhecer gestos das mãos em tempo real e fornece os resultados de gestos de mão reconhecidos, juntamente com os pontos de referência do mãos detectadas. Você pode usar essa tarefa para reconhecer gestos de mão específicos de um usuário e invocar recursos de aplicativo que correspondem 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 manualmente coordenadas de imagem, pontos de referência da mão em coordenadas mundiais, mão dominante (mão esquerda/direita) e categorias de gestos de várias mãos.

Faça um teste!

Começar

Comece a usar esta tarefa seguindo um destes guias de implementação para sua plataforma de destino. Estes guias específicos da plataforma orientam você em um processo a implementação dessa tarefa, usando um modelo recomendado, e forneça exemplos de código com as opções de configuração recomendadas:

.

Detalhes da tarefa

Esta seção descreve as capacidades, entradas, saídas e configurações dessa tarefa.

Recursos

  • Processamento de imagens de entrada: o processamento inclui rotação, redimensionamento, normalização e conversão de espaço de cores.
  • Limite de pontuação: filtra os resultados com base nas pontuações da previsão.
  • Lista de permissões e bloqueio de marcadores: especifique as categorias de gestos. reconhecida 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 com as mãos
  • Mãos detectadas
  • Pontos de referência das mãos detectadas em coordenadas de imagem
  • Pontos de referência de mãos detectadas em coordenadas mundiais

Opções de configurações

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. Existem três modos:

IMAGEM: o modo para entradas de imagem única.

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

LIVE_STREAM: o modo de transmissão ao vivo da entrada dados de uma câmera, por exemplo. Neste modo, resultListener deve ser chamado para configurar um listener e receber resultados de forma assíncrona.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands O número máximo de ponteiros pode ser detectado pelo o 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 bem-sucedido 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 da mão modelo de detecção de pontos de referência. Nos modos de vídeo e de transmissão ao vivo do Reconhecedor de gestos, se a pontuação de confiança da presença da mão do modelo de ponto de referência da mão estiver abaixo de esse limite, isso aciona o modelo de detecção de palmas. Caso contrário, um O algoritmo leve de rastreamento da mão é usado para determinar a localização as mãos para detecção posterior de 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 as mãos no do frame atual e do último. Nos modos "Vídeo" e "Transmissão" de Reconhecedor de gestos: se o rastreamento falhar, o Reconhecedor de gestos aciona a mão detecção de ameaças. 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 automáticos. 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 nos metadados do modelo TFLite, se houver.
  • Máximo de resultados: o número máximo de resultados da classificação com 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 com os nomes das categorias. Se não estiver vazio, os resultados da classificação cuja categoria não estiver nesse conjunto serão filtrados. Mutuamente exclusivo com a lista de bloqueio.
  • Lista de bloqueio de categorias: a lista de bloqueio de nomes de categorias. Se não estiver vazio, os resultados da classificação cuja categoria estiver nesse conjunto serão filtrados. Mutuamente exclusivo com a lista de permissões.
    • Localidade 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 de categorias: vector of strings
    • Lista de bloqueio de categorias: vector of strings
    • Localidade dos nomes de exibição: "en"
    • Máximo de resultados: -1
    • Limite de pontuação: 0
    • Lista de permissões de categorias: vazia
    • Lista de bloqueio de categorias: 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 nos metadados do modelo TFLite, se houver.
  • Máximo de resultados: o número máximo de resultados da classificação com 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 com os nomes das categorias. Se não estiver vazio, os resultados da classificação cuja categoria não estiver nesse conjunto serão filtrados. Mutuamente exclusivo com a lista de bloqueio.
  • Lista de bloqueio de categorias: a lista de bloqueio de nomes de categorias. Se não estiver vazio, os resultados da classificação cuja categoria estiver nesse conjunto serão filtrados. Mutuamente exclusivo com a lista de permissões.
    • Localidade 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 de categorias: vector of strings
    • Lista de bloqueio de categorias: vector of strings
    • Localidade dos nomes de exibição: "en"
    • Máximo de resultados: -1
    • Limite de pontuação: 0
    • Lista de permissões de categorias: vazia
    • Lista de bloqueio de categorias: vazia
    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 corrida está definido como LIVE_STREAM ResultListener N/A N/A

    Modelos

    O Reconhecedor de gestos usa um pacote de modelos com dois pacotes de modelos pré-empacotados: um pacote de modelo de ponto de referência à mão e outro de modelo de classificação de gestos. A um modelo de ponto de referência detecta a presença de mãos e geometria da mão, e o gesto reconhece gestos com base na geometria da mão.

    Nome do modelo Inserir formato Tipo de quantização Card de modelo Versões
    HandGestureClassifier 192 x 192 e 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 nesta tarefa, consulte a página Personalizar modelos para o Reconhecedor de gestos.

    Pacote de modelo de ponto de referência na mão

    O pacote do modelo de ponto de referência da mão detecta a localização de 21 pontos-chave coordenadas dentro das regiões da mão detectadas. O modelo foi treinado com aproximadamente 30 mil imagens reais, bem como várias mãos sintéticas renderizadas modelos impostos em vários contextos. Veja a definição dos 21 pontos de referência abaixo:

    O pacote do modelo de ponto de referência da mão contém modelos de detecção de palmas e de detecção de pontos de referência da mão. O modelo de detecção de palmas localiza a região mãos de toda a imagem de entrada, e o modelo de detecção de pontos de referência os pontos de referência na imagem de mão cortada definida pelo modelo de detecção de palma.

    Como o modelo de detecção de palmas demora muito, no modo de vídeo ou ao vivo de streaming, o Reconhecedor de gestos usa a caixa delimitadora definida pela mão detectada pontos de referência no frame atual para localizar a região das mãos no próximo frame. Isso reduz o tempo 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 número de mãos ou se o rastreamento das mãos falhar, o modelo de detecção de palma está invocado para realocar as mãos.

    Pacote de modelo de classificação de gestos

    O pacote do 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 detecta mãos, mas não reconhece um gesto, o gesto reconhecedor retorna um resultado "Nenhum". Se o modelo não detectar mãos, a o reconhecedor de gestos retorna um valor vazio.

    O pacote do modelo de classificação de gestos contém um pipeline de rede neural em duas etapas com um modelo de embedding de gestos seguido por um modelo de classificação por gestos. Confira mais detalhes no card de 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 atributo um vetor de entrada como entrada. O pacote do modelo de classificação de gestos fornecido contém os classificador de gestos automáticos, que detecta os sete gestos comuns introduzidos acima. Treine o pacote de modelos para ampliar o reconhecimento de gestos seu próprio classificador de gestos personalizados. Confira mais detalhes a seguir Seção Modelos personalizados.

    Reconhecedor de gestos com classificador automático e classificador de gestos personalizado prefere o gesto personalizado se ambos os classificadores reconhecerem o mesmo gesto na suas categorias. Se apenas um classificador de gestos reconhecer o gesto, O reconhecedor de gestos gera o gesto reconhecido diretamente.

    Comparativos de mercado de tarefas

    Estas são as comparações de tarefas para todo o pipeline com base no que foi descrito acima os modelos pré-treinados. O resultado é a latência média do Pixel 6 que usa CPU / GPU.

    Nome do modelo Latência da CPU Latência da GPU
    GestureRecognizer 16,76 ms 20,87 ms

    Modelos personalizados

    Se você quer melhorar ou alterar as capacidades dos modelos fornecidos é possível usar o Model Maker para modificar os modelos atuais. Modelos personalizados usados com o MediaPipe precisam estar no formato .task, que é um arquivo de pacote de modelo. Você usar o Model Maker para modificar os modelos fornecidos para essa tarefa antes de criar o seu.

    Para mais informações sobre como personalizar um modelo para esta tarefa, consulte Personalize modelos para o reconhecedor de gestos.