上期图文教程,我们分享了 YOLO11 模型,YOLO11 是 Ultralytics实时物体检测系列中的最新模型,以最先进的精度、速度和效率重新定义了目标检测。在之前YOLO 版本基础上,YOLO11 在架构和训练方法上进行了重大改进,使其成为目标检测任务中的核心模型。
主要功能:
- 增强型特征提取: YOLO11 采用改进的架构,增强了特征提取能力,从而实现更精确的目标检测和复杂任务性能。
- 优化效率和速度: YOLO11 引入了完善的架构设计和优化的训练管道,提供更快的处理速度,并在准确性和性能之间保持最佳平衡。
- 参数更少,精度更高:随着模型设计的进步,YOLO11m 在 COCO 数据集上实现了更高的平均精度(mAP),同时使用的参数比YOLOv8m 减少了 22%,从而在不影响精度的情况下提高了计算效率。
- 跨环境适应性: YOLO11 可在各种环境中无缝部署,包括边缘设备、云平台和支持NVIDIA GPU 的系统,确保最大的灵活性。
- 支持的任务范围广泛:无论是对象检测、实例分割、图像分类、姿态估计,还是面向对象检测 (OBB),YOLO11 都能应对各种计算机视觉任务。
YOLO11模型支持众多计算机视觉任务,包括对象检测,实例分割,姿态检测等,本期我们就基于YOLO11模型的姿态检测来介绍一下YOLO11模型的运动健康的锻炼检测。
在YOLO11 的默认姿势模型中,有 17 个关键点,每个关键点代表人体的不同部位。
0: 鼻子 1: 左眼 2: 右眼 3: 左耳 4: 右耳 5: 左肩
6: 右肩 7: 左肘 8: 右肘 9: 左腕 10: 右腕
11: 左髋 12: 右髋 13: 左膝 14: 右膝 15: 左脚踝 16: 右脚踝
YOLO11模型把人体关键点分成 17个点,我们可以通过实时对人体关键点进行检测,并计算关键点之间的运动轨迹,这样就可以监测运动健康情况。
首先,我们来看看人体姿态检测的代码:
from ultralytics import YOLO
model = YOLO('yolov11n-pose.pt')
#图片对象检测
source = 'image.jpg'
results = model(source)
from PIL import Image
for r in results:
im_array = r.plot()
im = Image.fromarray(im_array[..., ::-1])
im.show()
im.save('results.jpg')
# 视频人体姿态检测
video_path = "11.mp4"
cap = cv2.VideoCapture(video_path)
# 这里若cap = cv2.VideoCapture(0)
# 便是打开电脑的默认摄像头
while cap.isOpened():
success, frame = cap.read()
if success:
results = model(frame)
annotated_frame = results[0].plot()
cv2.imshow("YOLOv11 pose", annotated_frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
cv2.destroyAllWindows()
凭借上述代码,我们能够将人体的关键点标注于图片或者视频帧之上。倘若要开展人体运动健康监测工作,我们必须实时记录若干关键点的位置,同时计算在未来视频帧中这些关键点的位置,并剖析二者之间的关联,如此方能准确地自动监测运动健康状况(例如引体向上、俯卧撑等,仅需监测 5、6、7、8、9、10 关键点)。
而YOLO11模型也集成了运动健康监测机制,当然我们也可以自行设计代码来计算(比如 6,8,10)关键点之间的位置,以便来计算(比如俯卧撑)运动项目的数量。
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("11.mp4")
assert cap.isOpened(),
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("result.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 error")
break
im0 = gym.monitor(im0)
video_writer.write(im0)
cv2.destroyAllWindows()
video_writer.release()
这里使用了ultralytics中的AIGym库来检测人体运动情况,首先当我们打开一段锻炼视频后,模型会自动进行人体姿态的检测,而在AIGym参数中,我们定义了关键点的检测(比如 6,8,10),这样就可以动态监测这三个关键点的位置,进而可以动态监测相关关键点的运动情况。
当然,我们也可以监测其他关键点,以便进行其他运行项目的监测,比如腿部关键点,或者人体上半身关键点的监测,都可以进行相关运动项目的对象检测功能。
而YOLO11系列模型的精度与速度都有了较大的提高,我们可以把相关的模型部署到移动端,进而可以在手机,或者其他移动设备上,实时进行运动健康的监测。当然ultralytics也提供了很多其他方面的检测模型。比如物体计数,停车管理,安全警报系统,速度估计,距离计算等等,后期我们再进行一一分享。
https://docs.ultralytics.com/zh/models/yolo11/#overview