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

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

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

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

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

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

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

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

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

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

Карта KeyPoints

KeyPoints Order Ultralytics YOLOv8  Pose

Аргументы set_args

Имя Тип По умолчанию Описание
kpts_to_check list None Список из трех ключевых точек индекса, для подсчета конкретной тренировки, за которым следует карта ключевых точек
view_img bool False Отображение кадра с подсчетами
line_thickness int 2 Увеличь толщину счетного значения
pose_type str pushup Позы, за которыми нужно следить, "подтягивание" и "тренировка мышц живота" также поддерживаются
pose_up_angle int 145 Значение угла подъема позы
pose_down_angle int 90 Значение угла падения позы

Аргументы 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 Возвращай векторы признаков/вкрапления из заданных слоев


Создано 2023-12-02, Обновлено 2024-01-15
Авторы: glenn-jocher (4), chr043416@gmail.com (2), RizwanMunawar (1)

Комментарии