Training volgen met Ultralytics YOLOv8 🚀
Het volgen van trainingen door het schatten van houdingen met Ultralytics YOLOv8 verbetert de trainingsbeoordeling door de belangrijkste lichaamskenmerken en gewrichten nauwkeurig en in real-time te volgen. Deze technologie geeft direct feedback over de vorm van de oefening, volgt trainingsroutines en meet prestatiegegevens, waardoor de trainingssessies voor zowel gebruikers als trainers worden geoptimaliseerd.
Kijken: Workouts die Ultralytics YOLOv8 gebruiken | Pushups, Pullups, Ab Workouts
Voordelen van trainingsmonitoring?
- Geoptimaliseerde prestaties: Trainingen afstemmen op basis van controlegegevens voor betere resultaten.
- Doelen bereiken: Houd fitnessdoelen bij en pas ze aan voor meetbare vooruitgang.
- Personalisatie: Aangepaste trainingsplannen op basis van individuele gegevens voor effectiviteit.
- Bewustzijn van gezondheid: Vroegtijdige detectie van patronen die wijzen op gezondheidsproblemen of overtraining.
- Geïnformeerde beslissingen: Gegevensgestuurde beslissingen om routines aan te passen en realistische doelen te stellen.
Toepassingen in de echte wereld
Training volgen | Training volgen |
---|---|
PushUps Tellen | PullUps Tellen |
Voorbeeld van trainingen
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()
Ondersteuning
"pushup", "pullup" en "abworkout" ondersteund
KeyPoints Kaart
Argumenten set_args
Naam | Type | Standaard | Beschrijving |
---|---|---|---|
kpts_to_check |
list |
None |
Lijst met index van drie sleutelpunten, voor het tellen van specifieke trainingen, gevolgd door sleutelpunt Kaart |
view_img |
bool |
False |
Geef het kader met tellingen weer |
line_thickness |
int |
2 |
Verhoog de dikte van de telwaarde |
pose_type |
str |
pushup |
Stellen die in de gaten gehouden moeten worden, pullup en abworkout ook ondersteund |
pose_up_angle |
int |
145 |
Hoekwaarde omhoog |
pose_down_angle |
int |
90 |
Waarde neerwaartse hoek |
Argumenten model.predict
Naam | Type | Standaard | Beschrijving |
---|---|---|---|
source |
str |
'ultralytics/assets' |
bronmap voor afbeeldingen of video's |
conf |
float |
0.25 |
objectbetrouwbaarheidsdrempel voor detectie |
iou |
float |
0.7 |
intersectie over unie (IoU) drempel voor NMS |
imgsz |
int or tuple |
640 |
afbeeldingsgrootte als scalair of (h, w) lijst, bijv. (640, 480) |
half |
bool |
False |
gebruik halve precisie (FP16) |
device |
None or str |
None |
apparaat om op te draaien, bijvoorbeeld cuda device=0/1/2/3 of device=cpu |
max_det |
int |
300 |
maximum aantal detecties per afbeelding |
vid_stride |
bool |
False |
video frame-rate stap |
stream_buffer |
bool |
False |
buffer alle streaming frames (True) of retourneer het meest recente frame (False) |
visualize |
bool |
False |
modeleigenschappen visualiseren |
augment |
bool |
False |
beeldvergroting toepassen op voorspellingsbronnen |
agnostic_nms |
bool |
False |
klassennagnostische NMS |
classes |
list[int] |
None |
filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3] |
retina_masks |
bool |
False |
segmentatiemaskers met hoge resolutie gebruiken |
embed |
list[int] |
None |
retourneer kenmerkvectoren/embeddingen van gegeven lagen |
Argumenten model.track
Naam | Type | Standaard | Beschrijving |
---|---|---|---|
source |
im0 |
None |
bronmap voor afbeeldingen of video's |
persist |
bool |
False |
Blijvende sporen tussen frames |
tracker |
str |
botsort.yaml |
Volgmethode 'bytetrack' of 'botsort' |
conf |
float |
0.3 |
Vertrouwensdrempel |
iou |
float |
0.5 |
Drempel IOU |
classes |
list |
None |
filter resultaten op klasse, d.w.z. classes=0, of classes=[0,2,3] |
verbose |
bool |
True |
De resultaten van het volgen van objecten weergeven |