Action Recognition
O reconhecimento de ações, ou reconhecimento de atividades humanas (HAR), identifica o que as pessoas fazem num vídeo ao modelar o movimento ao longo do tempo. Métodos, conjuntos de dados e código.
O reconhecimento de ações é uma tarefa de visão computacional que classifica o que uma pessoa — ou, às vezes, um animal ou robô — está fazendo em um vídeo: caminhando, acenando, caindo, balançando um taco de golfe ou fazendo flexões. Ele estende a classificação de imagens ao longo do tempo, pois muitas ações não podem ser distinguidas em um único quadro. Uma imagem estática de alguém a meio caminho pode mostrar a pessoa sentando-se ou levantando-se, enquanto um clipe curto revela qual das ações está ocorrendo. O termo costuma ser usado como sinônimo de reconhecimento de atividades humanas (HAR), embora HAR também abranja o reconhecimento com sensores vestíveis, como acelerômetros.
Como funciona o reconhecimento de ações#
Os modelos recebem um clipe, geralmente com 8 a 64 quadros amostrados de alguns segundos de vídeo, e aprendem dois tipos de informação: características espaciais que descrevem a aparência de pessoas e objetos e características temporais que descrevem seus movimentos. As primeiras redes de dois fluxos processavam quadros RGB e fluxo óptico em ramos separados e combinavam suas previsões. As redes neurais convolucionais 3D fazem convoluções simultaneamente na altura, largura e dimensão temporal; a I3D foi criada inflando para 3D filtros de imagem 2D pré-treinados na ImageNet, e a SlowFast combina um fluxo de baixa taxa de quadros para a aparência com outro de alta taxa para o movimento. Os Transformers de vídeo aplicam autoatenção a blocos espaço-temporais, e o VideoMAE faz o pré-treinamento desses modelos reconstruindo vídeos com grande parte dos quadros mascarada.
Uma CNN 3D dos modelos de vídeo do TorchVision classifica um clipe com poucas linhas de código:
import cv2
import numpy as np
import torch
from torchvision.models.video import R3D_18_Weights, r3d_18
# Load a 3D CNN pretrained on the 400 action classes of Kinetics-400
weights = R3D_18_Weights.KINETICS400_V1
model = r3d_18(weights=weights).eval()
# Read 16 consecutive frames from a short exercise video
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solution_ci_pose_demo.mp4")
frames = [cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2RGB) for _ in range(16)]
# Stack the frames into one clip shaped (time, channels, height, width) and classify it
clip = torch.from_numpy(np.stack(frames)).permute(0, 3, 1, 2)
batch = weights.transforms()(clip).unsqueeze(0)
with torch.no_grad():
probs = model(batch).softmax(dim=1)[0]
top = probs.argmax().item()
print(f"{weights.meta['categories'][top]}: {probs[top]:.2f}")O modelo imprime push up: 0.99: ele atribui ao clipe inteiro de meio segundo uma ação entre suas 400 classes.
Os métodos baseados em esqueletos seguem outra abordagem. Primeiro, um modelo de estimativa de pose encontra os pontos-chave do corpo em cada quadro; depois, um modelo temporal, como a rede de grafos ST-GCN, classifica as trajetórias articulares resultantes. Os esqueletos ignoram roupas, iluminação e fundo e são pequenos o bastante para serem processados em tempo real em dispositivos de borda. Os modelos de pose YOLO26 da Ultralytics fornecem os 17 pontos-chave do corpo por pessoa para essa abordagem, e a solução de monitoramento de treinos transforma o ângulo entre três desses pontos-chave em contagens de repetições de exercícios como flexões e agachamentos.
Reconhecimento de ações e tarefas relacionadas#
- Estimativa de pose e rastreamento de objetos: A estimativa de pose localiza as articulações, e o rastreamento mantém a identidade de cada pessoa entre os quadros. Ambos são usados com frequência como entrada para o reconhecimento de ações, que interpreta os movimentos descritos; em uma multidão, cada pessoa rastreada recebe seu próprio clipe e rótulo.
- Localização temporal de ações: Encontra o início e o fim de cada ação em um vídeo longo e sem cortes. A detecção espaciotemporal de ações vai além e delimita cada pessoa em cada quadro, como no conjunto de dados AVA.
- Compreensão de vídeo: Campo mais amplo que também abrange legendagem, respostas a perguntas e raciocínio sobre eventos e causas em vídeos.
Aplicações no mundo real#
- Saúde e cuidados com idosos: Sistemas de detecção de quedas reconhecem uma queda a partir de dados de câmeras ou dispositivos vestíveis e alertam a equipe; aplicativos de reabilitação verificam se os pacientes executam os exercícios corretamente.
- Condicionamento físico e esportes: Aplicativos contam repetições e avaliam a técnica, enquanto a análise esportiva classifica arremessos, passes e tacadas em imagens de transmissões.
- Segurança e proteção: Sistemas de monitoramento sinalizam brigas em espaços públicos e quedas ou levantamento de cargas de forma insegura no chão de fábrica.
- Interação humano-robô: Robôs e dispositivos inteligentes respondem a gestos como acenar ou apontar.
Conjuntos de dados e desafios#
Rotular vídeos exige muito mais esforço do que rotular imagens, por isso o progresso dependeu de grandes conjuntos de dados. O Kinetics-400 contém pelo menos 400 clipes do YouTube, com cerca de 10 segundos cada, para cada uma de suas 400 classes de ações humanas, e o UCF101 tem 13.320 clipes divididos em 101 classes. O Something-Something V2 aborda o viés de cena, a tendência dos modelos a reconhecer a natação pela piscina, em vez das braçadas: seus cerca de 220.000 clipes mostram mãos interagindo com objetos do cotidiano em 174 classes que diferem apenas pelo movimento, como "empurrar algo da esquerda para a direita" e "empurrar algo da direita para a esquerda".










