Overslaan naar inhoud

Training volgen met behulp van 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
PushUps Tellen PullUps Tellen

Voorbeeld van trainingen

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

"pushup", "pullup" en "abworkout" ondersteund

KeyPoints Kaart

sleutelPunten Volgorde Ultralytics YOLOv8  Houding

Argumenten AIGym

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
line_thickness int 2 Dikte van de getekende lijnen.
view_img bool False Vlag om de afbeelding weer te geven.
pose_up_angle float 145.0 Hoekdrempel voor de 'omhoog' houding.
pose_down_angle float 90.0 Hoekdrempel voor de 'neerwaartse' houding.
pose_type str pullup Type houding om te detecteren ('pullup', pushup, abworkout, squat).

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

FAQ

Hoe monitor ik mijn trainingen met Ultralytics YOLOv8 ?

Om je trainingen te volgen met Ultralytics YOLOv8 kun je de mogelijkheden voor het schatten van houdingen gebruiken om belangrijke lichaamsmarkeringen en gewrichten in realtime te volgen en te analyseren. Hierdoor kun je direct feedback krijgen over de vorm van je oefeningen, herhalingen tellen en prestatiegegevens meten. Je kunt beginnen met het gebruik van de bijgeleverde voorbeeldcode voor pushups, pullups of ab workouts zoals in het voorbeeld:

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

Voor verdere aanpassingen en instellingen kun je het gedeelte AIGym in de documentatie raadplegen.

Wat zijn de voordelen van het gebruik van Ultralytics YOLOv8 voor trainingsmonitoring?

Het gebruik van Ultralytics YOLOv8 voor trainingsmonitoring biedt verschillende belangrijke voordelen:

  • Geoptimaliseerde prestaties: Door trainingen op maat te maken op basis van monitoringgegevens kun je betere resultaten behalen.
  • Doelen bereiken: Gemakkelijk fitnessdoelen bijhouden en aanpassen voor meetbare vooruitgang.
  • Personalisatie: Ontvang op maat gemaakte trainingsplannen op basis van je individuele gegevens voor optimale effectiviteit.
  • Bewustzijn van gezondheid: Vroegtijdige detectie van patronen die wijzen op mogelijke gezondheidsproblemen of overtraining.
  • Geïnformeerde beslissingen: Neem gegevensgestuurde beslissingen om routines aan te passen en realistische doelen te stellen.

Je kunt een videodemonstratie op YouTube bekijken om deze voordelen in actie te zien.

Hoe nauwkeurig is Ultralytics YOLOv8 in het opsporen en volgen van oefeningen?

Ultralytics YOLOv8 is zeer nauwkeurig in het detecteren en volgen van oefeningen dankzij de geavanceerde mogelijkheden voor het schatten van de houding. Het kan nauwkeurig de belangrijkste lichaamskenmerken en gewrichten volgen, waardoor real-time feedback wordt gegeven over de vorm van de oefening en de prestatiegegevens. De voorgetrainde gewichten en robuuste architectuur van het model zorgen voor een hoge precisie en betrouwbaarheid. Bekijk voor voorbeelden uit de praktijk de sectie met echte toepassingen in de documentatie, waarin het tellen van pushups en pullups wordt getoond.

Kan ik Ultralytics YOLOv8 gebruiken voor aangepaste workout routines?

Ja, Ultralytics YOLOv8 kan worden aangepast voor aangepaste trainingsroutines. De AIGym De klasse ondersteunt verschillende soorten houdingen, zoals "pushup", "pullup" en "abworkout". Je kunt sleutelpunten en hoeken opgeven om specifieke oefeningen te detecteren. Hier is een voorbeeldopstelling:

from ultralytics import solutions

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="squat",
    kpts_to_check=[6, 8, 10],
)

Raadpleeg voor meer informatie over het instellen van argumenten de Argumenten AIGym sectie. Dankzij deze flexibiliteit kun je verschillende oefeningen volgen en routines aanpassen op basis van je behoeften.

Hoe kan ik de uitvoer van de workout-monitoring opslaan met Ultralytics YOLOv8 ?

Om de uitvoer van de workoutmonitor op te slaan, kun je de code aanpassen en een videoschrijver toevoegen die de verwerkte frames opslaat. Hier is een voorbeeld:

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

Deze instelling schrijft de gemonitorde video naar een uitvoerbestand. Raadpleeg voor meer informatie de sectie Workouts monitoren met uitvoer opslaan.



Aangemaakt 2023-12-02, Bijgewerkt 2024-07-05
Auteurs: glenn-jocher (12), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (4)

Reacties