跳至内容

使用锻炼监测Ultralytics YOLO11

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



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

锻炼监测的优势?

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

真实世界的应用

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

锻炼监测示例

# Run a workout example
yolo solutions workout show=True

# Pass a source video
yolo solutions workout source="path/to/video/file.mp4"

# Use keypoints for pushups
yolo solutions workout kpts=[6, 8, 10]
import cv2

from ultralytics import solutions

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
video_writer = cv2.VideoWriter("workouts.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init AIGym
gym = solutions.AIGym(
    show=True,  # Display the frame
    kpts=[6, 8, 10],  # keypoints index of person for monitoring specific exercise, by default it's for pushup
    model="yolo11n-pose.pt",  # Path to the YOLO11 pose estimation model file
    # line_width=2,  # Adjust the line width for bounding boxes and text display
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    im0 = gym.monitor(im0)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()

关键点地图

关键点顺序Ultralytics YOLO11  姿势

论据 AIGym

名称 类型 默认值 说明
kpts list None 三个关键点索引列表,用于计算特定的锻炼,之后是关键点地图
line_width int 2 绘制线条的厚度。
show bool False 显示图像的标志。
up_angle float 145.0 向上 "姿势的角度阈值。
down_angle float 90.0 俯卧 "姿势的角度阈值。
model str None Ultralytics YOLO Pose 模型文件的路径

论据 model.predict

论据 类型 默认值 说明
source str 'ultralytics/assets' 指定推理的数据源。可以是图像路径、视频文件、目录、URL 或用于实时馈送的设备 ID。支持多种格式和来源,可灵活应用于不同类型的输入
conf float 0.25 设置检测的最小置信度阈值。如果检测到的对象置信度低于此阈值,则将不予考虑。调整该值有助于减少误报。
iou float 0.7 非最大抑制 (NMS) 的交叉重叠(IoU) 阈值。较低的数值可以消除重叠的方框,从而减少检测次数,这对减少重复检测非常有用。
imgsz int or tuple 640 定义用于推理的图像大小。可以是一个整数 640 或一个(高度、宽度)元组。适当调整大小可以提高检测效率 精确度 和处理速度。
half bool False 启用精度(FP16)推理,可加快支持的 GPU 上的模型推理速度,同时将对精度的影响降至最低。
device str None 指定用于推理的设备(例如:......)、 cpu, cuda:00).允许用户选择CPU 、特定GPU 或其他计算设备执行模型。
batch int 1 指定推理的批量大小(仅当来源为 目录、视频文件或 .txt 文件).更大的批次规模可以提供更高的吞吐量,缩短推理所需的总时间。
max_det int 300 每幅图像允许的最大检测次数。限制模型在单次推理中可以检测到的物体总数,防止在密集场景中产生过多的输出。
vid_stride int 1 视频输入的帧间距。允许跳过视频中的帧,以加快处理速度,但会牺牲时间分辨率。数值为 1 时会处理每一帧,数值越大越跳帧。
stream_buffer bool False 决定是否对接收到的视频流帧进行排队。如果 False,旧帧会被丢弃,以容纳新帧(针对实时应用进行了优化)。如果为 "真",则在缓冲区中排队等待新帧,确保不会跳过任何帧,但如果推理的 FPS 低于流的 FPS,则会造成延迟。
visualize bool False 在推理过程中激活模型特征的可视化,从而深入了解模型 "看到 "了什么。这对调试和模型解释非常有用。
augment bool False 可对预测进行测试时间增强(TTA),从而在牺牲推理速度的情况下提高检测的鲁棒性。
agnostic_nms bool False 启用与类别无关的非最大抑制 (NMS),可合并不同类别的重叠方框。这在多类检测场景中非常有用,因为在这种场景中,类的重叠很常见。
classes list[int] None 根据一组类别 ID 过滤预测结果。只有属于指定类别的检测结果才会返回。这对于在多类检测任务中集中检测相关对象非常有用。
retina_masks bool False 返回高分辨率分割掩码。返回的掩码 (masks.data) 如果启用,将与原始图像大小相匹配。如果禁用,它们将与推理过程中使用的图像大小一致。
embed list[int] None 指定从中提取特征向量或嵌入的层。这对聚类或相似性搜索等下游任务非常有用。
project str None 保存预测结果的项目目录名称,如果 save 已启用。
name str None 预测运行的名称。用于在项目文件夹内创建一个子目录,在下列情况下存储预测输出结果 save 已启用。

论据 model.track

论据 类型 默认值 说明
source str None 指定图片或视频的源目录。支持文件路径和 URL。
persist bool False 可在帧间持续跟踪对象,在视频序列中保持 ID。
tracker str botsort.yaml 指定要使用的跟踪算法,例如 bytetrack.yamlbotsort.yaml.
conf float 0.3 设置检测的置信度阈值;数值越低,跟踪的物体越多,但可能会出现误报。
iou float 0.5 设置交叉重叠 (IoU) 阈值,用于过滤重叠检测。
classes list None 按类别索引筛选结果。例如 classes=[0, 2, 3] 只跟踪指定的类别。
verbose bool True 控制跟踪结果的显示,提供被跟踪物体的可视化输出。

常见问题

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

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

import cv2

from ultralytics import solutions

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 = solutions.AIGym(
    line_width=2,
    show=True,
    kpts=[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
    im0 = gym.monitor(im0)

cv2.destroyAllWindows()

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

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

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

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

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

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

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

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

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

from ultralytics import solutions

gym = solutions.AIGym(
    line_width=2,
    show=True,
    kpts=[6, 8, 10],
)

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

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

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

import cv2

from ultralytics import solutions

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 = solutions.AIGym(
    line_width=2,
    show=True,
    kpts=[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
    im0 = gym.monitor(im0)
    video_writer.write(im0)

cv2.destroyAllWindows()
video_writer.release()

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

📅创建于 1 年前 ✏️已更新 24 天前

评论