跳至内容

使用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()
支持

支持 "俯卧撑"、"引体向上 "和 "腹肌锻炼"。

关键点地图

关键点顺序Ultralytics YOLOv8  姿势

论据 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 NMS 的 "相交大于结合"(IoU)阈值
imgsz int or tuple 640 图像尺寸标量或(高,宽)列表,即(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 缓冲所有流媒体帧(真)或返回最新帧(假)
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)

评论