Suivi des séances d'entraînement à l'aide de Ultralytics YOLO11
Le suivi des séances d'entraînement grâce à l'estimation de la pose avec Ultralytics YOLO11 améliore l'évaluation des exercices en suivant avec précision et en temps réel les principaux repères corporels et les articulations. Cette technologie fournit un retour d'information instantané sur la forme de l'exercice, assure le suivi des programmes d'entraînement et mesure les performances, optimisant ainsi les séances d'entraînement pour les utilisateurs comme pour les entraîneurs.
Regarder : Suivi des séances d'entraînement à l'aide de Ultralytics YOLO11 | Pompes, tractions, séances d'entraînement pour les abdominaux
Avantages du suivi des séances d'entraînement ?
- Performances optimisées : Adaptation des séances d'entraînement en fonction des données de suivi pour de meilleurs résultats.
- Atteinte des objectifs : Suivre et ajuster les objectifs de remise en forme pour obtenir des progrès mesurables.
- Personnalisation : Des plans d'entraînement personnalisés basés sur des données individuelles pour plus d'efficacité.
- Sensibilisation à la santé : Détection précoce de 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 | Comptage des tractions |
Exemple de suivi des séances d'entraînement
import cv2
from ultralytics import solutions
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
video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init AIGym
gym = solutions.AIGym(
show=True, # Display the frame
kpts=[6, 8, 10], # keypoints index of person for monitoring specific exercise, by default it's for pushup
model="yolo11n-pose.pt", # Path to the YOLO11 pose estimation model file
# line_width=2, # Adjust the line width for bounding boxes and text display
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
im0 = gym.monitor(im0)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
Carte KeyPoints
Arguments AIGym
Nom | Type | Défaut | Description |
---|---|---|---|
kpts |
list |
None |
Liste des trois points clés de l'index, pour le comptage de la séance d'entraînement spécifique, suivie du point clé Carte |
line_width |
int |
2 |
Epaisseur des lignes tracées. |
show |
bool |
False |
Drapeau pour afficher l'image. |
up_angle |
float |
145.0 |
Seuil d'angle pour la pose "debout". |
down_angle |
float |
90.0 |
Seuil d'angle pour la pose "en bas". |
model |
str |
None |
Chemin d'accès au fichier modèle Ultralytics YOLO Pose |
Arguments model.predict
Argument | Type | Défaut | Description |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Spécifie la source de données pour l'inférence. Il peut s'agir d'un chemin d'accès à une image, d'un fichier vidéo, d'un répertoire, d'une URL ou de l'identifiant d'un appareil pour les flux en direct. La prise en charge d'un large éventail de formats et de sources permet une application flexible à différents types d'entrées. |
conf |
float |
0.25 |
Définit le seuil de confiance minimum pour les détections. Les objets détectés avec un niveau de confiance inférieur à ce seuil ne seront pas pris en compte. L'ajustement de cette valeur peut contribuer à réduire le nombre de faux positifs. |
iou |
float |
0.7 |
Seuil d'intersection au-dessus de l'union (IoU) pour la suppression non maximale (NMS). Des valeurs plus faibles permettent de réduire le nombre de détections en éliminant les boîtes qui se chevauchent, ce qui est utile pour réduire les doublons. |
imgsz |
int or tuple |
640 |
Définit la taille de l'image pour l'inférence. Peut être un seul entier 640 pour un redimensionnement carré ou un tuple (hauteur, largeur). Un dimensionnement adéquat peut améliorer la détection précision et la vitesse de traitement. |
half |
bool |
False |
Permet l'inférence en demi-précision (FP16), ce qui peut accélérer l'inférence du modèle sur les GPU pris en charge avec un impact minimal sur la précision. |
device |
str |
None |
Spécifie le dispositif d'inférence (par ex, cpu , cuda:0 ou 0 ). Permet aux utilisateurs de choisir entre CPU, un GPU spécifique ou d'autres dispositifs de calcul pour l'exécution du modèle. |
batch |
int |
1 |
Spécifie la taille du lot pour l'inférence (ne fonctionne que lorsque la source est un répertoire, un fichier vidéo ou .txt fichier). Une taille de lot plus importante peut permettre un débit plus élevé, en réduisant le temps total nécessaire à l'inférence. |
max_det |
int |
300 |
Nombre maximal de détections autorisées par image. Limite le nombre total d'objets que le modèle peut détecter en une seule inférence, ce qui permet d'éviter les sorties excessives dans les scènes denses. |
vid_stride |
int |
1 |
Saut d'images pour les entrées vidéo. Permet de sauter des images dans les vidéos pour accélérer le traitement au détriment de la résolution temporelle. Une valeur de 1 traite chaque image, les valeurs supérieures sautent des images. |
stream_buffer |
bool |
False |
Détermine s'il faut mettre en file d'attente les images entrantes pour les flux vidéo. Si cette option est activée, l'image est mise en file d'attente. False Si `True', les anciennes images sont supprimées pour laisser place aux nouvelles images (optimisé pour les applications en temps réel). Si `True', les nouvelles images sont mises en file d'attente dans un tampon, ce qui garantit qu'aucune image ne sera sautée, mais entraînera une latence si le nombre d'images par seconde de l'inférence est inférieur au nombre d'images par seconde du flux. |
visualize |
bool |
False |
Active la visualisation des caractéristiques du modèle pendant l'inférence, donnant un aperçu de ce que le modèle "voit". Utile pour le débogage et l'interprétation du modèle. |
augment |
bool |
False |
Permet l'augmentation du temps de test (TTA) pour les prédictions, ce qui peut améliorer la robustesse de la détection au détriment de la vitesse d'inférence. |
agnostic_nms |
bool |
False |
Permet la suppression non maximale (NMS) indépendante de la classe, qui fusionne les boîtes de différentes classes qui se chevauchent. Utile dans les scénarios de détection multi-classes où le chevauchement des classes est courant. |
classes |
list[int] |
None |
Filtre les prédictions sur un ensemble d'identifiants de classes. Seules les détections appartenant aux classes spécifiées seront renvoyées. Utile pour se concentrer sur les objets pertinents dans les tâches de détection multi-classes. |
retina_masks |
bool |
False |
Renvoie des masques de segmentation à haute résolution. Les masques retournés (masks.data ) correspondront à la taille de l'image originale si elles sont activées. S'ils sont désactivés, ils ont la taille de l'image utilisée lors de l'inférence. |
embed |
list[int] |
None |
Spécifie les couches à partir desquelles il faut extraire les vecteurs de caractéristiques ou les encastrements. Utile pour les tâches en aval telles que le regroupement ou la recherche de similarités. |
project |
str |
None |
Nom du répertoire du projet dans lequel les résultats de la prédiction sont enregistrés si save est activée. |
name |
str |
None |
Nom de l'exécution de la prédiction. Utilisé pour créer un sous-répertoire dans le dossier du projet, où les résultats de la prédiction sont stockés si save est activée. |
Arguments model.track
Argument | Type | Défaut | Description |
---|---|---|---|
source |
str |
None |
Spécifie le répertoire source pour les images ou les vidéos. Prend en charge les chemins d'accès aux fichiers et les URL. |
persist |
bool |
False |
Permet un suivi persistant des objets entre les images, en conservant les identifiants sur l'ensemble des séquences vidéo. |
tracker |
str |
botsort.yaml |
Spécifie l'algorithme de suivi à utiliser, par exemple, bytetrack.yaml ou botsort.yaml . |
conf |
float |
0.3 |
Définit le seuil de confiance pour les détections ; des valeurs plus faibles permettent de suivre plus d'objets mais peuvent inclure des faux positifs. |
iou |
float |
0.5 |
Définit le seuil d'intersection sur l'union (IoU) pour le filtrage des détections qui se chevauchent. |
classes |
list |
None |
Filtre les résultats par indice de classe. Par exemple, classes=[0, 2, 3] ne suit que les classes spécifiées. |
verbose |
bool |
True |
Contrôle l'affichage des résultats du suivi, fournissant une sortie visuelle des objets suivis. |
FAQ
Comment puis-je suivre mes séances d'entraînement à l'aide de Ultralytics YOLO11 ?
Pour surveiller vos séances d'entraînement à l'aide de Ultralytics YOLO11 , vous pouvez 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 vous permet de recevoir un retour instantané sur votre forme d'exercice, de compter les répétitions et de mesurer les performances. Vous pouvez 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 solutions
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 = solutions.AIGym(
line_width=2,
show=True,
kpts=[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
im0 = gym.monitor(im0)
cv2.destroyAllWindows()
Pour plus de personnalisation et de réglages, vous pouvez vous référer à la section AIGym dans la documentation.
Quels sont les avantages de l'utilisation de Ultralytics YOLO11 pour le suivi de l'entraînement ?
L'utilisation de Ultralytics YOLO11 pour le suivi de l'entraînement présente plusieurs avantages :
- Performances optimisées : En adaptant les séances d'entraînement en fonction des données de suivi, vous pouvez obtenir de meilleurs résultats.
- Atteinte des objectifs : Suivez et ajustez facilement vos objectifs de remise en forme pour des progrès mesurables.
- Personnalisation : Obtenez des plans d'entraînement personnalisés basés sur vos données individuelles pour une efficacité optimale.
- Sensibilisation à la santé : Détection précoce de schémas indiquant des problèmes de santé potentiels ou un surentraînement.
- Des décisions éclairées : Prendre des décisions fondées sur des données afin d'ajuster les routines et de fixer des objectifs réalistes.
Vous pouvez regarder une démonstration vidéo sur YouTube pour voir ces avantages en action.
Quelle est la précision de Ultralytics YOLO11 dans la détection et le suivi des exercices ?
Ultralytics YOLO11 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 points de repère du corps et les articulations, fournissant 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, consultez la section " Applications concrètes" de la documentation, qui présente le comptage des pompes et des tractions.
Puis-je utiliser Ultralytics YOLO11 pour des programmes d'entraînement personnalisés ?
Oui, Ultralytics YOLO11 peut être adapté à des programmes d'entraînement personnalisés. Les AIGym
prend en charge différents types de pose tels que "pushup", "pullup" et "abworkout". Vous pouvez 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 = solutions.AIGym(
line_width=2,
show=True,
kpts=[6, 8, 10],
)
Pour plus de détails sur la définition des arguments, voir la section Arguments AIGym
section. Cette flexibilité vous permet de contrôler différents exercices et de personnaliser les routines en fonction de vos besoins.
Comment puis-je sauvegarder la sortie du suivi de la séance d'entraînement en utilisant Ultralytics YOLO11 ?
Pour enregistrer la sortie de la surveillance de la séance d'entraînement, vous pouvez modifier le code afin d'inclure un graveur vidéo qui enregistre les images traitées. Voici un exemple :
import cv2
from ultralytics import solutions
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 = solutions.AIGym(
line_width=2,
show=True,
kpts=[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
im0 = gym.monitor(im0)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
Cette configuration permet d'enregistrer la vidéo surveillée dans un fichier de sortie. Pour plus de détails, reportez-vous à la section Contrôle des séances d'entraînement avec enregistrement de la sortie.