Salta para o conteúdo

Monitorização dos treinos utilizando Ultralytics YOLOv8

Monitoriza os treinos através da estimativa de pose com o Ultralytics YOLOv8 melhora a avaliação do exercício ao seguir com precisão os principais pontos de referência do corpo e as articulações em tempo real. Esta tecnologia fornece feedback instantâneo sobre a forma do exercício, acompanha as rotinas de treino e mede as métricas de desempenho, optimizando as sessões de treino tanto para os utilizadores como para os treinadores.



Observa: Monitorização de exercícios utilizando Ultralytics YOLOv8 | Flexões, Pullups, Ab Workouts

Vantagens da monitorização dos treinos?

  • Desempenho optimizado: Adapta os treinos com base nos dados de monitorização para obteres melhores resultados.
  • Alcança os objectivos: Acompanha e ajusta os objectivos de fitness para um progresso mensurável.
  • Personalização: Planos de treino personalizados com base em dados individuais para uma maior eficácia.
  • Sensibilização para a saúde: Deteção precoce de padrões que indicam problemas de saúde ou excesso de treino.
  • Decisões informadas: Decisões baseadas em dados para ajustar as rotinas e estabelecer objectivos realistas.

Aplicações no mundo real

Monitorização dos treinos Monitorização dos treinos
Flexões Contando Contagem de PullUps
Flexões Contando Contagem de PullUps

Exemplo de monitorização de treinos

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="pushup",
    kpts_to_check=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)  # Tracking recommended
    # results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results)

cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="pushup",
    kpts_to_check=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)  # Tracking recommended
    # results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()
Apoia

Suporta "pushup", "pullup" e "abworkout"

Mapa de pontos-chave

keyPoints Ordem Ultralytics YOLOv8  Pose

Argumentos AIGym

Nome Tipo Predefinição Descrição
kpts_to_check list None Lista de três índices de pontos-chave, para contar um treino específico, seguido do mapa de pontos-chave
line_thickness int 2 Espessura das linhas desenhadas.
view_img bool False Marca para apresentar a imagem.
pose_up_angle float 145.0 Limite de ângulo para a pose "para cima".
pose_down_angle float 90.0 Limite de ângulo para a pose "para baixo".
pose_type str pullup Tipo de pose a detetar ('pullup', pushup, abworkout, squat).

Argumentos model.predict

Argumenta Tipo Predefinição Descrição
source str 'ultralytics/assets' Especifica a fonte de dados para inferência. Pode ser um caminho de imagem, ficheiro de vídeo, diretório, URL ou ID de dispositivo para feeds em direto. Suporta uma vasta gama de formatos e fontes, permitindo uma aplicação flexível em diferentes tipos de entrada.
conf float 0.25 Define o limite mínimo de confiança para as detecções. Os objectos detectados com confiança abaixo deste limite serão ignorados. Ajustar este valor pode ajudar a reduzir os falsos positivos.
iou float 0.7 Limiar de Intersecção sobre União (IoU) para Supressão Não Máxima (NMS). Valores mais baixos resultam em menos detecções, eliminando caixas sobrepostas, o que é útil para reduzir duplicados.
imgsz int or tuple 640 Define o tamanho da imagem para inferência. Pode ser um único número inteiro 640 para redimensionamento quadrado ou uma tupla (altura, largura). O dimensionamento correto pode melhorar a precisão da deteção e a velocidade de processamento.
half bool False Permite a inferência de meia-precisão (FP16), que pode acelerar a inferência de modelos em GPUs compatíveis com um impacto mínimo na precisão.
device str None Especifica o dispositivo para inferência (por exemplo, cpu, cuda:0 ou 0). Permite que os utilizadores seleccionem entre CPU, um GPU específico, ou outros dispositivos de computação para a execução do modelo.
max_det int 300 Número máximo de detecções permitidas por imagem. Limita o número total de objectos que o modelo pode detetar numa única inferência, evitando saídas excessivas em cenas densas.
vid_stride int 1 Avanço de fotogramas para entradas de vídeo. Permite saltar fotogramas em vídeos para acelerar o processamento à custa da resolução temporal. Um valor de 1 processa cada fotograma, valores mais altos saltam fotogramas.
stream_buffer bool False Determina se todos os quadros devem ser armazenados em buffer ao processar fluxos de vídeo (True), ou se o modelo deve retornar o quadro mais recente (False). Útil para aplicações em tempo real.
visualize bool False Ativa a visualização dos recursos do modelo durante a inferência, fornecendo informações sobre o que o modelo está "vendo". Útil para depuração e interpretação do modelo.
augment bool False Permite o aumento do tempo de teste (TTA) para previsões, melhorando potencialmente a robustez da deteção à custa da velocidade de inferência.
agnostic_nms bool False Permite a supressão não máxima (NMS) independente de classe, que mescla caixas sobrepostas de classes diferentes. Útil em cenários de deteção de várias classes em que a sobreposição de classes é comum.
classes list[int] None Filtra as previsões para um conjunto de IDs de classe. Apenas as detecções pertencentes às classes especificadas serão retornadas. Útil para se concentrar em objetos relevantes em tarefas de deteção de várias classes.
retina_masks bool False Usa máscaras de segmentação de alta resolução, se disponíveis no modelo. Isso pode melhorar a qualidade da máscara para tarefas de segmentação, fornecendo detalhes mais finos.
embed list[int] None Especifica as camadas a partir das quais se extraem vectores de características ou incorporações. Útil para tarefas a jusante como o agrupamento ou a pesquisa de semelhanças.

Argumentos model.track

Argumenta Tipo Predefinição Descrição
source str None Specifies the source directory for images or videos. Supports file paths and URLs.
persist bool False Enables persistent tracking of objects between frames, maintaining IDs across video sequences.
tracker str botsort.yaml Specifies the tracking algorithm to use, e.g., bytetrack.yaml ou botsort.yaml.
conf float 0.3 Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives.
iou float 0.5 Sets the Intersection over Union (IoU) threshold for filtering overlapping detections.
classes list None Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes.
verbose bool True Controls the display of tracking results, providing a visual output of tracked objects.

FAQ

Como é que monitorizo os meus treinos utilizando Ultralytics YOLOv8 ?

Para monitorizar os teus treinos utilizando Ultralytics YOLOv8 , podes utilizar as capacidades de estimativa de pose para seguir e analisar os principais pontos de referência do corpo e as articulações em tempo real. Isto permite-te receber feedback instantâneo sobre a tua forma de exercício, contar repetições e medir métricas de desempenho. Podes começar por utilizar o código de exemplo fornecido para flexões, pullups ou exercícios abdominais, conforme ilustrado:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="pushup",
    kpts_to_check=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)
    im0 = gym_object.start_counting(im0, results)

cv2.destroyAllWindows()

Para mais personalizações e definições, podes consultar a secção AIGym na documentação.

Quais são as vantagens de utilizar Ultralytics YOLOv8 para monitorizar o treino?

A utilização de Ultralytics YOLOv8 para monitorizar o treino proporciona várias vantagens importantes:

  • Desempenho optimizado: Ao adaptar os treinos com base nos dados de monitorização, podes obter melhores resultados.
  • Alcança os teus objectivos: Acompanha e ajusta facilmente os objectivos de fitness para um progresso mensurável.
  • Personalização: Obtém planos de treino personalizados com base nos teus dados individuais para uma eficácia óptima.
  • Sensibilização para a saúde: Deteção precoce de padrões que indicam potenciais problemas de saúde ou excesso de treino.
  • Toma decisões informadas: Toma decisões baseadas em dados para ajustar as rotinas e definir objectivos realistas.

Podes ver um vídeo de demonstração no YouTube para veres estas vantagens em ação.

Qual é a precisão do Ultralytics YOLOv8 na deteção e acompanhamento de exercícios?

Ultralytics YOLOv8 é altamente preciso na deteção e seguimento de exercícios devido às suas capacidades de estimação de pose de última geração. Consegue seguir com precisão os principais pontos de referência e articulações do corpo, fornecendo feedback em tempo real sobre a forma do exercício e as métricas de desempenho. Os pesos pré-treinados e a arquitetura robusta do modelo garantem uma elevada precisão e fiabilidade. Para exemplos do mundo real, consulta a secção de aplicações do mundo real na documentação, que apresenta a contagem de flexões e pullups.

Posso utilizar Ultralytics YOLOv8 para rotinas de treino personalizadas?

Sim, Ultralytics YOLOv8 pode ser adaptado para rotinas de treino personalizadas. O AIGym A classe suporta diferentes tipos de pose, como "pushup", "pullup" e "abworkout". Podes especificar pontos-chave e ângulos para detetar exercícios específicos. Aqui tens um exemplo de configuração:

from ultralytics import solutions

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="squat",
    kpts_to_check=[6, 8, 10],
)

Para mais pormenores sobre a definição de argumentos, consulta a secção Argumentos AIGym secção. Esta flexibilidade permite-te monitorizar vários exercícios e personalizar as rotinas com base nas tuas necessidades.

Como é que posso guardar a saída de monitorização do treino utilizando Ultralytics YOLOv8 ?

Para guardar o resultado da monitorização do exercício, podes modificar o código para incluir um gravador de vídeo que guarde os fotogramas processados. Vê um exemplo:

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n-pose.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="pushup",
    kpts_to_check=[6, 8, 10],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)
    im0 = gym_object.start_counting(im0, results)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()

Esta configuração grava o vídeo monitorado em um arquivo de saída. Para obter mais detalhes, consulta a secção Monitorização de Workouts com Gravação de Saída.


📅C riado há 9 meses ✏️ Atualizado há 3 dias

Comentários