Zum Inhalt springen

Workouts Überwachung mit Ultralytics YOLO11

Ü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 Überwachung mit Ultralytics YOLO11 | Liegestütze, Klimmzüge, 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 or 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 FalseWenn `True', werden alte Frames übersprungen, um neue Frames unterzubringen (optimiert für Echtzeitanwendungen). Bei "True" werden neue Frames in einem Puffer in eine Warteschlange gestellt, wodurch sichergestellt wird, dass keine Frames übersprungen werden, was jedoch zu Latenzzeiten führt, wenn die FPS der Inferenz niedriger sind als die FPS des Streams.
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?

Um Ihr Training mit Ultralytics YOLO11 zu überwachen, können Sie die Funktionen zur Schätzung der Körperhaltung nutzen, um wichtige Körperpunkte und Gelenke in Echtzeit zu verfolgen und zu analysieren. Auf diese Weise erhalten Sie sofortiges Feedback zu Ihrer Trainingsform, können Wiederholungen zählen und Leistungskennzahlen messen. Sie können mit dem mitgelieferten Beispielcode für Liegestütze, Klimmzüge oder Bauchmuskeltraining beginnen, wie in der Abbildung gezeigt:

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 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 Echtzeit-Feedback zu Trainingsform und Leistungsmetriken. Die vortrainierten Gewichte und die robuste Architektur des Modells gewährleisten eine hohe Präzision und Zuverlässigkeit. Beispiele aus der Praxis finden Sie in der Dokumentation unter " Real-world applications", wo Liegestütze und Klimmzüge gezählt werden.

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

Ja, Ultralytics YOLO11 kann für individuelle Workout-Routinen angepasst werden. Die AIGym Klasse unterstützt verschiedene Haltungstypen wie "Liegestütz", "Klimmzug" und "Bauchmuskeltraining". Sie können Eckpunkte und Winkel angeben, um bestimmte Übungen zu erkennen. Hier ist ein Beispiel für die Einrichtung:

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 1 Monat

Kommentare