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 |
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))
# 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
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. |
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 Wenn `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.