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.

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 exercícios

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.predict(im0, verbose=False)
    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.predict(im0, verbose=False)
    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 suportados
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 às 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


Criado em 2023-12-02, Atualizado em 2024-01-15
Autores: glenn-jocher (4), chr043416@gmail.com (2), RizwanMunawar (1)

Coment√°rios