用MediaPipe Pose模块做个AI健身教练:Python+OpenCV实时分析深蹲动作(附完整代码)
用MediaPipe Pose打造智能深蹲教练从关节点检测到动作标准度分析实战居家健身时最头疼的莫过于动作是否标准——膝盖有没有内扣背部是否保持挺直今天我们就用PythonMediaPipe构建一个实时深蹲动作分析系统通过计算机视觉技术让手机摄像头变身AI私教。这个项目不仅能输出关节角度数据还会在画面中用颜色标记动作错误适合想将计算机视觉落地到健身场景的开发者。1. 环境搭建与MediaPipe基础首先需要安装必要的库建议使用Python 3.8环境pip install mediapipe opencv-python numpyMediaPipe的Pose模块提供33个人体关节点检测包括四肢、躯干和面部特征点。初始化时这几个参数需要特别注意import mediapipe as mp mp_pose mp.solutions.pose pose mp_pose.Pose( static_image_modeFalse, # 视频流模式 model_complexity1, # 平衡精度与速度 smooth_landmarksTrue, # 平滑处理 min_detection_confidence0.5, min_tracking_confidence0.5 )关键点坐标以比例值形式返回0-1之间需要转换为像素坐标才能绘制到图像上。这个转换过程需要注意图像宽高的获取时机h, w image.shape[:2] # 必须先获取图像尺寸 landmark_px int(landmark.x * w), int(landmark.y * h) # 像素坐标转换2. 深蹲动作的 biomechanics 分析一个标准的深蹲需要监控三个关键指标膝盖位置膝盖不应超过脚尖垂直线背部姿态脊椎应保持自然生理弯曲下蹲深度大腿至少与地面平行通过MediaPipe获取的关节点我们可以计算这些指标检测指标相关关节点计算方法膝盖前伸脚踝、膝盖、髋关节膝盖到脚尖的水平距离背部弯曲肩、髋、膝三点三点连线形成的角度下蹲深度髋关节高度与站立时髋高的比值计算关节角度的实用函数示例def calculate_angle(a, b, c): 计算三点形成的夹角度 a, b, c np.array(a), np.array(b), np.array(c) radians np.arctan2(c[1]-b[1], c[0]-b[0]) - np.arctan2(a[1]-b[1], a[0]-b[0]) angle np.abs(radians*180.0/np.pi) return angle if angle 180 else 360-angle3. 实时反馈系统实现完整的处理流程应该包括摄像头帧捕获关节点检测动作分析可视化反馈核心处理循环代码结构cap cv2.VideoCapture(0) while cap.isOpened(): success, image cap.read() if not success: continue # 关节点检测 image.flags.writeable False results pose.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) if results.pose_landmarks: # 获取关键关节点坐标 landmarks results.pose_landmarks.landmark left_hip [landmarks[mp_pose.PoseLandmark.LEFT_HIP].x, ...] right_knee [landmarks[mp_pose.PoseLandmark.RIGHT_KNEE].x, ...] # 计算各项指标 knee_angle calculate_angle(left_hip, left_knee, left_ankle) # 可视化反馈 if knee_angle 160: cv2.putText(image, DEEP ENOUGH, (100,100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)可视化技巧用不同颜色线条区分动作状态绿色标准红色错误在关节位置添加实时角度数值显示在画面侧边添加动作完成度进度条4. 性能优化与常见问题提升实时性的几个关键点分辨率调整将输入图像缩小到640x480再处理帧率控制设定固定处理频率如15fps多线程处理将图像采集与计算分离# 设置摄像头分辨率 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) # 固定帧率处理 frame_count 0 process_every_n_frame 2 # 每2帧处理一次常见问题解决方案关节点抖动增加smooth_landmarks参数或添加移动平均滤波多人场景MediaPipe默认只检测最显著的人体需要自定义扩展遮挡处理通过前后帧数据插值补全缺失关节点实际测试中发现当用户穿着单色紧身衣时检测准确率能提升约30%。对于家庭使用场景建议在初始化时设置model_complexity2以获得更好的精度。5. 扩展应用场景这套系统稍作修改就能应用于其他健身动作分析平板支撑检测髋部是否下沉俯卧撑计算身体下降幅度引体向上测量下巴过杠高度对于康复训练场景可以增加运动范围(ROM)测量左右侧动作对称性分析运动轨迹记录与回放在最近的一个客户案例中我们将该系统与智能镜子结合用户无需穿戴任何设备就能获得实时动作指导特别适合居家康复训练场景。