Zum Inhalt springen

Workouts Monitoring using Ultralytics YOLO11

Monitoring workouts through pose estimation with Ultralytics YOLO11 enhances exercise assessment by accurately tracking key body landmarks and joints in real-time. This technology provides instant feedback on exercise form, tracks workout routines, and measures performance metrics, optimizing training sessions for users and trainers alike.



Pass auf: Workouts Monitoring using Ultralytics YOLO11 | 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 solutions

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 = solutions.AIGym(
    model="yolo11n-pose.pt",
    show=True,
    kpts=[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
    im0 = gym.monitor(im0)

cv2.destroyAllWindows()
import cv2

from ultralytics import solutions

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 = solutions.AIGym(
    show=True,
    kpts=[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
    im0 = gym.monitor(im0)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()

KeyPoints Karte

keyPoints Order Ultralytics YOLO11 Pose

Argumente AIGym

Name Typ Standard Beschreibung
kpts list None Liste der drei Keypoints Index, für das Zählen des spezifischen Workouts, gefolgt von Keypoint Map
line_width int 2 Die Dicke der gezeichneten Linien.
show bool False Flagge, um das Bild anzuzeigen.
up_angle float 145.0 Winkelschwelle für die "Up"-Pose.
down_angle float 90.0 Winkelschwelle für die Pose "unten".

Argumente model.predict

Argument Typ Standard Beschreibung
source str 'ultralytics/assets' Specifies the data source for inference. Can be an image path, video file, directory, URL, or device ID for live feeds. Supports a wide range of formats and sources, enabling flexible application across different types of input.
conf float 0.25 Legt die minimale Vertrauensschwelle für Erkennungen fest. Objekte, die mit einer geringeren Konfidenz als dieser Schwelle erkannt werden, werden nicht berücksichtigt. Die Anpassung dieses Wertes kann dazu beitragen, Falschmeldungen zu reduzieren.
iou float 0.7 Intersection Over Union (IoU) threshold for Non-Maximum Suppression (NMS). Lower values result in fewer detections by eliminating overlapping boxes, useful for reducing duplicates.
imgsz int or tuple 640 Legt die Bildgröße für die Inferenz fest. Kann eine einzelne ganze Zahl sein 640 for square resizing or a (height, width) tuple. Proper sizing can improve detection accuracy and processing speed.
half bool False Enables half-precision (FP16) inference, which can speed up model inference on supported GPUs with minimal impact on accuracy.
device str None Gibt das Gerät für die Inferenz an (z.B., cpu, cuda:0 oder 0). Ermöglicht die Auswahl zwischen CPU, einem bestimmten GPU oder anderen Rechengeräten für die Modellausführung.
max_det int 300 Maximal zulässige Anzahl von Erkennungen pro Bild. Begrenzt die Gesamtzahl der Objekte, die das Modell in einer einzigen Schlussfolgerung erkennen kann, um übermäßige Ausgaben in dichten Szenen zu verhindern.
vid_stride int 1 Frame Stride für Videoeingänge. Ermöglicht das Überspringen von Bildern in Videos, um die Verarbeitung auf Kosten der zeitlichen Auflösung zu beschleunigen. Bei einem Wert von 1 wird jedes Bild verarbeitet, bei höheren Werten werden Bilder übersprungen.
stream_buffer bool False Determines whether to queue incoming frames for video streams. If False, old frames get dropped to accomodate new frames (optimized for real-time applications). If `True', queues new frames in a buffer, ensuring no frames get skipped, but will cause latency if inference FPS is lower than stream FPS.
visualize bool False Aktiviert die Visualisierung von Modellmerkmalen während der Inferenz und gibt Einblicke in das, was das Modell "sieht". Nützlich für die Fehlersuche und Modellinterpretation.
augment bool False Ermöglicht die Test-Time-Augmentation (TTA) für Vorhersagen, was die Robustheit der Erkennung auf Kosten der Schlussfolgerungsgeschwindigkeit verbessern kann.
agnostic_nms bool False Ermöglicht die klassenunabhängige Non-Maximum Suppression (NMS), die überlappende Boxen verschiedener Klassen zusammenführt. Nützlich in Szenarien mit mehreren Klassen, in denen sich die Klassen häufig überschneiden.
classes list[int] None Filtert Vorhersagen auf eine Reihe von Klassen-IDs. Nur Erkennungen, die zu den angegebenen Klassen gehören, werden zurückgegeben. Nützlich, um sich bei Erkennungsaufgaben mit mehreren Klassen auf relevante Objekte zu konzentrieren.
retina_masks bool False Verwendet hochauflösende Segmentierungsmasken, falls im Modell vorhanden. Dies kann die Qualität der Masken für Segmentierungsaufgaben verbessern, da sie feinere Details liefern.
embed list[int] None Specifies the layers from which to extract feature vectors or embeddings. Useful for downstream tasks like clustering or similarity search.

Argumente model.track

Argument Typ Standard Beschreibung
source str None Specifies the source directory for images or videos. Supports file paths and URLs.
persist bool False Enables persistent tracking of objects between frames, maintaining IDs across video sequences.
tracker str botsort.yaml Specifies the tracking algorithm to use, e.g., bytetrack.yaml oder botsort.yaml.
conf float 0.3 Sets the confidence threshold for detections; lower values allow more objects to be tracked but may include false positives.
iou float 0.5 Sets the Intersection over Union (IoU) threshold for filtering overlapping detections.
classes list None Filters results by class index. For example, classes=[0, 2, 3] only tracks the specified classes.
verbose bool True Controls the display of tracking results, providing a visual output of tracked objects.

FAQ

How do I monitor my workouts using Ultralytics YOLO11?

To monitor your workouts using Ultralytics YOLO11, you can utilize the pose estimation capabilities to track and analyze key body landmarks and joints in real-time. This allows you to receive instant feedback on your exercise form, count repetitions, and measure performance metrics. You can start by using the provided example code for pushups, pullups, or ab workouts as shown:

import cv2

from ultralytics import solutions

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 = solutions.AIGym(
    line_width=2,
    show=True,
    kpts=[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
    im0 = gym.monitor(im0)

cv2.destroyAllWindows()

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

What are the benefits of using Ultralytics YOLO11 for workout monitoring?

Using Ultralytics YOLO11 for workout monitoring provides several key benefits:

  • 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.

How accurate is Ultralytics YOLO11 in detecting and tracking exercises?

Ultralytics YOLO11 is highly accurate in detecting and tracking exercises due to its state-of-the-art pose estimation capabilities. It can accurately track key body landmarks and joints, providing real-time feedback on exercise form and performance metrics. The model's pretrained weights and robust architecture ensure high precision and reliability. For real-world examples, check out the real-world applications section in the documentation, which showcases pushups and pullups counting.

Can I use Ultralytics YOLO11 for custom workout routines?

Yes, Ultralytics YOLO11 can be adapted for custom workout routines. The 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 = solutions.AIGym(
    line_width=2,
    show=True,
    kpts=[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.

How can I save the workout monitoring output using Ultralytics YOLO11?

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 solutions

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 = solutions.AIGym(
    line_width=2,
    show=True,
    kpts=[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
    im0 = gym.monitor(im0)
    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.


📅 Created 10 months ago ✏️ Updated 8 days ago

Kommentare