一、环境准备:搭建开发环境
1.1 安装依赖库
pip install ultralytics opencv-python numpy torch
ultralytics
:YOLO11官方库,提供开箱即用的姿势检测模型opencv-python
:摄像头画面捕获及图像处理
1.2 下载预训练模型
从这里下载预训练模型
YOLO11提供了不同大小的预训练姿势检测模型,这里选择最轻量模型:
from ultralytics import YOLO
model = YOLO('yolo11n-pose.pt') # yolo11姿势检测器模型
二、核心功能
2.1 关键点检测
YOLO11的姿势检测模型可识别17个人体关键点,冲拳重点关注手腕位置(关键点9和10):
def draw_keypoints(frame, keypoints):
# 绘制左右手腕关键点
cv2.circle(frame, (x, y), 8, (255,0,0), -1) # 左手腕蓝色
cv2.circle(frame, (x, y), 8, (0,0,255), -1) # 右手腕红色
2.2 冲拳检测逻辑
通过监测左右手腕的X坐标变化实现动作判断:
def detect_punch(frame, keypoints):
left_x = keypoints[9][0] # 左手腕X坐标
right_x = keypoints[10][0] # 右手腕X坐标
# 判断手腕位置交换(出拳动作特征)
if (left_x > right_x) != last_positions[-1]:
punch_count += 1
cv2.putText(frame, "PUNCH!", (250,100), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (0,255,0), 2)
2.3 实时视频处理
使用OpenCV实现摄像头实时检测:
cap = cv2.VideoCapture(0) # 启动摄像头
while True:
ret, frame = cap.read()
results = model.predict(frame, conf=0.8) # 置信度阈值0.8
三、运行效果
- 动态计数器统计出拳次数
3.1 参数调优指南
参数 | 建议值 | 说明 |
---|---|---|
conf_threshold | 0.6~0.8 | 置信度过滤,避免误检 |
MIN_SWAP_INTERVAL | 0.2s | 防连击抖动,根据动作速度调整 |
模型版本 | yolo11n-pose | 轻量级模型,平衡速度与精度 |
四、未来扩展方向
- 导出ONNX格式模型,在开发板上边缘计算