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

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],
)

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()
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],
)

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 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 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


Created 2023-12-02, Updated 2024-06-10
Authors: glenn-jocher (10), IvorZhu331 (1), RizwanMunawar (4)

Coment√°rios