Surveillance 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
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],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.track(im0, verbose=False) # Tracking recommended
# results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results)
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],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.track(im0, verbose=False) # Tracking recommended
# results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
Soutien
"pushup", "pullup" et "abworkout" pris en charge.
Carte KeyPoints
Arguments AIGym
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 |
line_thickness |
int |
2 |
Épaisseur des lignes tracées. |
view_img |
bool |
False |
Drapeau pour afficher l'image. |
pose_up_angle |
float |
145.0 |
Seuil d'angle pour la pose "en l'air". |
pose_down_angle |
float |
90.0 |
Seuil d'angle pour la pose "en bas". |
pose_type |
str |
pullup |
Type de pose à détecter ('pullup ', pushup , abworkout , squat ). |
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 |
FAQ
Comment puis-je surveiller mes séances d'entraînement à l'aide de Ultralytics YOLOv8 ?
Pour surveiller tes séances d'entraînement à l'aide de Ultralytics YOLOv8 , tu peux utiliser les fonctions d'estimation de la pose pour suivre et analyser les principaux points de repère du corps et les articulations en temps réel. Cela te permet de recevoir des commentaires instantanés sur la forme de tes exercices, de compter les répétitions et de mesurer les performances. Tu peux commencer par utiliser le code d'exemple fourni pour les pompes, les tractions ou les exercices d'abdominaux, comme indiqué :
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],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.track(im0, verbose=False)
im0 = gym_object.start_counting(im0, results)
cv2.destroyAllWindows()
Pour plus de personnalisation et de réglages, tu peux te référer à la section AIGym dans la documentation.
Quels sont les avantages de l'utilisation de Ultralytics YOLOv8 pour le suivi de l'entraînement ?
L'utilisation de Ultralytics YOLOv8 pour le suivi de l'entraînement offre plusieurs avantages clés :
- Des performances optimisées : En adaptant les séances d'entraînement en fonction des données de suivi, tu peux obtenir de meilleurs résultats.
- Atteinte des objectifs : Suit et ajuste facilement les objectifs de remise en forme pour des progrès mesurables.
- Personnalisation : Obtiens des plans d'entraînement personnalisés basés sur tes données individuelles pour une efficacité optimale.
- Sensibilisation à la santé : Détection précoce des schémas qui indiquent des problèmes de santé potentiels ou un surentraînement.
- Décisions éclairées : Prends des décisions fondées sur des données pour ajuster les routines et fixer des objectifs réalistes.
Tu peux regarder une démonstration vidéo sur YouTube pour voir ces avantages en action.
Quelle est la précision de Ultralytics YOLOv8 dans la détection et le suivi des exercices ?
Ultralytics YOLOv8 est très précis dans la détection et le suivi des exercices grâce à ses capacités d'estimation de la pose à la pointe de la technologie. Il peut suivre avec précision les principaux repères corporels et les articulations, fournissant ainsi un retour d'information en temps réel sur la forme de l'exercice et les mesures de performance. Les poids pré-entraînés du modèle et son architecture robuste garantissent une précision et une fiabilité élevées. Pour des exemples concrets, consulte la section des applications réelles dans la documentation, qui présente le comptage des pompes et des tractions.
Puis-je utiliser Ultralytics YOLOv8 pour des programmes d'entraînement personnalisés ?
Oui, Ultralytics YOLOv8 peut être adapté pour des programmes d'entraînement personnalisés. Les AIGym
prend en charge différents types de pose tels que "pushup", "pullup" et "abworkout". Tu peux spécifier des points clés et des angles pour détecter des exercices spécifiques. Voici un exemple de configuration :
from ultralytics import solutions
gym_object = solutions.AIGym(
line_thickness=2,
view_img=True,
pose_type="squat",
kpts_to_check=[6, 8, 10],
)
Pour plus de détails sur la définition des arguments, reporte-toi à la rubrique Arguments AIGym
section. Cette flexibilité te permet de surveiller divers exercices et de personnaliser les routines en fonction de tes besoins.
Comment puis-je sauvegarder la sortie du suivi de la séance d'entraînement en utilisant Ultralytics YOLOv8 ?
Pour sauvegarder la sortie du suivi de la séance d'entraînement, tu peux modifier le code pour inclure un graveur vidéo qui sauvegarde les images traitées. Voici un exemple :
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],
)
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.track(im0, verbose=False)
im0 = gym_object.start_counting(im0, results)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
Cette configuration écrit la vidéo surveillée dans un fichier de sortie. Pour plus de détails, reporte-toi à la section Contrôle des séances d'entraînement avec enregistrement de la sortie.
Créé le 2023-12-02, Mis à jour le 2024-07-05
Auteurs : glenn-jocher (12), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (4)