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 |
Esempio di monitoraggio degli allenamenti
from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2
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 = ai_gym.AIGym() # init AI GYM module
gym_object.set_args(line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10])
frame_count = 0
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
frame_count += 1
results = model.track(im0, verbose=False) # Tracking recommended
#results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results, frame_count)
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2
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 = ai_gym.AIGym() # init AI GYM module
gym_object.set_args(line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10])
frame_count = 0
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
frame_count += 1
results = model.track(im0, verbose=False) # Tracking recommended
#results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results, frame_count)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
Supporto
"pushup", "pullup" e "abworkout" supportati
Mappa dei punti chiave
Argomenti set_args
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 |
view_img |
bool |
False |
Visualizza il riquadro con i conteggi |
line_thickness |
int |
2 |
Aumenta lo spessore del valore di conteggio |
pose_type |
str |
pushup |
Pose che devono essere monitorate, pullup e abworkout supportato anche |
pose_up_angle |
int |
145 |
Valore dell'angolo di posa in alto |
pose_down_angle |
int |
90 |
Valore dell'angolo di discesa della posa |
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 |
dispositivo su cui eseguire, 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 |