当前位置: 首页 > article >正文

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

从零构建健身动作分析系统基于BlazePose的实时姿态追踪实战指南在居家健身和数字化运动监测日益普及的今天计算机视觉技术为个人健身提供了全新的可能性。想象一下当你对着摄像头完成一组深蹲时系统能实时指出膝盖内扣角度过大或下蹲深度不足——这正是BlazePose模型结合Python生态带来的变革。不同于传统的健身APP仅依赖加速度计数据基于视觉的姿态追踪能捕捉完整的空间运动轨迹为动作质量评估提供更丰富的维度。1. 环境配置与模型选型搭建开发环境是项目的第一步。推荐使用conda创建独立的Python 3.8环境避免依赖冲突conda create -n fitness-tracker python3.8 conda activate fitness-tracker pip install mediapipe opencv-python numpy matplotlibBlazePose提供三种预训练模型各有特点模型类型推理速度(FPS)准确度适用设备模型大小轻量版50中等移动设备1.2MB标准版30较高桌面端3.5MB重量版15最高工作站8.4MB对于实时健身追踪场景标准版在精度和速度间取得了最佳平衡。下载模型后建议通过以下代码验证安装import mediapipe as mp print(mp.__version__) # 应输出1.0.0或更高版本 mp_pose mp.solutions.pose注意MediaPipe对OpenCV的版本较敏感推荐使用opencv-python 4.5.x系列以避免兼容性问题2. 实时视频流处理架构设计构建稳健的视频处理流水线是系统核心。下图展示了我们的处理流程摄像头捕获 → 帧预处理 → BlazePose推理 → 关键点后处理 → 可视化渲染关键实现要点包括帧率控制使用cv2.VideoCapture的read()方法获取帧时添加适当的延迟维持稳定帧率双缓冲处理分离图像采集和处理的线程避免I/O阻塞姿态平滑应用指数移动平均(EMA)滤波减少关键点抖动完整初始化代码如下import cv2 import numpy as np from mediapipe.python.solutions import pose as mp_pose pose_tracker mp_pose.Pose( static_image_modeFalse, model_complexity1, # 0-轻量,1-标准,2-重量 smooth_landmarksTrue, min_detection_confidence0.7, min_tracking_confidence0.5) cap cv2.VideoCapture(0) # 0为默认摄像头 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)3. 健身动作量化分析技术单纯绘制关键点远未发挥BlazePose的全部价值。我们可通过几何计算转化原始数据为有意义的健身指标3.1 深蹲深度检测利用髋关节(23/24)、膝关节(25/26)、踝关节(27/28)的垂直坐标计算弯曲角度def calculate_squat_depth(landmarks): hip_y (landmarks[mp_pose.PoseLandmark.LEFT_HIP.value].y landmarks[mp_pose.PoseLandmark.RIGHT_HIP.value].y)/2 knee_y (landmarks[mp_pose.PoseLandmark.LEFT_KNEE.value].y landmarks[mp_pose.PoseLandmark.RIGHT_KNEE.value].y)/2 return (knee_y - hip_y) * 100 # 标准化为百分比3.2 俯卧撑幅度评估通过肩部(11/12)和手腕(15/16)的水平距离变化监测动作完整性def pushup_quality(landmarks): left_shoulder landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value] right_wrist landmarks[mp_pose.PoseLandmark.RIGHT_WRIST.value] return np.sqrt((left_shoulder.x - right_wrist.x)**2 (left_shoulder.y - right_wrist.y)**2)提示实际应用中应建立基线值用户标准姿势时的初始距离进行相对测量3.3 动作计数算法状态机是实现可靠计数的有效方法。以深蹲为例squat_state up # 可能状态: up, down, transitioning squat_count 0 def update_squat_counter(depth): global squat_state, squat_count if squat_state up and depth 60: squat_state down elif squat_state down and depth 30: squat_state up squat_count 14. 可视化反馈系统优化专业的视觉反馈能显著提升用户体验。我们采用多图层渲染策略原始视频层半透明背景保持场景上下文骨架绘制层用不同颜色区分肢体 segments数据叠加层实时显示关键指标指导提示层动态错误纠正改进后的绘制函数示例def draw_custom_landmarks(image, landmarks): # 连接线样式配置 connection_drawing_spec mp_pose.DrawingSpec( thickness3, circle_radius1, color(0, 255, 0)) # 特殊关注关节高亮 for landmark in [mp_pose.PoseLandmark.LEFT_SHOULDER, mp_pose.PoseLandmark.RIGHT_SHOULDER]: idx landmark.value cv2.circle(image, (int(landmarks[idx].x * image.shape[1]), int(landmarks[idx].y * image.shape[0])), 8, (0, 0, 255), -1) # 绘制标准连接线 mp_pose.draw_landmarks( image, landmarks, mp_pose.POSE_CONNECTIONS, connection_drawing_specconnection_drawing_spec)5. 性能优化实战技巧实现流畅的实时体验需要多方面的优化5.1 推理加速技术分辨率调整将输入图像缩放至256x256可提升3倍速度精度损失可控ROI裁剪基于上一帧检测结果裁剪关注区域模型量化将模型转换为FP16或INT8格式# 动态分辨率调整示例 def resize_with_aspect_ratio(image, target_size): h, w image.shape[:2] scale min(target_size[0]/w, target_size[1]/h) return cv2.resize(image, (int(w*scale), int(h*scale)))5.2 多线程处理架构from threading import Thread import queue class ProcessingPipeline: def __init__(self): self.frame_queue queue.Queue(maxsize3) self.result_queue queue.Queue(maxsize3) def capture_thread(self): while True: ret, frame cap.read() if not ret: break if self.frame_queue.full(): self.frame_queue.get() self.frame_queue.put(frame) def processing_thread(self): while True: frame self.frame_queue.get() results pose_tracker.process(frame) self.result_queue.put((frame, results))5.3 内存优化策略零拷贝处理使用mp.Image共享内存而非复制数据张量复用预分配输入/输出张量垃圾回收控制禁用Python GC手动管理关键节点6. 典型健身动作实现方案6.1 标准深蹲检测完整实现包含以下检测维度膝盖与脚尖对齐度下蹲深度背部挺直度动作节奏(2秒下蹲1秒保持1秒起身)def analyze_squat(landmarks): metrics {} # 膝盖前伸检测 left_knee landmarks[mp_pose.PoseLandmark.LEFT_KNEE.value] left_ankle landmarks[mp_pose.PoseLandmark.LEFT_ANKLE.value] metrics[knee_over_toe] left_knee.x - left_ankle.x # 脊柱曲度 shoulder_mid (landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value] landmarks[mp_pose.PoseLandmark.RIGHT_SHOULDER.value])/2 hip_mid (landmarks[mp_pose.PoseLandmark.LEFT_HIP.value] landmarks[mp_pose.PoseLandmark.RIGHT_HIP.value])/2 metrics[back_angle] np.degrees(np.arctan2( hip_mid.y - shoulder_mid.y, hip_mid.x - shoulder_mid.x)) return metrics6.2 俯卧撑质量评估关键质量指标检测身体直线度髋部不下塌下降时胸部触地完全推起时肘部伸直避免腰部旋转def analyze_pushup(landmarks): metrics {} # 身体直线度 shoulder landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value] hip landmarks[mp_pose.PoseLandmark.LEFT_HIP.value] ankle landmarks[mp_pose.PoseLandmark.LEFT_ANKLE.value] metrics[body_alignment] np.std([shoulder.y, hip.y, ankle.y]) # 肘部角度 wrist landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value] elbow landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value] v1 np.array([shoulder.x - elbow.x, shoulder.y - elbow.y]) v2 np.array([wrist.x - elbow.x, wrist.y - elbow.y]) metrics[elbow_angle] np.degrees(np.arccos( np.dot(v1, v2)/(np.linalg.norm(v1)*np.linalg.norm(v2)))) return metrics7. 进阶应用个性化健身指导系统基础动作检测之上可扩展为完整指导系统7.1 用户校准模块def perform_calibration(pose_tracker, duration10): print(请保持标准站立姿势10秒...) start_time time.time() samples [] while time.time() - start_time duration: ret, frame cap.read() results pose_tracker.process(frame) if results.pose_landmarks: samples.append(results.pose_landmarks) # 计算各关节基准位置 baseline {} for landmark in mp_pose.PoseLandmark: idx landmark.value x np.mean([lm.landmark[idx].x for lm in samples]) y np.mean([lm.landmark[idx].y for lm in samples]) baseline[landmark] (x, y) return baseline7.2 训练计划适配基于用户表现动态调整训练参数class AdaptiveWorkout: def __init__(self): self.difficulty 1.0 # 1.0-3.0 self.rest_time 60 # 秒 def update_difficulty(self, last_set_performance): success_rate last_set_performance[completed] / last_set_performance[target] if success_rate 0.9: self.difficulty min(3.0, self.difficulty 0.1) self.rest_time max(30, self.rest_time - 5) elif success_rate 0.7: self.difficulty max(1.0, self.difficulty - 0.1) self.rest_time min(90, self.rest_time 10)7.3 数据持久化与分析使用SQLite存储训练日志import sqlite3 from datetime import datetime def init_database(): conn sqlite3.connect(fitness.db) c conn.cursor() c.execute(CREATE TABLE IF NOT EXISTS workouts (date TEXT, exercise TEXT, count INT, avg_quality REAL, difficulty REAL)) conn.commit() return conn def log_workout(conn, exercise, count, quality, difficulty): c conn.cursor() c.execute(INSERT INTO workouts VALUES (?,?,?,?,?), (datetime.now().isoformat(), exercise, count, quality, difficulty)) conn.commit()在实际部署中发现将视觉反馈延迟控制在150ms以内对用户体验至关重要。这需要平衡图像分辨率和模型复杂度通常720p输入配合标准模型能在大多数现代笔记本上达到该要求。对于动作计数逻辑引入50ms的去抖动窗口能有效防止重复计数。

相关文章:

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

从零构建健身动作分析系统:基于BlazePose的实时姿态追踪实战指南 在居家健身和数字化运动监测日益普及的今天,计算机视觉技术为个人健身提供了全新的可能性。想象一下,当你对着摄像头完成一组深蹲时,系统能实时指出"膝盖内扣…...

如何三步搞定macOS安装包下载:Download Full Installer终极指南

如何三步搞定macOS安装包下载:Download Full Installer终极指南 【免费下载链接】DownloadFullInstaller macOS application written in SwiftUI that downloads installer pkgs for the Install macOS Big Sur application. 项目地址: https://gitcode.com/gh_mi…...

C++ vs .NET 数组原地反转实测:小数组 C++ 碾压,大数组 .NET 反杀?级

前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知,本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台,有非常多的配置参数。详细的参数列表可以…...

新概念英语第一册131_Do not be so sure

Lesson 131: Don’t be so sure! 别那么肯定 Watch the story and answer the question What’s the problem about deciding on a holiday? Who’s going to look after everything.Key words and expressions Egypt 埃及worry 担心 worry about sth. abroad…...

AI 首次实现电影级多镜头长视频生成!快手港中文开源ShotStream,可实现单NVIDIA GPU上可达16 FPS 互式故事讲述和高效即时帧生成。

在 AI 视频生成领域,我们长期被困在“单镜头”的牢笼里:生成的视频往往只有几秒到十几秒,且缺乏场景切换和叙事逻辑。想要生成一个有起承转合、有多角度运镜的完整故事片段,通常需要生成几十个独立视频再手动剪辑,不仅…...

突破60帧限制:EldenRingFPSUnlockAndMore让你的《艾尔登法环》焕然新生

突破60帧限制:EldenRingFPSUnlockAndMore让你的《艾尔登法环》焕然新生 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/g…...

Ostrakon-VL-8B实战:利用LSTM时序模型增强视频片段内容理解

Ostrakon-VL-8B实战:利用LSTM时序模型增强视频片段内容理解 你有没有遇到过这样的场景?面对一段几分钟的监控录像,需要快速知道里面发生了什么;或者刷到一个短视频,想让它自动生成一段文字描述。单纯靠人眼去看、人脑…...

WarcraftHelper终极指南:5分钟让魔兽争霸3完美适配现代电脑

WarcraftHelper终极指南:5分钟让魔兽争霸3完美适配现代电脑 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代系统上的…...

Folcolor:告别视觉疲劳!14种色彩让你的Windows文件夹管理效率提升3倍

Folcolor:告别视觉疲劳!14种色彩让你的Windows文件夹管理效率提升3倍 【免费下载链接】Folcolor Windows explorer folder coloring utility 项目地址: https://gitcode.com/gh_mirrors/fo/Folcolor 你是否曾在成百上千个黄色文件夹中迷失方向&am…...

终极ECAPA-TDNN说话人识别系统:从零到工业级部署的完整指南

终极ECAPA-TDNN说话人识别系统:从零到工业级部署的完整指南 【免费下载链接】ECAPA-TDNN Unofficial reimplementation of ECAPA-TDNN for speaker recognition (EER0.86 for Vox1_O when train only in Vox2) 项目地址: https://gitcode.com/gh_mirrors/ec/ECAPA…...

labview解析can报文,DBC解析Can报文,支持asc、csv、txt格式文件离线解析...

labview解析can报文,DBC解析Can报文,支持asc、csv、txt格式文件离线解析,可通过设置移位,逗号数,空格数等特征索引ID和报文数据,解析报文,可将解析结果存储为本地txt文本,可设置循环…...

Loop:3个简单步骤彻底告别macOS窗口管理混乱的终极解决方案

Loop:3个简单步骤彻底告别macOS窗口管理混乱的终极解决方案 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否曾在多任务处理时被杂乱的窗口拖慢了工作效率?作为一名每天需要…...

【Windows10实战】PyTorch版DeepLabV3+:从零构建自定义数据集训练全流程

1. 环境准备与工具安装 在Windows10系统上搭建PyTorch开发环境其实比想象中简单。我推荐使用PyCharm作为IDE,它的项目管理功能对深度学习项目特别友好。首先需要安装Python3.7或更高版本(实测3.8也能完美兼容),建议通过Anaconda来…...

从零到一:用prompt_toolkit打造你的专属交互式CLI

1. 为什么你需要prompt_toolkit? 如果你经常和命令行打交道,肯定遇到过这样的场景:输入命令时总得反复敲相同的指令,想给常用命令加个自动补全却无从下手,或者看着单调的黑白终端界面感到审美疲劳。这时候就该prompt_t…...

33种语言自由翻译:Hunyuan-MT 7B镜像部署与使用全指南

33种语言自由翻译:Hunyuan-MT 7B镜像部署与使用全指南 1. 为什么选择本地化翻译工具 1.1 在线翻译服务的局限性 在全球化协作日益频繁的今天,我们经常面临多语言沟通的挑战。传统在线翻译工具虽然方便,但存在几个关键问题: 隐…...

CSS如何制作卡片翻开呈现另一面的翻牌动画

最小可行结构需父容器设 perspective,卡片容器设 transform-style: preserve-3d,前后两面均设 backface-visibility: hidden 且初始 rotateY 分别为 0deg 和 180deg。用 transform: rotateY() 实现卡片翻转的最小可行结构翻牌动画本质是让前后两个面共享…...

Linux环境下TensorRT安装与配置全攻略

1. 环境准备与版本检查 在Linux系统上部署TensorRT之前,最关键的是确保基础环境兼容性。我遇到过不少开发者直接跳过版本检查导致后续各种报错,这里分享几个实用命令和避坑经验。 首先用nvidia-smi查看显卡驱动支持的CUDA最高版本。注意这里显示的是驱动…...

如何为企业级AI应用构建高效数据管道:实战解决方案提升80%内容处理效率

如何为企业级AI应用构建高效数据管道:实战解决方案提升80%内容处理效率 【免费下载链接】reader Convert any URL to an LLM-friendly input with a simple prefix https://r.jina.ai/ 项目地址: https://gitcode.com/GitHub_Trending/rea/reader Jina Reade…...

传统物流专员效率瓶颈明显,AI物流调度师正在替代

路线规划、车辆调度、在途跟踪、异常处理……传统物流专员的大量工作时间被这些重复性、高耗时的事务占据。随着运力成本上升和时效要求提高,人工调度的效率瓶颈日益突出:经验依赖强、响应速度慢、难以同时处理多变量优化。与此同时,“AI物流…...

CSS如何优化CSS加载性能_通过代码分割与压缩减少体积

关键不是压缩CSS体积,而是让浏览器尽快获取首屏所需CSS;需用media属性条件加载、动态导入非首屏样式、避免import、合理分割CSS、删除冗余选择器、谨慎内联并控制体积在2KB内。怎么让CSS不阻塞页面渲染关键不是“压缩体积”,而是让浏览器尽快…...

三分钟解决内存焦虑:Mem Reduct实时内存管理工具深度解析

三分钟解决内存焦虑:Mem Reduct实时内存管理工具深度解析 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...

字节跳动(ByteDance)2026 OA 面经|高频题型拆解 + 速通攻略

最近刚刷完字节跳动(ByteDance / TikTok)2026 OA,一句话总结:题量稳定、难度中等偏上,但时间压力大 变体题多。字节 OA 通常在 CodeSignal 或 HackerRank 平台,标准配置是 3-4 题,70-120 分钟&…...

SGLang测试策略深度解析:构建企业级LLM应用的终极质量保障体系

SGLang测试策略深度解析:构建企业级LLM应用的终极质量保障体系 【免费下载链接】sglang SGLang is a high-performance serving framework for large language models and multimodal models. 项目地址: https://gitcode.com/GitHub_Trending/sg/sglang 在大…...

OpCore Simplify终极指南:5步轻松搞定Hackintosh配置,新手也能快速上手

OpCore Simplify终极指南:5步轻松搞定Hackintosh配置,新手也能快速上手 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为…...

PostgreSQL之Timescale-超表实战:从创建到优化的全流程指南

1. TimescaleDB超表入门:从零开始认识时序数据利器 第一次接触TimescaleDB时,我被它处理时间序列数据的能力惊艳到了。作为PostgreSQL的扩展,TimescaleDB最大的亮点就是**超表(Hypertable)**这个概念。简单来说,超表就像是一个智能…...

别让PCB变成‘电磁炸弹’:从布局到布线,一份给硬件工程师的EMI实战避坑清单

别让PCB变成‘电磁炸弹’:从布局到布线,一份给硬件工程师的EMI实战避坑清单 刚入行的硬件工程师小张最近遇到了一个棘手问题——他设计的工控主板在测试时频繁触发EMC检测设备的报警。更糟的是,产线反馈首批500块板子中有30%出现无线模块通信…...

Helpy Docker容器化部署最佳实践:快速稳定的生产环境搭建

Helpy Docker容器化部署最佳实践:快速稳定的生产环境搭建 【免费下载链接】helpy Helpy is a modern, open source helpdesk customer support application. Features include knowledgebase, community discussions and support tickets integrated with email. …...

探索AI世界:PaddleHub深度学习框架详解

探索AI世界:PaddleHub深度学习框架详解 【免费下载链接】PaddleFormers PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle. 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers PaddleHub是…...

Nginx-UI:现代化Nginx集群管理平台的技术架构与实践指南

Nginx-UI:现代化Nginx集群管理平台的技术架构与实践指南 【免费下载链接】nginx-ui Yet another WebUI for Nginx 项目地址: https://gitcode.com/gh_mirrors/ngi/nginx-ui 项目定位与技术架构 Nginx-UI是一个基于Go和Vue构建的现代化Nginx管理平台&#xf…...

Kandinsky-5.0-I2V-Lite-5s多场景落地:电商商品动图、社交头像视频、PPT动态封面

Kandinsky-5.0-I2V-Lite-5s多场景落地:电商商品动图、社交头像视频、PPT动态封面 1. 开箱即用的视频创作神器 Kandinsky-5.0-I2V-Lite-5s是一款让静态图片"活起来"的轻量级工具。只需要上传一张图片,加上简单的动作描述,就能在5秒…...