Workouts überwachen 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 |
Beispiel für die Überwachung von Workouts
from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2
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 = ai_gym.AIGym() # init AI GYM module
gym_object.set_args(line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10])
frame_count = 0
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
frame_count += 1
results = model.track(im0, verbose=False) # Tracking recommended
#results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results, frame_count)
cv2.destroyAllWindows()
from ultralytics import YOLO
from ultralytics.solutions import ai_gym
import cv2
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 = ai_gym.AIGym() # init AI GYM module
gym_object.set_args(line_thickness=2,
view_img=True,
pose_type="pushup",
kpts_to_check=[6, 8, 10])
frame_count = 0
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
frame_count += 1
results = model.track(im0, verbose=False) # Tracking recommended
#results = model.predict(im0) # Prediction also supported
im0 = gym_object.start_counting(im0, results, frame_count)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
Unterstütze
"pushup", "pullup" und "abworkout" unterstützt
KeyPoints Karte
Argumente set_args
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 |
view_img |
bool |
False |
Den Rahmen mit Zählungen anzeigen |
line_thickness |
int |
2 |
Erhöhe die Dicke des Zählwerts |
pose_type |
str |
pushup |
Pose, die überwacht werden muss, pullup und abworkout auch unterstützt |
pose_up_angle |
int |
145 |
Pose Up Angle Wert |
pose_down_angle |
int |
90 |
Pose Down Winkel Wert |
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 |