Salta para o conteúdo

Monitorização de 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

from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2

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 = ai_gym.AIGym()  # init AI GYM module
gym_object.set_args(line_thickness=2,
                    view_img=True,
                    pose_type="pushup",
                    kpts_to_check=[6, 8, 10])

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

cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2

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 = ai_gym.AIGym()  # init AI GYM module
gym_object.set_args(line_thickness=2,
                    view_img=True,
                    pose_type="pushup",
                    kpts_to_check=[6, 8, 10])

frame_count = 0
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
      print("Video frame is empty or video processing has been successfully completed.")
      break
    frame_count += 1
    results = model.track(im0, verbose=False)  # Tracking recommended
    #results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results, frame_count)
    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 set_args

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
view_img bool False Mostra o quadro com as contagens
line_thickness int 2 Aumenta a espessura do valor de contagem
pose_type str pushup Pose que precisa de ser monitorizada, pullup e abworkout também apoiou
pose_up_angle int 145 Valor do ângulo de pose para cima
pose_down_angle int 90 Valor do ângulo de descida da pose

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 para execução, ou seja, dispositivo cuda=0/1/2/3 ou dispositivo=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


Criado em 2023-12-02, Atualizado em 2024-04-18
Autores: glenn-jocher (6), RizwanMunawar (1)

Comentários