基于yolo11的冲拳计数器

一、环境准备:搭建开发环境

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 轻量级模型,平衡速度与精度

四、未来扩展方向

  1. 导出ONNX格式模型,在开发板上边缘计算