使用锻炼监测Ultralytics YOLO11
通过姿势估算监测锻炼 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))
# 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()
关键点地图
论据 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:0 或 0 ).允许用户选择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.yaml 或 botsort.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()
此设置可将监控视频写入输出文件。有关详情,请参阅 "使用保存输出进行锻炼监控"部分。