基于 MediaPipe 的健身动作计数与姿态纠错系统:Python 姿态估计、深蹲/俯卧撑/弯举计数完整项目实战
摘要本文围绕一个完整可运行的MediaPipe 健身动作计数与姿态纠错系统展开,从项目背景、技术选型、人体姿态关键点、动作角度计算、状态机计数、姿态纠错规则、运行效果到源码结构进行完整讲解。项目使用 Python、OpenCV 和 MediaPipe Pose 构建,支持深蹲、俯卧撑、哑铃弯举三类动作分析。系统不仅能输出动作次数,还会给出膝关节角度、肘关节角度、身体线条、躯干前倾、肘部漂移等反馈,并将标注图、过程采样图、指标曲线和 CSV 结果保存到本地。本文的运行效果使用真实健身视频片段完成验证:MediaPipe Pose 负责从视频帧中识别人体关键点,项目再基于关节角度和状态机输出计数、动作阶段、姿态反馈、结果图、过程采样图和指标曲线。为了方便读者在没有摄像头或测试视频时先跑通流程,源码也保留了内置姿态序列 demo;真实图片、视频和摄像头模式则共用同一套动作分析逻辑。关键词:MediaPipe、人体姿态估计、健身动作计数、姿态纠错、OpenCV、Python 项目实战、深蹲计数、俯卧撑计数、哑铃弯举识别、AI 项目源码一、项目背景:为什么选择健身动作计数而不是继续做普通检测项目很多视觉项目会从目标检测入门,例如安全帽检测、口罩检测、车辆检测、垃圾分类识别等。这些项目很适合学习深度学习训练流程,但如果每次都围绕检测框展开,项目形式很容易重复。健身动作计数是一个更适合展示“视觉理解 + 规则推理 + 系统开发”的方向,因为它的核心不是简单判断画面中有没有某个物体,而是要理解人体关键点之间的运动关系。在真实健身场景中,用户关心的不只是“识别到了人”,而是动作做了几次、下蹲够不够深、俯卧撑身体是不是塌腰、弯举时手臂有没有甩动。也就是说,项目需要把人体姿态估计结果进一步转化为动作阶段、关节角度、动作质量和纠错建议。这比单纯做图像分类或目标检测更接近一个完整应用系统。MediaPipe 官方的 Pose Landmarker 任务可以在图像或视频中检测人体关键点,并用于识别身体关键位置、分析姿态和分类动作;任务输出包括图像坐标下的人体姿态关键点以及 3D 世界坐标。MediaPipe 旧版 Pose 文档也说明,它可以从 RGB 视频帧中推理全身 33 个 3D 关键点,并且典型应用就包括运动量化、健身应用、舞蹈和手势控制。本文项目正是基于这一能力,把关键点结果进一步封装成一个可运行的健身动作计数系统。参考资料:MediaPipe Solutions guide:https://ai.google.dev/edge/mediapipe/solutions/guidePose Landmarker Python guide:https://ai.google.dev/edge/mediapipe/solutions/vision/pose_landmarker/pythonMediaPipe Pose legacy documentation:https://github.com/google-ai-edge/mediapipe/blob/master/docs/solutions/pose.mdMediaPipe Python setup guide:https://ai.google.dev/edge/mediapipe/solutions/setup_python二、项目最终实现效果本项目交付的是一个完整代码包,不是代码片段。运行后可以得到图片、CSV、视频和曲线图等结果。下面的运行效果来自真实视频模式,系统会在画面中绘制人体骨架,右上角显示动作类型、当前计数、动作阶段、核心角度和质量分数,底部显示姿态反馈。以深蹲视频片段为例,本次识别到 2 次完整动作,结果如下。真实摄像头或视频接入 MediaPipe Pose 后,后端会输出肩、肘、腕、髋、膝、踝等 33 个身体关键点。下面补充一张 MediaPipe 官方姿态跟踪运行参考图,展示真实人体画面上的骨架连线效果,和本项目深蹲、俯卧撑、弯举计数所依赖的关键点输入一致。深蹲过程中的多个关键帧会被保存为采样图,方便在博客、项目报告或答辩 PPT 中展示动作从站立到下蹲再回到站立的变化过程。系统还会将每一帧的核心角度、计数和质量分数保存为 CSV,并绘制为曲线。这个图非常适合解释为什么系统能数出动作次数:当关节角度跨越“下放阈值”和“起身阈值”时,状态机会发生切换,最终完成计数。除了深蹲,本次还使用真实俯卧撑视频片段进行了验证。俯卧撑主要依据肘关节角度和肩髋踝身体线判断动作阶段与身体姿态,本次视频片段识别到 3 次动作。哑铃弯举主要分析肩、肘、腕三点形成的肘关节角度,并结合肘部相对肩部的位置变化给出“肘部是否漂移”的提示。本次真实弯举视频片段识别到 2 次动作。三类动作的真实视频运行结果可以汇总为下图。实际项目运行时,结果图、采样图和曲线图都会保存到对应输出目录,便于继续写报告或做二次可视化。三、系统功能设计这个项目的目标不是只写一个“调用 MediaPipe 显示骨架”的脚本,而是做成一个可以发布到 CSDN、用于课程实践、项目展示或二次开发的完整项目。因此功能设计上分成四层。第一层是输入层。系统支持四种模式:demo、image、video、camera。demo 模式使用内置的演示姿态序列,可以直接跑通;image、video、camera 模式使用 MediaPipe 后端处理真实图片、视频和摄像头画面。第二层是姿态估计层。真实模式下,src/pose_backend.py负责调用mediapipe.solutions.pose.Pose,将 OpenCV 读取到的 BGR 图像转换为 RGB 图像,再得到 33 个标准化人体关键点。demo 模式下,src/demo_generator.py直接生成兼容 MediaPipe Pose 格式的关键点,便于没有摄像头或没有安装 MediaPipe 时验证项目。第三层是动作分析层。src/geometry.py负责计算关节夹角、身体线角度和关键点距离;src/exercise_counter.py负责根据不同动作的阈值进行阶段判断、计数和姿态反馈。深蹲、俯卧撑和弯举虽然动作不同,但底层思路一致:先确定关键关节,再根据角度变化判断动作是否完成。第四层是输出层。src/visualization.py负责绘制骨架、计数面板、反馈文本、结果图、过程采样图和指标曲线。主流程src/pipeline.py将这些模块串起来,最终