Zum Inhalt springen

Workouts Überwachung 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

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

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

KeyPoints Karte

keyPoints Reihenfolge Ultralytics YOLOv8  Pose

Argumente AIGym

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
line_thickness int 2 Die Dicke der gezeichneten Linien.
view_img bool False Flagge, um das Bild anzuzeigen.
pose_up_angle float 145.0 Winkelschwelle für die "Up"-Pose.
pose_down_angle float 90.0 Winkelschwelle für die Pose "unten".
pose_type str pullup Art der zu erkennenden Pose ('pullup', pushup, abworkout, squat).

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

FAQ

Wie überwache ich mein Training mit Ultralytics YOLOv8 ?

Um dein Training mit Ultralytics YOLOv8 zu überwachen, kannst du die Posenschätzungsfunktionen nutzen, um wichtige Körperpunkte und Gelenke in Echtzeit zu verfolgen und zu analysieren. So erhältst du sofortiges Feedback zu deiner Trainingsform, kannst Wiederholungen zählen und Leistungsdaten messen. Du kannst mit dem mitgelieferten Beispielcode für Liegestütze, Klimmzüge oder Bauchmuskeltraining beginnen, wie gezeigt:

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

Für weitere Anpassungen und Einstellungen kannst du den Abschnitt AIGym in der Dokumentation lesen.

Was sind die Vorteile von Ultralytics YOLOv8 für die Trainingsüberwachung?

Die Verwendung von Ultralytics YOLOv8 zur Trainingsüberwachung bietet mehrere wichtige Vorteile:

  • Optimierte Leistung: Indem du dein Training anhand von Überwachungsdaten anpasst, kannst du bessere Ergebnisse erzielen.
  • Zielerreichung: Verfolge ganz einfach deine Fitnessziele und passe sie an, um messbare Fortschritte zu erzielen.
  • Personalisierung: Erhalte maßgeschneiderte Trainingspläne, die auf deinen individuellen Daten basieren, für optimale Effektivität.
  • Gesundheitsbewusstsein: Frühzeitige Erkennung von Mustern, die auf mögliche Gesundheitsprobleme oder Übertraining hinweisen.
  • Informierte Entscheidungen: Triff datengestützte Entscheidungen, um Routinen anzupassen und realistische Ziele zu setzen.

Du kannst dir ein YouTube-Video ansehen, um diese Vorteile in Aktion zu sehen.

Wie genau ist Ultralytics YOLOv8 beim Aufspüren und Verfolgen von Übungen?

Ultralytics YOLOv8 ist dank seiner hochmodernen Posenschätzungsfunktionen äußerst präzise bei der Erkennung und Verfolgung von Übungen. Es kann die wichtigsten Körpermerkmale und Gelenke genau verfolgen und liefert so Echtzeit-Feedback zur Bewegungsform und zu den Leistungsdaten. Die vortrainierten Gewichte und die robuste Architektur des Modells sorgen für hohe Präzision und Zuverlässigkeit. Beispiele aus der Praxis findest du in der Dokumentation, in der du Liegestütze und Klimmzüge zählen kannst.

Kann ich Ultralytics YOLOv8 für benutzerdefinierte Workout-Routinen verwenden?

Ja, Ultralytics YOLOv8 kann für individuelle Workout-Routinen angepasst werden. Die AIGym Klasse unterstützt verschiedene Haltungstypen wie "Liegestütz", "Klimmzug" und "Bauchmuskeltraining". Du kannst Schlüsselpunkte und Winkel festlegen, um bestimmte Übungen zu erkennen. Hier ist ein Beispiel für eine Einstellung:

from ultralytics import solutions

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

Weitere Details zum Setzen von Argumenten findest du in der Argumente AIGym Abschnitt. Diese Flexibilität ermöglicht es dir, verschiedene Übungen zu überwachen und die Routine an deine Bedürfnisse anzupassen.

Wie kann ich die Ergebnisse der Trainingsüberwachung mit Ultralytics YOLOv8 speichern?

Um die Ergebnisse der Trainingsüberwachung zu speichern, kannst du den Code so ändern, dass er einen Video Writer enthält, der die verarbeiteten Bilder speichert. Hier ist ein Beispiel:

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

Bei dieser Einstellung wird das überwachte Video in eine Ausgabedatei geschrieben. Weitere Informationen findest du im Abschnitt Workouts Überwachung mit Ausgabe speichern.



Erstellt 2023-12-02, Aktualisiert 2024-07-05
Autoren: glenn-jocher (12), ambitious-octopus (1), IvorZhu331 (1), RizwanMunawar (4)

Kommentare