Workouts Monitoring using Ultralytics YOLO11
Monitoring workouts through pose estimation with Ultralytics YOLO11 enhances exercise assessment by accurately tracking key body landmarks and joints in real-time. This technology provides instant feedback on exercise form, tracks workout routines, and measures performance metrics, optimizing training sessions for users and trainers alike.
Guarda: Workouts Monitoring using Ultralytics YOLO11 | Pushups, Pullups, Ab Workouts
Vantaggi del monitoraggio degli allenamenti?
- Prestazioni ottimizzate: Personalizza gli allenamenti in base ai dati di monitoraggio per ottenere risultati migliori.
- Raggiungimento degli obiettivi: Traccia e modifica gli obiettivi di fitness per ottenere progressi misurabili.
- Personalizzazione: Piani di allenamento personalizzati basati sui dati individuali per garantire l'efficacia.
- Consapevolezza della salute: Individuazione precoce di modelli che indicano problemi di salute o di sovrallenamento.
- Decisioni informate: Decisioni basate sui dati per modificare le routine e fissare obiettivi realistici.
Applicazioni nel mondo reale
Monitoraggio degli allenamenti | Monitoraggio degli allenamenti |
---|---|
Conteggio delle flessioni | Conteggio delle trazioni |
Esempio di monitoraggio degli allenamenti
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(
model="yolo11n-pose.pt",
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()
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(
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()
Mappa dei punti chiave
Argomenti AIGym
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
kpts |
list |
None |
Elenco di tre indici di punti chiave, per il conteggio di un allenamento specifico, seguito da Mappa dei punti chiave |
line_width |
int |
2 |
Spessore delle linee disegnate. |
show |
bool |
False |
Flag per visualizzare l'immagine. |
up_angle |
float |
145.0 |
Soglia di angolazione per la posa "in alto". |
down_angle |
float |
90.0 |
Soglia dell'angolo per la posa "giù". |
Argomenti model.predict
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Specifies the data source for inference. Can be an image path, video file, directory, URL, or device ID for live feeds. Supports a wide range of formats and sources, enabling flexible application across different types of input. |
conf |
float |
0.25 |
Imposta la soglia minima di confidenza per i rilevamenti. Gli oggetti rilevati con una confidenza inferiore a questa soglia saranno ignorati. La regolazione di questo valore può aiutare a ridurre i falsi positivi. |
iou |
float |
0.7 |
Intersection Over Union (IoU) threshold for Non-Maximum Suppression (NMS). Lower values result in fewer detections by eliminating overlapping boxes, useful for reducing duplicates. |
imgsz |
int or tuple |
640 |
Definisce la dimensione dell'immagine per l'inferenza. Può essere un singolo numero intero 640 for square resizing or a (height, width) tuple. Proper sizing can improve detection accuracy and processing speed. |
half |
bool |
False |
Enables half-precision (FP16) inference, which can speed up model inference on supported GPUs with minimal impact on accuracy. |
device |
str |
None |
Specifica il dispositivo per l'inferenza (es, cpu , cuda:0 o 0 ). Permette agli utenti di scegliere tra CPU, uno specifico GPU o altri dispositivi di calcolo per l'esecuzione del modello. |
max_det |
int |
300 |
Numero massimo di rilevamenti consentiti per immagine. Limita il numero totale di oggetti che il modello può rilevare in una singola inferenza, prevenendo un numero eccessivo di risultati in scene dense. |
vid_stride |
int |
1 |
Frame stride per gli ingressi video. Consente di saltare i fotogrammi nei video per velocizzare l'elaborazione a scapito della risoluzione temporale. Un valore di 1 elabora ogni fotogramma, valori più alti saltano i fotogrammi. |
stream_buffer |
bool |
False |
Determines whether to queue incoming frames for video streams. If False , old frames get dropped to accomodate new frames (optimized for real-time applications). If `True', queues new frames in a buffer, ensuring no frames get skipped, but will cause latency if inference FPS is lower than stream FPS. |
visualize |
bool |
False |
Attiva la visualizzazione delle caratteristiche del modello durante l'inferenza, fornendo informazioni su ciò che il modello "vede". Utile per il debug e l'interpretazione del modello. |
augment |
bool |
False |
Abilita l'aumento del tempo di test (TTA) per le previsioni, migliorando potenzialmente la robustezza del rilevamento al costo della velocità di inferenza. |
agnostic_nms |
bool |
False |
Abilita la soppressione non massimale (NMS), che unisce le caselle sovrapposte di classi diverse. Utile negli scenari di rilevamento multiclasse in cui la sovrapposizione di classi è comune. |
classes |
list[int] |
None |
Filtra le previsioni in base a un insieme di ID di classe. Verranno restituiti solo i rilevamenti appartenenti alle classi specificate. Utile per concentrarsi sugli oggetti rilevanti in attività di rilevamento multiclasse. |
retina_masks |
bool |
False |
Utilizza maschere di segmentazione ad alta risoluzione se disponibili nel modello. Questo può migliorare la qualità delle maschere per le attività di segmentazione, fornendo dettagli più precisi. |
embed |
list[int] |
None |
Specifies the layers from which to extract feature vectors or embeddings. Useful for downstream tasks like clustering or similarity search. |
Argomenti model.track
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
source |
str |
None |
Specifies the source directory for images or videos. Supports file paths and URLs. |
persist |
bool |
False |
Enables persistent tracking of objects between frames, maintaining IDs across video sequences. |
tracker |
str |
botsort.yaml |
Specifies the tracking algorithm to use, e.g., bytetrack.yaml o botsort.yaml . |
conf |
float |
0.3 |
Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives. |
iou |
float |
0.5 |
Sets the Intersection over Union (IoU) threshold for filtering overlapping detections. |
classes |
list |
None |
Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes. |
verbose |
bool |
True |
Controls the display of tracking results, providing a visual output of tracked objects. |
DOMANDE FREQUENTI
How do I monitor my workouts using Ultralytics YOLO11?
To monitor your workouts using Ultralytics YOLO11, you can utilize the pose estimation capabilities to track and analyze key body landmarks and joints in real-time. This allows you to receive instant feedback on your exercise form, count repetitions, and measure performance metrics. You can start by using the provided example code for pushups, pullups, or ab workouts as shown:
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()
Per ulteriori personalizzazioni e impostazioni, puoi consultare la sezione AIGym della documentazione.
What are the benefits of using Ultralytics YOLO11 for workout monitoring?
Using Ultralytics YOLO11 for workout monitoring provides several key benefits:
- Prestazioni ottimizzate: Adattando gli allenamenti in base ai dati di monitoraggio, puoi ottenere risultati migliori.
- Raggiungimento degli obiettivi: Traccia e regola facilmente gli obiettivi di fitness per ottenere progressi misurabili.
- Personalizzazione: Ottieni piani di allenamento personalizzati basati sui tuoi dati personali per un'efficacia ottimale.
- Consapevolezza della salute: Individuazione precoce di modelli che indicano potenziali problemi di salute o di sovrallenamento.
- Decisioni informate: Prendi decisioni basate sui dati per modificare le routine e fissare obiettivi realistici.
Puoi guardare un video dimostrativo su YouTube per vedere questi vantaggi in azione.
How accurate is Ultralytics YOLO11 in detecting and tracking exercises?
Ultralytics YOLO11 is highly accurate in detecting and tracking exercises due to its state-of-the-art pose estimation capabilities. It can accurately track key body landmarks and joints, providing real-time feedback on exercise form and performance metrics. The model's pretrained weights and robust architecture ensure high precision and reliability. For real-world examples, check out the real-world applications section in the documentation, which showcases pushups and pullups counting.
Can I use Ultralytics YOLO11 for custom workout routines?
Yes, Ultralytics YOLO11 can be adapted for custom workout routines. The AIGym
La classe supporta diversi tipi di pose come "pushup", "pullup" e "abworkout". Puoi specificare punti chiave e angoli per rilevare esercizi specifici. Ecco un esempio di configurazione:
from ultralytics import solutions
gym = solutions.AIGym(
line_width=2,
show=True,
kpts=[6, 8, 10],
)
Per maggiori dettagli sull'impostazione degli argomenti, consulta la sezione Argomenti AIGym
sezione. Questa flessibilità ti permette di monitorare diversi esercizi e di personalizzare le routine in base alle tue esigenze.
How can I save the workout monitoring output using Ultralytics YOLO11?
Per salvare l'output del monitoraggio dell'allenamento, puoi modificare il codice per includere un video writer che salvi i fotogrammi elaborati. Ecco un esempio:
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()
Questa impostazione scrive il video monitorato in un file di output. Per maggiori dettagli, consulta la sezione Monitoraggio degli allenamenti con salvataggio dell'output.