Zum Inhalt springen

Workouts überwachen mit Ultralytics YOLOv8 🚀

Die Überwachung des Trainings durch Posenschätzung mit Ultralytics YOLOv8 verbessert die Trainingsbeurteilung durch die genaue Verfolgung wichtiger Körperpunkte und Gelenke in Echtzeit. Diese Technologie liefert sofortiges Feedback zur Trainingsform, verfolgt Trainingsroutinen und misst Leistungsdaten, um die Trainingseinheiten für Nutzer und Trainer gleichermaßen zu optimieren.



Pass auf: Workouts Überwachung mit Ultralytics YOLOv8 | Pushups, Pullups, Ab Workouts

Vorteile der Workout-Überwachung?

  • Optimierte Leistung: Anpassungen des Trainings auf Basis der Überwachungsdaten für bessere Ergebnisse.
  • Zielerreichung: Verfolge deine Fitnessziele und passe sie an, um messbare Fortschritte zu erzielen.
  • Personalisierung: Maßgeschneiderte Trainingspläne, die auf individuellen Daten basieren, um effektiv zu sein.
  • Gesundheitsbewusstsein: Frühzeitige Erkennung von Mustern, die auf gesundheitliche Probleme oder Übertraining hinweisen.
  • Informierte Entscheidungen: Datengestützte Entscheidungen, um Routinen anzupassen und realistische Ziele zu setzen.

Anwendungen in der realen Welt

Workouts Überwachung Workouts Überwachung
PushUps Zählen PullUps Zählen
PushUps Zählen PullUps Zählen

Beispiel für die Überwachung von Workouts

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()
Unterstütze

"pushup", "pullup" und "abworkout" unterstützt

KeyPoints Karte

keyPoints Reihenfolge Ultralytics YOLOv8  Pose

Argumente set_args

Name Typ Standard Beschreibung
kpts_to_check list None Liste der drei Keypoints Index, für das Zählen des spezifischen Workouts, gefolgt von Keypoint Map
view_img bool False Den Rahmen mit Zählungen anzeigen
line_thickness int 2 Erhöhe die Dicke des Zählwerts
pose_type str pushup Pose, die überwacht werden muss, pullup und abworkout auch unterstützt
pose_up_angle int 145 Pose Up Angle Wert
pose_down_angle int 90 Pose Down Winkel Wert

Argumente model.predict

Name Typ Standard Beschreibung
source str 'ultralytics/assets' Quellverzeichnis für Bilder oder Videos
conf float 0.25 Objektkonfidenzschwelle für die Erkennung
iou float 0.7 intersection over union (IoU) Schwelle für NMS
imgsz int or tuple 640 Bildgröße als Skalar oder (h, w) Liste, z.B. (640, 480)
half bool False halbe Genauigkeit verwenden (FP16)
device None or str None Gerät, auf dem es laufen soll, d.h. cuda device=0/1/2/3 oder device=cpu
max_det int 300 maximale Anzahl von Erkennungen pro Bild
vid_stride bool False Video-Frame-Rate-Schritt
stream_buffer bool False alle Streaming-Frames puffern (True) oder den letzten Frame zurückgeben (False)
visualize bool False Modelleigenschaften visualisieren
augment bool False Bildvergrößerung auf Vorhersagequellen anwenden
agnostic_nms bool False klassenunabhängige NMS
classes list[int] None Ergebnisse nach Klassen filtern, d.h. classes=0, oder classes=[0,2,3]
retina_masks bool False hochauflösende Segmentierungsmasken verwenden
embed list[int] None Feature-Vektoren/Embeddings aus den gegebenen Schichten zurückgeben

Argumente model.track

Name Typ Standard Beschreibung
source im0 None Quellverzeichnis für Bilder oder Videos
persist bool False Spuren zwischen Frames beibehalten
tracker str botsort.yaml Tracking-Methode 'bytetrack' oder 'botsort'
conf float 0.3 Konfidenzschwelle
iou float 0.5 IOU-Schwelle
classes list None Ergebnisse nach Klassen filtern, d.h. classes=0, oder classes=[0,2,3]
verbose bool True Anzeige der Ergebnisse der Objektverfolgung


Erstellt am 2023-12-02, Aktualisiert am 2024-04-18
Autoren: glenn-jocher (6), RizwanMunawar (1)

Kommentare