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.
Regarde : Suivi des séances d'entraînement à l'aide de Ultralytics YOLOv8 | Pompes, tractions, séances d'entraînement pour les abdominaux
Avantages du suivi 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 |
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.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()
Soutien
"pushup", "pullup" et "abworkout" pris en charge.
Carte KeyPoints
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 ont besoin d'être surveillés, pullup et abworkout également soutenu |
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 |
Arguments model.track
Nom | Type | Défaut | Description |
---|---|---|---|
source |
im0 |
None |
répertoire source pour les images ou les vidéos |
persist |
bool |
False |
persistance des pistes entre les images |
tracker |
str |
botsort.yaml |
Méthode de suivi 'bytetrack' ou 'botsort' |
conf |
float |
0.3 |
Seuil de confiance |
iou |
float |
0.5 |
Seuil de reconnaissance de dette |
classes |
list |
None |
filtre les résultats par classe, c'est-à-dire classes=0, ou classes=[0,2,3] |
verbose |
bool |
True |
Affiche les résultats du suivi des objets |