Monitoraggio degli allenamenti con Ultralytics YOLO11
Il monitoraggio degli allenamenti attraverso la stima della posa con Ultralytics YOLO11 migliora la valutazione degli esercizi grazie al rilevamento accurato dei principali punti di riferimento del corpo e delle articolazioni in tempo reale. Questa tecnologia fornisce un feedback immediato sulla forma dell'esercizio, traccia le routine di allenamento e misura le metriche delle prestazioni, ottimizzando le sessioni di allenamento sia per gli utenti che per gli allenatori.
Guarda: Workouts Monitoring using Ultralytics YOLO11 | Push-ups, Pull-ups, Ab Workouts
Vantaggi del monitoraggio degli allenamenti?
- Prestazioni ottimizzate: Adattamento degli allenamenti in base ai dati di monitoraggio per ottenere risultati migliori.
- Raggiungimento degli obiettivi: Tracciare e modificare 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 adattare 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))
# 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()
Mappa dei punti chiave
Argomenti AIGym
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
kpts |
list |
None |
Elenco dei tre indici dei punti chiave, per il conteggio dell'allenamento specifico, seguito da Mappa dei punti chiave |
line_width |
int |
2 |
Spessore delle linee tracciate. |
show |
bool |
False |
Flag per visualizzare l'immagine. |
up_angle |
float |
145.0 |
Soglia di angolazione per la posa "up". |
down_angle |
float |
90.0 |
Soglia di angolazione per la posa "giù". |
model |
str |
None |
Percorso del file del modello di posa Ultralytics YOLO |
Argomenti model.predict
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Specifica l'origine dei dati per l'inferenza. Può essere un percorso di immagine, un file video, una directory, un URL o un ID dispositivo per i feed live. Supporta un'ampia gamma di formati e fonti, consentendo un'applicazione flessibile a diversi tipi di input. |
conf |
float |
0.25 |
Imposta la soglia minima di confidenza per i rilevamenti. Gli oggetti rilevati con una confidenza inferiore a questa soglia vengono ignorati. La regolazione di questo valore può contribuire a ridurre i falsi positivi. |
iou |
float |
0.7 |
Soglia di Intersection Over Union (IoU) per la soppressione non massima (NMS). Valori più bassi determinano un minor numero di rilevamenti eliminando le caselle sovrapposte, utili per ridurre i duplicati. |
imgsz |
int o tuple |
640 |
Definisce la dimensione dell'immagine per l'inferenza. Può essere un singolo numero intero 640 per il ridimensionamento quadrato o una tupla (altezza, larghezza). Un dimensionamento corretto può migliorare il rilevamento precisione e velocità di elaborazione. |
half |
bool |
False |
Abilita l'inferenza a mezza precisione (FP16), che può accelerare l'inferenza del modello sulle GPU supportate con un impatto minimo sulla precisione. |
device |
str |
None |
Specifica il dispositivo per l'inferenza (ad es, cpu , cuda:0 o 0 ). Consente agli utenti di scegliere tra CPU, uno specifico GPU o altri dispositivi di calcolo per l'esecuzione del modello. |
batch |
int |
1 |
Specifica la dimensione del batch per l'inferenza (funziona solo quando la sorgente è una directory, un file video o .txt file). Una dimensione maggiore del batch può garantire una maggiore produttività, riducendo il tempo totale necessario per l'inferenza. |
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 accelerare l'elaborazione a scapito della risoluzione temporale. Un valore di 1 elabora ogni fotogramma, valori più alti saltano i fotogrammi. |
stream_buffer |
bool |
False |
Determina se mettere in coda i fotogrammi in arrivo per i flussi video. Se False , old frames get dropped to accommodate 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 debugging e l'interpretazione del modello. |
augment |
bool |
False |
Consente 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 in 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 compiti di rilevamento multiclasse. |
retina_masks |
bool |
False |
Restituisce maschere di segmentazione ad alta risoluzione. Le maschere restituite (masks.data ) corrisponderanno alle dimensioni dell'immagine originale, se abilitati. Se sono disabilitati, hanno la dimensione dell'immagine usata durante l'inferenza. |
embed |
list[int] |
None |
Specifica i livelli da cui estrarre vettori di caratteristiche o embeddings. Utile per attività a valle come il clustering o la ricerca di similarità. |
project |
str |
None |
Nome della directory del progetto in cui vengono salvati i risultati della predizione, se save è abilitato. |
name |
str |
None |
Nome della corsa di predizione. Utilizzato per creare una sottocartella all'interno della cartella del progetto, dove vengono memorizzati gli output della predizione se save è abilitato. |
Argomenti model.track
Argomento | Tipo | Predefinito | Descrizione |
---|---|---|---|
source |
str |
None |
Specifica la directory di origine delle immagini o dei video. Supporta percorsi di file e URL. |
persist |
bool |
False |
Consente il tracciamento persistente degli oggetti tra i fotogrammi, mantenendo gli ID tra le sequenze video. |
tracker |
str |
botsort.yaml |
Specifica l'algoritmo di tracciamento da utilizzare, ad es, bytetrack.yaml o botsort.yaml . |
conf |
float |
0.3 |
Imposta la soglia di confidenza per i rilevamenti; valori più bassi consentono di tracciare un maggior numero di oggetti, ma possono includere falsi positivi. |
iou |
float |
0.5 |
Imposta la soglia Intersection over Union (IoU) per il filtraggio dei rilevamenti sovrapposti. |
classes |
list |
None |
Filtra i risultati per indice di classe. Ad esempio, classes=[0, 2, 3] tiene traccia solo delle classi specificate. |
verbose |
bool |
True |
Controlla la visualizzazione dei risultati del tracciamento, fornendo un output visivo degli oggetti tracciati. |
FAQ
Come posso monitorare i miei allenamenti utilizzando 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 push-ups, pull-ups, 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, è possibile consultare la sezione AIGym della documentazione.
Quali sono i vantaggi dell'utilizzo di Ultralytics YOLO11 per il monitoraggio dell'allenamento?
L'utilizzo di Ultralytics YOLO11 per il monitoraggio dell'allenamento offre diversi vantaggi chiave:
- Prestazioni ottimizzate: Adattando gli allenamenti in base ai dati di monitoraggio, è possibile ottenere risultati migliori.
- Raggiungimento degli obiettivi: Traccia e regola facilmente gli obiettivi di fitness per ottenere progressi misurabili.
- Personalizzazione: Piani di allenamento personalizzati basati sui dati individuali per un'efficacia ottimale.
- Consapevolezza della salute: Individuazione precoce di modelli che indicano potenziali problemi di salute o di sovrallenamento.
- Decisioni informate: Prendere decisioni basate sui dati per adeguare le routine e fissare obiettivi realistici.
È possibile guardare un video dimostrativo su YouTube per vedere questi vantaggi in azione.
Quanto è preciso Ultralytics YOLO11 nel rilevare e tracciare gli esercizi?
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 push-ups and pull-ups counting.
Posso utilizzare Ultralytics YOLO11 per le routine di allenamento personalizzate?
Sì, Ultralytics YOLO11 può essere adattato per creare routine di allenamento personalizzate. Il AIGym
class supports different pose types such as pushup
, pullup
, e abworkout
. You can specify keypoints and angles to detect specific exercises. Here is an example setup:
from ultralytics import solutions
gym = solutions.AIGym(
line_width=2,
show=True,
kpts=[6, 8, 10],
)
Per maggiori dettagli sull'impostazione degli argomenti, consultare la sezione Argomenti AIGym
sezione. Questa flessibilità consente di monitorare vari esercizi e di personalizzare le routine in base alle proprie esigenze.
Come posso salvare l'output del monitoraggio dell'allenamento utilizzando Ultralytics YOLO11 ?
Per salvare l'output del monitoraggio dell'allenamento, è possibile 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 ulteriori dettagli, consultare la sezione Monitoraggio degli allenamenti con salvataggio dell'output.