Vai al contenuto

Monitoraggio degli allenamenti con Ultralytics YOLOv8

Il monitoraggio degli allenamenti attraverso la stima della posa con Ultralytics YOLOv8 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: Monitoraggio degli allenamenti con Ultralytics YOLOv8 | Flessioni, trazioni, addominali

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
Conteggio delle flessioni Conteggio delle trazioni

Esempio di monitoraggio degli allenamenti

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()
Supporto

"pushup", "pullup" e "abworkout" supportati

Mappa dei punti chiave

keyPoints Ordine Ultralytics YOLOv8  Pose

Argomenti AIGym

Nome Tipo Predefinito Descrizione
kpts_to_check list None Elenco di tre indici di punti chiave, per il conteggio di un allenamento specifico, seguito da Mappa dei punti chiave
line_thickness int 2 Spessore delle linee disegnate.
view_img bool False Flag per visualizzare l'immagine.
pose_up_angle float 145.0 Soglia di angolazione per la posa "in alto".
pose_down_angle float 90.0 Soglia dell'angolo per la posa "giù".
pose_type str pullup Tipo di posa da rilevare ('pullup', pushup, abworkout, squat).

Argomenti model.predict

Nome Tipo Predefinito Descrizione
source str 'ultralytics/assets' directory di origine per le immagini o i video
conf float 0.25 soglia di fiducia dell'oggetto per il rilevamento
iou float 0.7 soglia di intersezione su unione (IoU) per gli NMS
imgsz int or tuple 640 dimensione dell'immagine come scalare o come elenco (h, w), ad esempio (640, 480)
half bool False usa la mezza precisione (FP16)
device None or str None Il dispositivo su cui eseguire l'operazione, ad esempio cuda device=0/1/2/3 o device=cpu
max_det int 300 numero massimo di rilevamenti per immagine
vid_stride bool False passo della frequenza dei fotogrammi video
stream_buffer bool False bufferizza tutti i fotogrammi dello streaming (True) o restituisce il fotogramma più recente (False)
visualize bool False visualizzare le caratteristiche del modello
augment bool False applicare l'aumento dell'immagine alle fonti di predizione
agnostic_nms bool False NMS con compatibilità di classe
classes list[int] None filtrare i risultati per classe, ad esempio classi=0 o classi=[0,2,3].
retina_masks bool False utilizzare maschere di segmentazione ad alta risoluzione
embed list[int] None restituisce vettori di caratteristiche/embeddings da determinati livelli

Argomenti model.track

Nome Tipo Predefinito Descrizione
source im0 None directory di origine per le immagini o i video
persist bool False persistenza dei brani tra i fotogrammi
tracker str botsort.yaml Metodo di tracciamento 'bytetrack' o 'botsort'
conf float 0.3 Soglia di fiducia
iou float 0.5 Soglia IOU
classes list None filtrare i risultati per classe, ad esempio classi=0 o classi=[0,2,3].
verbose bool True Visualizza i risultati del tracciamento dell'oggetto

DOMANDE FREQUENTI

Come posso monitorare i miei allenamenti utilizzando Ultralytics YOLOv8 ?

Per monitorare i tuoi allenamenti utilizzando Ultralytics YOLOv8 , puoi utilizzare le funzionalità di stima della posa per tracciare e analizzare i principali punti di riferimento del corpo e le articolazioni in tempo reale. In questo modo puoi ricevere un feedback istantaneo sulla tua forma di allenamento, contare le ripetizioni e misurare le metriche di performance. Puoi iniziare utilizzando il codice di esempio fornito per le flessioni, le trazioni e gli addominali, come mostrato:

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()

Per ulteriori personalizzazioni e impostazioni, puoi consultare la sezione AIGym della documentazione.

Quali sono i vantaggi dell'utilizzo di Ultralytics YOLOv8 per il monitoraggio dell'allenamento?

L'utilizzo di Ultralytics YOLOv8 per il monitoraggio dell'allenamento offre diversi vantaggi fondamentali:

  • 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.

Quanto è accurato Ultralytics YOLOv8 nel rilevare e tracciare gli esercizi?

Ultralytics YOLOv8 è estremamente preciso nel rilevare e seguire gli esercizi grazie alle sue capacità di stima della posa all'avanguardia. È in grado di tracciare con precisione i principali punti di riferimento del corpo e le articolazioni, fornendo un feedback in tempo reale sulla forma dell'esercizio e sulle metriche di prestazione. I pesi preaddestrati e l'architettura robusta del modello garantiscono un'elevata precisione e affidabilità. Per esempi reali, consulta la sezione Applicazioni reali della documentazione, che mostra il conteggio delle flessioni e delle trazioni.

Posso utilizzare Ultralytics YOLOv8 per creare routine di allenamento personalizzate?

Sì, Ultralytics YOLOv8 può essere adattato per creare routine di allenamento personalizzate. Il 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_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="squat",
    kpts_to_check=[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.

Come posso salvare l'output del monitoraggio dell'allenamento utilizzando Ultralytics YOLOv8 ?

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 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()

Questa impostazione scrive il video monitorato in un file di output. Per maggiori dettagli, consulta la sezione Monitoraggio degli allenamenti con salvataggio dell'output.



Creato 2023-12-02, Aggiornato 2024-07-05
Autori: glenn-jocher (12), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (4)

Commenti