Zum Inhalt springen

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.

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 zur Anpassung von Routinen und zum Setzen realistischer Ziele.

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

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.predict(im0, verbose=False)
    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.predict(im0, verbose=False)
    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

keyPoints Reihenfolge Ultralytics YOLOv8  Pose

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


Erstellt am 2023-12-02, Aktualisiert am 2024-01-15
Autoren: glenn-jocher (4), chr043416@gmail.com (2), RizwanMunawar (1)

Kommentare