Перейти к содержимому

Мониторинг тренировок с помощью Ultralytics YOLOv8 🚀.

Мониторинг тренировок с помощью оценки позы с Ultralytics YOLOv8 улучшает оценку упражнений благодаря точному отслеживанию основных ориентиров тела и суставов в режиме реального времени. Эта технология обеспечивает мгновенную обратную связь о форме упражнений, отслеживает режим тренировки и измеряет показатели эффективности, оптимизируя тренировки как для пользователей, так и для тренеров.



Смотри: Мониторинг тренировок с использованием Ultralytics YOLOv8 | Pushups, Pullups, Ab Workouts.

Преимущества мониторинга тренировок?

  • Оптимизированная производительность: Подбирай тренировки на основе данных мониторинга для достижения лучших результатов.
  • Достижение целей: Отслеживай и корректируй фитнес-цели, чтобы добиться измеримого прогресса.
  • Персонализация: Индивидуальные планы тренировок, основанные на индивидуальных данных для эффективности.
  • Информированность о здоровье: Раннее обнаружение паттернов, указывающих на проблемы со здоровьем или перетренированность.
  • Обоснованные решения: Принятие решений, основанных на данных, для корректировки распорядка и постановки реалистичных целей.

Применение в реальном мире

Контроль за тренировками Контроль за тренировками
Подсчет отжиманий Подсчет подтягиваний
Подсчет отжиманий Подсчет подтягиваний

Пример мониторинга тренировок

import cv2

from ultralytics import YOLO, solutions

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 = solutions.AIGym(
    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()
import cv2

from ultralytics import YOLO, solutions

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 = solutions.AIGym(
    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()
Поддержи

Поддерживаются "отжимания", "подтягивания" и "abworkout".

Карта KeyPoints

KeyPoints Order Ultralytics YOLOv8  Pose

Аргументы AIGym

Имя Тип По умолчанию Описание
kpts_to_check list None Список из трех ключевых точек индекса, для подсчета конкретной тренировки, за которым следует карта ключевых точек
line_thickness int 2 Толщина нарисованных линий.
view_img bool False Флаг для отображения картинки.
pose_up_angle float 145.0 Порог угла для позы "вверх".
pose_down_angle float 90.0 Порог угла для позы "вниз".
pose_type str pullup Тип позы, которую нужно обнаружить ('pullup', pushup, abworkout, squat).

Аргументы model.predict

Имя Тип По умолчанию Описание
source str 'ultralytics/assets' исходный каталог для изображений или видео
conf float 0.25 порог доверия к объекту для обнаружения
iou float 0.7 Порог пересечения над объединением (IoU) для NMS
imgsz int or tuple 640 Размер изображения в виде скаляра или списка (h, w), то есть (640, 480)
half bool False Используй половинную точность (FP16)
device None or str None Устройство, на котором будет работать, например, cuda device=0/1/2/3 или device=cpu
max_det int 300 максимальное количество обнаружений на одно изображение
vid_stride bool False частота кадров видео
stream_buffer bool False Буферизируй все потоковые кадры (True) или возвращай самый последний кадр (False).
visualize bool False визуализируй особенности модели
augment bool False Применяй увеличение изображения для источников предсказаний
agnostic_nms bool False классово-диагностический NMS
classes list[int] None Фильтруй результаты по классам, то есть classes=0, или classes=[0,2,3]
retina_masks bool False используй маски для сегментации с высоким разрешением
embed list[int] None Возвращай векторы признаков/вкрапления из заданных слоев

Аргументы model.track

Имя Тип По умолчанию Описание
source im0 None исходный каталог для изображений или видео
persist bool False Сохранение треков между кадрами
tracker str botsort.yaml Метод отслеживания 'bytetrack' или 'botsort'
conf float 0.3 Порог доверия
iou float 0.5 Порог IOU
classes list None Фильтруй результаты по классам, то есть classes=0, или classes=[0,2,3]
verbose bool True Отображение результатов отслеживания объектов


Created 2023-12-02, Updated 2024-06-10
Authors: glenn-jocher (10), IvorZhu331 (1), RizwanMunawar (4)

Комментарии