Skip to content

Suivi des séances d'entraînement à l'aide de Ultralytics YOLOv8 🚀

Le suivi des séances d'entraînement grâce à l'estimation de la pose avec Ultralytics YOLOv8 améliore l'évaluation des exercices en suivant avec précision les principaux repères corporels et les articulations en temps réel. Cette technologie fournit un retour instantané sur la forme de l'exercice, suit les routines d'entraînement et mesure les performances, optimisant ainsi les séances d'entraînement pour les utilisateurs comme pour les formateurs.

Avantages de la surveillance des séances d'entraînement ?

  • Performance optimisĂ©e : Adapter les sĂ©ances d'entraĂ®nement en fonction des donnĂ©es de suivi pour obtenir de meilleurs rĂ©sultats.
  • Atteinte des objectifs : Suit et ajuste les objectifs de remise en forme pour obtenir des progrès mesurables.
  • Personnalisation : Plans d'entraĂ®nement personnalisĂ©s basĂ©s sur les donnĂ©es individuelles pour plus d'efficacitĂ©.
  • Sensibilisation Ă  la santĂ© : DĂ©tection prĂ©coce des schĂ©mas indiquant des problèmes de santĂ© ou de surentraĂ®nement.
  • Des dĂ©cisions Ă©clairĂ©es : Des dĂ©cisions fondĂ©es sur des donnĂ©es pour ajuster les routines et fixer des objectifs rĂ©alistes.

Applications dans le monde réel

Suivi des séances d'entraînement Suivi des séances d'entraînement
Comptage des pompes Compte les tractions
Comptage des pompes Compte les tractions

Exemple de suivi des séances d'entraînement

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()
Soutien

"pushup", "pullup" et "abworkout" pris en charge.

Carte KeyPoints

keyPoints Order Ultralytics YOLOv8  Pose

Arguments set_args

Nom Type DĂ©faut Description
kpts_to_check list None Liste des trois points clés de l'index, pour compter les séances d'entraînement spécifiques, suivie du point clé Carte
view_img bool False Affiche le cadre avec les comptes
line_thickness int 2 Augmente l'Ă©paisseur de la valeur de comptage
pose_type str pushup Pose qui doit être surveillée, "pullup" et "abworkout" également pris en charge.
pose_up_angle int 145 Valeur de l'angle de pose vers le haut
pose_down_angle int 90 Valeur de l'angle de descente de la pose

Arguments model.predict

Nom Type DĂ©faut Description
source str 'ultralytics/assets' répertoire source pour les images ou les vidéos
conf float 0.25 seuil de confiance de l'objet pour la détection
iou float 0.7 seuil d'intersection sur l'union (IoU) pour NMS
imgsz int or tuple 640 taille de l'image sous forme de scalaire ou de liste (h, w), c'est-Ă -dire (640, 480)
half bool False utiliser la demi-précision (FP16)
device None or str None périphérique à utiliser, c'est-à-dire cuda device=0/1/2/3 ou device=cpu
max_det int 300 nombre maximum de détections par image
vid_stride bool False taux d'images vidéo stride
stream_buffer bool False mettre en mémoire tampon toutes les images de streaming (True) ou renvoyer l'image la plus récente (False)
visualize bool False visualise les caractéristiques du modèle
augment bool False applique l'augmentation d'image aux sources de prédiction
agnostic_nms bool False NMS agnostique
classes list[int] None filtre les résultats par classe, c'est-à-dire classes=0, ou classes=[0,2,3]
retina_masks bool False utiliser des masques de segmentation à haute résolution
embed list[int] None renvoie les vecteurs de caractéristiques/embeddings des couches données


Créé le 2023-12-02, Mis à jour le 2024-01-15
Auteurs : glenn-jocher (4), chr043416@gmail.com (2), RizwanMunawar (1)

Commentaires