Guia de detecção de pontos de referência para a Web

A tarefa MediaPipe Pose Scoreer permite detectar pontos de referência de corpos humanos em uma imagem ou vídeo. Você pode usar essa tarefa para identificar as principais localizações do corpo, analisar a postura, e categorizar movimentos. Essa tarefa usa modelos de machine learning (ML) que funcionam com imagens ou vídeos únicos. A tarefa gera pontos de referência de posições do corpo na imagem e em coordenadas mundiais tridimensionais.

Estas instruções mostram como usar o Pose Scoreer para Web e JavaScript apps. Para mais informações sobre recursos, modelos e configurações dessa tarefa, consulte a Visão geral.

Exemplo de código

O código de exemplo para Pose Scoreer fornece uma implementação completa deste em JavaScript para sua referência. Esse código ajuda a testar a tarefa começou a criar seu próprio aplicativo de ponto de referência de poses. Você pode exibir, executar e Editar o exemplo de código do marcador de posição de posições usando apenas seu navegador da Web.

Configuração

Esta seção descreve as principais etapas para configurar seu ambiente de desenvolvimento especificamente para usar o Ponto de referência de postura. Para informações gerais a configuração do seu ambiente de desenvolvimento da Web e JavaScript, incluindo requisitos de versão da plataforma, consulte Guia de configuração para a Web.

Pacotes JavaScript

O código do Pose Scoreer está disponível no MediaPipe @mediapipe/tasks-vision. NPM (em inglês). Você pode encontre e faça o download dessas bibliotecas seguindo as instruções na plataforma Guia de configuração.

Instale os pacotes necessários por meio do NPM usando o seguinte comando:

npm install @mediapipe/tasks-vision

Se você quiser importar o código da tarefa por uma rede de fornecimento de conteúdo (CDN) adicione o seguinte código no cabeçalho <head> no seu arquivo HTML:

<!-- You can replace JSDeliver with another CDN if you prefer -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Modelo

A tarefa MediaPipe Pose Scoreer requer um modelo treinado que seja compatível com esse tarefa. Para mais informações sobre os modelos treinados disponíveis para o Pose Scoreer, consulte na seção de visão geral da tarefa Modelos.

Selecione e faça o download de um modelo e armazene-o no diretório do projeto:

<dev-project-root>/app/shared/models/

Criar a tarefa

Use uma das funções createFrom...() do Pose Scoreer para preparar a tarefa para executar inferências. Usar a createFromModelPath() função com um caminho relativo ou absoluto para o arquivo de modelo treinado. Se o modelo já estiver carregado na memória, é possível usar createFromModelBuffer().

O exemplo de código abaixo demonstra o uso da função createFromOptions() para para configurar a tarefa. A função createFromOptions() permite personalizar Posicione o ponto de referência com opções de configuração. Para mais informações sobre configurações opções, consulte Opções de configuração.

O código a seguir demonstra como criar e configurar a tarefa com comandos opções:

const vision = await FilesetResolver.forVisionTasks(
  // path/to/wasm/root
  "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const poseLandmarker = await poseLandmarker.createFromOptions(
    vision,
    {
      baseOptions: {
        modelAssetPath: "path/to/model"
      },
      runningMode: runningMode
    });

Opções de configuração

Esta tarefa tem as seguintes opções de configuração para Web e JavaScript aplicativos:

Nome da opção Descrição Intervalo de valor Valor padrão
runningMode Define o modo de execução da tarefa. Existem duas modos:

IMAGEM: o modo para entradas de imagem única.

VÍDEO: o modo para frames decodificados de um vídeo ou em uma transmissão ao vivo de dados de entrada, como de uma câmera.
{IMAGE, VIDEO} IMAGE
numPoses O número máximo de poses que podem ser detectadas pelo Faça uma pose de referência. Integer > 0 1
minPoseDetectionConfidence A pontuação de confiança mínima para que a detecção de pose seja considerada bem-sucedida. Float [0.0,1.0] 0.5
minPosePresenceConfidence A pontuação de confiança mínima da presença de pose na detecção de pontos de referência de poses. Float [0.0,1.0] 0.5
minTrackingConfidence A pontuação de confiança mínima para o rastreamento de pose para ser considerado bem-sucedido. Float [0.0,1.0] 0.5
outputSegmentationMasks Define se o Pose Scoreer gera uma máscara de segmentação para o objeto detectado. pose Boolean False

Preparar dados

O Ponto de referência de poses pode detectar poses em imagens em qualquer formato suportado pelo navegador host. A tarefa também lida com o pré-processamento de entrada de dados, incluindo redimensionamento, rotação e normalização de valores. Para poses históricas em vídeos, você pode usar a API para processar rapidamente um frame por vez, usando a marcação de tempo do frame para determinar quando as posturas ocorrem no vídeo.

Executar a tarefa

O ponto de referência de postura usa o detect() (com o modo de execução IMAGE) e Métodos detectForVideo() (com o modo de execução VIDEO) para acionar ou inferências. A tarefa processa os dados, tenta marcar poses como ponto de referência e e informa os resultados.

As chamadas para os métodos detect() e detectForVideo() do ponto de referência de posições são executadas. de forma síncrona e bloquear a linha de execução de interposição do usuário. Se você detectar poses nos frames de vídeo da câmera de um dispositivo, cada detecção bloqueia fio Para evitar isso, implemente workers da Web para executar o detect(). e detectForVideo() em outra linha de execução.

O código a seguir demonstra como executar o processamento com o modelo de tarefas:

Imagem

const image = document.getElementById("image") as HTMLImageElement;
const poseLandmarkerResult = poseLandmarker.detect(image);

Vídeo

await poseLandmarker.setOptions({ runningMode: "VIDEO" });

let lastVideoTime = -1;
function renderLoop(): void {
  const video = document.getElementById("video");

  if (video.currentTime !== lastVideoTime) {
    const poseLandmarkerResult = poseLandmarker.detectForVideo(video);
    processResults(detections);
    lastVideoTime = video.currentTime;
  }

  requestAnimationFrame(() => {
    renderLoop();
  });
}

Para ver uma implementação mais completa da execução de uma tarefa de Pose Scoreer, consulte o exemplo de código.

Gerenciar e exibir resultados

O ponto de referência de posições retorna um objeto poseLandmarkerResult para cada detecção. correr. O objeto do resultado contém coordenadas para cada ponto de referência de pose.

Confira abaixo um exemplo dos dados de saída desta tarefa:

PoseLandmarkerResult:
  Landmarks:
    Landmark #0:
      x            : 0.638852
      y            : 0.671197
      z            : 0.129959
      visibility   : 0.9999997615814209
      presence     : 0.9999984502792358
    Landmark #1:
      x            : 0.634599
      y            : 0.536441
      z            : -0.06984
      visibility   : 0.999909
      presence     : 0.999958
    ... (33 landmarks per pose)
  WorldLandmarks:
    Landmark #0:
      x            : 0.067485
      y            : 0.031084
      z            : 0.055223
      visibility   : 0.9999997615814209
      presence     : 0.9999984502792358
    Landmark #1:
      x            : 0.063209
      y            : -0.00382
      z            : 0.020920
      visibility   : 0.999976
      presence     : 0.999998
    ... (33 world landmarks per pose)
  SegmentationMasks:
    ... (pictured below)

A saída contém coordenadas normalizadas (Landmarks) e coordenadas mundiais coordenadas (WorldLandmarks) para cada ponto de referência.

A saída contém as seguintes coordenadas normalizadas (Landmarks):

  • x e y: coordenadas de ponto de referência normalizadas entre 0,0 e 1,0 pelo largura (x) e altura (y) da imagem.

  • z: a profundidade do ponto de referência, com a profundidade no ponto médio dos quadris como origem. Quanto menor o valor, mais perto o ponto de referência está da câmera. A a magnitude de z usa aproximadamente a mesma escala de x.

  • visibility: a probabilidade de o ponto de referência ficar visível na imagem.

A saída contém as seguintes coordenadas mundiais (WorldLandmarks):

  • x, y e z: coordenadas tridimensionais reais em metros, com o ponto médio dos quadris como origem.

  • visibility: a probabilidade de o ponto de referência ficar visível na imagem.

A imagem abaixo mostra uma visualização da saída da tarefa:

A máscara de segmentação opcional representa a probabilidade de cada pixel pertencer para uma pessoa detectada. A imagem a seguir é uma máscara de segmentação da saída da tarefa:

O código de exemplo de Pose Scoreer demonstra como exibir o resultados retornados da tarefa, consulte a exemplo de código