跳至内容

使用锻炼监测Ultralytics YOLOv8

通过姿势估算监测锻炼 Ultralytics YOLOv8通过实时准确地跟踪关键的身体地标和关节,增强了运动评估功能。这项技术可提供有关锻炼姿势的即时反馈、跟踪锻炼程序并测量性能指标,从而优化用户和教练的训练课程。



观看: 使用Ultralytics YOLOv8 监测锻炼情况 | 俯卧撑、引体向上、腹肌锻炼

锻炼监测的优势?

  • 优化性能:根据监测数据定制锻炼计划,以获得更好的效果。
  • 实现目标:跟踪和调整健身目标,以取得可衡量的进展。
  • 个性化:根据个人数据定制锻炼计划,提高效率。
  • 健康意识:及早发现表明存在健康问题或训练过度的模式。
  • 知情决策:以数据为依据,做出调整常规和设定现实目标的决定。

真实世界的应用

锻炼监测 锻炼监测
俯卧撑计数 引体向上计数
俯卧撑计数 引体向上计数

锻炼监测示例

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],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)  # Tracking recommended
    # results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results)

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],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)  # Tracking recommended
    # results = model.predict(im0)  # Prediction also supported
    im0 = gym_object.start_counting(im0, results)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()
支持

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

关键点地图

关键点顺序Ultralytics YOLOv8  姿势

论据 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 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 返回给定层的特征向量/嵌入值

论据 model.track

名称 类型 默认值 说明
source im0 None 图像或视频的源目录
persist bool False 帧与帧之间的持久轨迹
tracker str botsort.yaml 跟踪方法 "bytetrack "或 "botsort
conf float 0.3 置信度阈值
iou float 0.5 借据阈值
classes list None 按类别筛选结果,即 classes=0,或 classes=[0,2,3]
verbose bool True 显示物体跟踪结果

常见问题

如何使用Ultralytics YOLOv8 监控我的锻炼?

要使用Ultralytics YOLOv8 监测锻炼情况,可以利用姿势估计功能实时跟踪和分析关键的身体地标和关节。这样,您就可以收到有关锻炼姿势、重复次数和衡量性能指标的即时反馈。您可以先使用所提供的示例代码进行俯卧撑、引体向上或腹肌锻炼,如图所示:

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],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)
    im0 = gym_object.start_counting(im0, results)

cv2.destroyAllWindows()

有关进一步的自定义和设置,请参阅文档中的AIGym部分。

使用Ultralytics YOLOv8 进行锻炼监测有什么好处?

使用Ultralytics YOLOv8 进行锻炼监测有几大好处:

  • 优化性能:根据监测数据定制锻炼计划,可以取得更好的效果。
  • 实现目标:轻松跟踪和调整健身目标,取得可衡量的进展。
  • 个性化:根据个人数据定制锻炼计划,达到最佳效果。
  • 健康意识:及早发现表明潜在健康问题或过度训练的模式。
  • 知情决策:以数据为依据做出决策,调整常规工作,制定切实可行的目标。

您可以观看YouTube 视频演示,了解这些优势的实际效果。

Ultralytics YOLOv8 在检测和跟踪演习方面的准确性如何?

Ultralytics YOLOv8 由于具有最先进的姿态估计功能,它在检测和跟踪运动方面非常准确。它能准确跟踪关键的身体地标和关节,提供有关运动形式和性能指标的实时反馈。该模型的预训练权重和稳健架构确保了高精度和高可靠性。有关真实世界的示例,请查看文档中的真实世界应用部分,其中展示了俯卧撑和引体向上计数。

我可以使用Ultralytics YOLOv8 来定制锻炼程序吗?

是的,Ultralytics YOLOv8 可以改编成定制的锻炼程序。""是的。 AIGym 类支持不同的姿势类型,如 "俯卧撑"、"引体向上 "和 "腹肌锻炼"。您可以指定关键点和角度来检测特定的练习。下面是一个设置示例:

from ultralytics import solutions

gym_object = solutions.AIGym(
    line_thickness=2,
    view_img=True,
    pose_type="squat",
    kpts_to_check=[6, 8, 10],
)

有关设置参数的更多详情,请参阅 论据 AIGym 部分。这种灵活性使您可以监控各种练习,并根据自己的需要定制例程。

如何使用Ultralytics YOLOv8 保存锻炼监控输出?

要保存运动监控输出,可以修改代码,加入一个视频写入器,保存处理过的帧。下面是一个例子:

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],
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = model.track(im0, verbose=False)
    im0 = gym_object.start_counting(im0, results)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()

此设置可将监控视频写入输出文件。有关详情,请参阅 "使用保存输出进行锻炼监控"部分。



创建于 2023-12-02,更新于 2024-07-05
作者:glenn-jocher(12)、ambitious-octopus(1)、IvorZhu331(1)、RizwanMunawar(4)

评论