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

Nome Tipo Predefinição Descrição
source str 'ultralytics/assets' diretório de origem para imagens ou vídeos
conf float 0.25 limiar de confiança do objeto para deteção
iou float 0.7 limiar de intersecção sobre a união (IoU) para os NMS
imgsz int or tuple 640 tamanho da imagem como escalar ou lista (h, w), ou seja, (640, 480)
half bool False utiliza meia precisão (FP16)
device None or str None dispositivo a ser executado, ou seja, cuda device=0/1/2/3 ou device=cpu
max_det int 300 número máximo de detecções por imagem
vid_stride bool False taxa de fotogramas do vídeo
stream_buffer bool False guarda todos os fotogramas de transmissão (True) ou devolve o fotograma mais recente (False)
visualize bool False visualiza as características do modelo
augment bool False aplica o aumento de imagem a fontes de previsão
agnostic_nms bool False NMS com diagnóstico de classe
classes list[int] None filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3]
retina_masks bool False utiliza máscaras de segmentação de alta resolução
embed list[int] None devolve vectores de características/embeddings de determinadas camadas

Argumentos model.track

Nome Tipo Predefinição Descrição
source im0 None diretório de origem para imagens ou vídeos
persist bool False persistência de faixas entre fotogramas
tracker str botsort.yaml Método de rastreio 'bytetrack' ou 'botsort'
conf float 0.3 Limiar de confiança
iou float 0.5 Limiar IOU
classes list None filtra os resultados por classe, ou seja, classes=0, ou classes=[0,2,3]
verbose bool True Apresenta os resultados do rastreio de objectos

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.



Criado em 2023-12-02, Atualizado em 2024-07-05
Autores: glenn-jocher (12), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (4)

Comentários