Zum Inhalt springen

Workouts Überwachung mit Ultralytics YOLO11

Open Workouts Monitoring In Colab

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



Beobachten: Workouts Monitoring using Ultralytics YOLO11 | Push-ups, Pull-ups, Ab Workouts

Vorteile der Überwachung von Workouts?

  • Optimierte Leistung: Maßgeschneidertes Training auf der Grundlage von Überwachungsdaten für bessere Ergebnisse.
  • Erreichen von Zielen: Verfolgen Sie Ihre Fitnessziele und passen Sie sie an, um messbare Fortschritte zu erzielen.
  • Personalisierung: Maßgeschneiderte Trainingspläne auf der Grundlage individueller Daten für mehr Effektivität.
  • Bewusstsein für die Gesundheit: Frühzeitige Erkennung von Mustern, die auf gesundheitliche Probleme oder Übertraining hinweisen.
  • Informierte Entscheidungen: Datengestützte Entscheidungen zur Anpassung von Routinen und zur Festlegung realistischer Ziele.

Anwendungen in der realen Welt

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

Beispiel für die Überwachung von Workouts

# Run a workout example
yolo solutions workout show=True

# Pass a source video
yolo solutions workout source="path/to/video/file.mp4"

# Use keypoints for pushups
yolo solutions workout kpts=[6, 8, 10]
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
video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init AIGym
gym = solutions.AIGym(
    show=True,  # Display the frame
    kpts=[6, 8, 10],  # keypoints index of person for monitoring specific exercise, by default it's for pushup
    model="yolo11n-pose.pt",  # Path to the YOLO11 pose estimation model file
    # line_width=2,  # Adjust the line width for bounding boxes and text display
)

# Process video
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 Reihenfolge Ultralytics YOLO11  Pose

Argumente AIGym

Name Typ Standard Beschreibung
kpts list None Liste der drei Keypoints Index, für die Zählung von bestimmten Training, gefolgt von Keypoint Map
line_width int 2 Dicke der gezeichneten Linien.
show bool False Flagge zur Anzeige des Bildes.
up_angle float 145.0 Winkelschwelle für die "Aufwärts"-Pose.
down_angle float 90.0 Winkelschwellenwert für die "nach unten" gerichtete Haltung.
model str None Pfad zu Ultralytics YOLO Pose Model File

Argumente model.predict

Argument Typ Standard Beschreibung
source str 'ultralytics/assets' Gibt die Datenquelle für die Inferenz an. Dies kann ein Bildpfad, eine Videodatei, ein Verzeichnis, eine URL oder eine Geräte-ID für Live-Feeds sein. Unterstützt eine breite Palette von Formaten und Quellen und ermöglicht so eine flexible Anwendung für verschiedene Arten von Eingaben.
conf float 0.25 Legt die minimale Vertrauensschwelle für Erkennungen fest. Objekte, die mit einer Konfidenzschwelle unterhalb dieser Schwelle erkannt werden, werden nicht berücksichtigt. Die Anpassung dieses Wertes kann dazu beitragen, Fehlalarme zu reduzieren.
iou float 0.7 Intersection Over Union (IoU)-Schwellenwert für Non-Maximum Suppression (NMS). Niedrigere Werte führen zu weniger Erkennungen, da überlappende Boxen eliminiert werden, was zur Reduzierung von Duplikaten nützlich ist.
imgsz int oder tuple 640 Bestimmt die Bildgröße für die Inferenz. Kann eine einzelne ganze Zahl sein 640 für quadratische Größenänderungen oder ein Tupel (Höhe, Breite). Eine korrekte Größenanpassung kann die Erkennung verbessern Genauigkeit und Verarbeitungsgeschwindigkeit.
half bool False Ermöglicht die Inferenz mit halber Genauigkeit (FP16), was die Modellinferenz auf unterstützten GPUs mit minimalen Auswirkungen auf die Genauigkeit beschleunigen kann.
device str None Gibt das Gerät für die Inferenz an (z.B., cpu, cuda:0 oder 0). Ermöglicht dem Benutzer die Auswahl zwischen CPU, einem bestimmten GPU oder anderen Rechengeräten für die Modellausführung.
batch int 1 Gibt die Losgröße für die Inferenz an (funktioniert nur, wenn die Quelle ein Verzeichnis, eine Videodatei oder .txt Datei). Eine größere Batchgröße kann einen höheren Durchsatz ermöglichen und die für die Inferenz benötigte Gesamtzeit verkürzen.
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 Legt fest, ob eingehende Bilder für Videostreams in eine Warteschlange gestellt werden sollen. Wenn False, old frames get dropped to accommodate 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 bietet Einblicke in das, was das Modell "sieht". Nützlich für die Fehlersuche und Modellinterpretation.
augment bool False Ermöglicht die Testzeit-Erweiterung (TTA) für Vorhersagen, wodurch die Robustheit der Erkennung auf Kosten der Schlussfolgerungsgeschwindigkeit verbessert werden 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 der Mehrklassenerkennung, in denen es häufig zu Klassenüberschneidungen kommt.
classes list[int] None Filtert Vorhersagen auf einen Satz von Klassen-IDs. Nur Erkennungen, die zu den angegebenen Klassen gehören, werden zurückgegeben. Nützlich für die Konzentration auf relevante Objekte bei Erkennungsaufgaben mit mehreren Klassen.
retina_masks bool False Gibt hochauflösende Segmentierungsmasken zurück. Die zurückgegebenen Masken (masks.data) stimmen mit der ursprünglichen Bildgröße überein, wenn sie aktiviert sind. Wenn sie deaktiviert sind, haben sie die bei der Inferenz verwendete Bildgröße.
embed list[int] None Gibt die Ebenen an, aus denen Merkmalsvektoren oder Einbettungen extrahiert werden sollen. Nützlich für nachgelagerte Aufgaben wie Clustering oder Ähnlichkeitssuche.
project str None Name des Projektverzeichnisses, in dem die Vorhersageergebnisse gespeichert werden, wenn save aktiviert ist.
name str None Name des Vorhersagelaufs. Wird zur Erstellung eines Unterverzeichnisses im Projektordner verwendet, in dem die Vorhersageergebnisse gespeichert werden, wenn save aktiviert ist.

Argumente model.track

Argument Typ Standard Beschreibung
source str None Gibt das Quellverzeichnis für Bilder oder Videos an. Unterstützt Dateipfade und URLs.
persist bool False Ermöglicht die dauerhafte Verfolgung von Objekten zwischen Einzelbildern, wobei IDs über Videosequenzen hinweg beibehalten werden.
tracker str botsort.yaml Gibt den zu verwendenden Verfolgungsalgorithmus an, z. B., bytetrack.yaml oder botsort.yaml.
conf float 0.3 Legt die Konfidenzschwelle für Erkennungen fest; niedrigere Werte ermöglichen die Verfolgung von mehr Objekten, können aber auch zu falsch positiven Ergebnissen führen.
iou float 0.5 Legt den Schwellenwert für die Überschneidung über die Vereinigung (IoU) zum Filtern von überlappenden Erkennungen fest.
classes list None Filtert die Ergebnisse nach Klassenindex. Zum Beispiel, classes=[0, 2, 3] verfolgt nur die angegebenen Klassen.
verbose bool True Steuert die Anzeige der Verfolgungsergebnisse und liefert eine visuelle Ausgabe der verfolgten Objekte.

FAQ

Wie kann ich mein Training mit Ultralytics YOLO11 überwachen?

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 push-ups, pull-ups, 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 können Sie den Abschnitt AIGym in der Dokumentation lesen.

Welche Vorteile bietet die Verwendung von Ultralytics YOLO11 für die Trainingsüberwachung?

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

  • Optimierte Leistung: Durch die Anpassung des Trainings auf der Grundlage von Überwachungsdaten können Sie bessere Ergebnisse erzielen.
  • Erreichen von Zielen: Einfaches Verfolgen und Anpassen von Fitnesszielen für messbare Fortschritte.
  • Personalisierung: Erhalten Sie maßgeschneiderte Trainingspläne auf der Grundlage Ihrer individuellen Daten für optimale Effektivität.
  • Gesundheitsbewusstsein: Frühzeitige Erkennung von Mustern, die auf mögliche Gesundheitsprobleme oder Übertraining hinweisen.
  • Informierte Entscheidungen: Treffen Sie datengestützte Entscheidungen, um Routinen anzupassen und realistische Ziele zu setzen.

In einem YouTube-Video können Sie diese Vorteile in Aktion sehen.

Wie genau ist Ultralytics YOLO11 bei der Erkennung und Verfolgung von Übungen?

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 push-ups and pull-ups counting.

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

Ja, Ultralytics YOLO11 kann für individuelle Workout-Routinen angepasst werden. Die AIGym class supports different pose types such as pushup, pullupund abworkout. You can specify keypoints and angles to detect specific exercises. Here is an example setup:

from ultralytics import solutions

gym = solutions.AIGym(
    line_width=2,
    show=True,
    kpts=[6, 8, 10],
)

Weitere Einzelheiten über das Setzen von Argumenten finden Sie in der Argumente AIGym Abschnitt. Diese Flexibilität ermöglicht es Ihnen, verschiedene Übungen zu überwachen und die Routinen an Ihre Bedürfnisse anzupassen.

Wie kann ich die Ausgabe der Trainingsüberwachung mit Ultralytics YOLO11 speichern?

Um die Ausgabe der Trainingsüberwachung zu speichern, können Sie 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 Einzelheiten finden Sie im Abschnitt Workout-Überwachung mit Ausgabe speichern.

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 4 Tagen

Kommentare