2026/4/3 22:33:12
网站建设
项目流程
asp网站缺点,怎样建立一个微信公众号,网站建设优化的经营范围,室内设计入门教程MediaPipe Pose实战教程#xff1a;构建智能健身APP
1. 引言
1.1 学习目标
在本教程中#xff0c;你将学会如何基于 Google MediaPipe Pose 模型#xff0c;从零开始搭建一个可用于智能健身场景的 AI 骨骼关键点检测系统。完成本教程后#xff0c;你将掌握#xff1a; …MediaPipe Pose实战教程构建智能健身APP1. 引言1.1 学习目标在本教程中你将学会如何基于Google MediaPipe Pose模型从零开始搭建一个可用于智能健身场景的 AI 骨骼关键点检测系统。完成本教程后你将掌握如何部署并运行本地化的 MediaPipe 姿态估计服务实现人体 33 个关键点的实时检测与可视化构建 WebUI 界面实现图像上传与结果展示将该能力集成到智能健身 APP 中的核心思路最终你可以将此模块扩展为动作标准度评分、运动轨迹分析、姿态纠正提醒等实用功能。1.2 前置知识建议具备以下基础 - Python 编程基础熟悉函数、类、文件操作 - Flask 或 FastAPI 等轻量 Web 框架使用经验非必须但有助于理解 - 对计算机视觉和人体姿态估计有基本了解1.3 教程价值不同于依赖云端 API 或复杂深度学习训练流程的方案本文提供的方法 -完全本地化运行无网络延迟与隐私泄露风险 -环境极简仅需安装mediapipe和flask即可启动 -毫秒级响应适合嵌入移动或边缘设备 -可二次开发性强便于接入摄像头、动作识别逻辑等2. 环境准备与项目结构2.1 安装依赖库确保已安装 Python 3.8然后执行以下命令pip install mediapipe flask numpy opencv-python pillow⚠️ 注意MediaPipe 官方已对 CPU 推理进行了高度优化无需 GPU 即可流畅运行。2.2 项目目录结构创建如下文件夹结构smart_fitness_app/ ├── app.py # Web服务主程序 ├── static/ │ └── uploads/ # 用户上传图片存储路径 ├── templates/ │ └── index.html # 图像上传与结果显示页面 └── pose_detector.py # 核心姿态检测模块3. 核心功能实现3.1 关键点检测模块开发我们封装一个独立的姿态检测类便于复用。pose_detector.pyimport cv2 import mediapipe as mp from PIL import Image import numpy as np class PoseDetector: def __init__(self, static_image_modeTrue, min_detection_confidence0.5): self.mp_drawing mp.solutions.drawing_utils self.mp_pose mp.solutions.pose self.pose self.mp_pose.Pose( static_image_modestatic_image_mode, model_complexity1, # 轻量与精度平衡 smooth_landmarksTrue, enable_segmentationFalse, min_detection_confidencemin_detection_confidence ) def detect(self, image_path): 输入图像路径返回带骨架图的RGB数组 image cv2.imread(image_path) image_rgb cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results self.pose.process(image_rgb) if not results.pose_landmarks: return None, 未检测到人体 # 绘制骨架连接线 annotated_image image_rgb.copy() self.mp_drawing.draw_landmarks( annotated_image, results.pose_landmarks, self.mp_pose.POSE_CONNECTIONS, landmark_drawing_specself.mp_drawing.DrawingSpec(color(255, 0, 0), thickness2, circle_radius2), connection_drawing_specself.mp_drawing.DrawingSpec(color(255, 255, 255), thickness2) ) # 转回BGR用于保存 annotated_image_bgr cv2.cvtColor(annotated_image, cv2.COLOR_RGB2BGR) return annotated_image_bgr, results.pose_landmarks.landmark代码解析 - 使用mediapipe.solutions.pose初始化姿态模型 -model_complexity1在速度与精度间取得良好平衡 -draw_landmarks自动绘制红点关节与白线骨骼符合需求描述 - 返回原始 OpenCV 图像和 33 个关键点坐标列表可用于后续动作分析3.2 Web服务接口搭建app.pyfrom flask import Flask, request, render_template, send_from_directory import os from pose_detector import PoseDetector import cv2 app Flask(__name__) UPLOAD_FOLDER static/uploads os.makedirs(UPLOAD_FOLDER, exist_okTrue) detector PoseDetector() app.route(/, methods[GET, POST]) def index(): if request.method POST: file request.files.get(image) if not file: return 请上传图片 input_path os.path.join(UPLOAD_FOLDER, input.jpg) output_path os.path.join(UPLOAD_FOLDER, output.jpg) file.save(input_path) # 执行姿态检测 result_img, landmarks detector.detect(input_path) if result_img is None: return f检测失败: {landmarks} cv2.imwrite(output_path, result_img) return render_template(index.html, input_imageuploads/input.jpg?ts str(hash(file.filename)), output_imageuploads/output.jpg) return render_template(index.html) app.route(/static/path:filename) def serve_static(filename): return send_from_directory(static, filename) if __name__ __main__: app.run(host0.0.0.0, port5000, debugFalse)核心逻辑说明 - 接收用户上传的图片并保存至static/uploads- 调用PoseDetector.detect()进行处理 - 将结果图像写入同目录下的output.jpg- 渲染 HTML 页面展示原图与骨骼图对比3.3 前端界面设计templates/index.html!DOCTYPE html html head titleAI 智能健身姿态检测/title style body { font-family: Arial; text-align: center; margin: 40px; } .image-row img { max-width: 45%; height: auto; margin: 10px; border: 1px solid #ddd; } .upload-btn { padding: 10px 20px; font-size: 16px; margin: 20px; } /style /head body h1♂️ AI 人体骨骼关键点检测 - MediaPipe Pose/h1 p上传一张全身照查看系统自动绘制的骨骼关键点红点与连接线白线/p form methodpost enctypemultipart/form-data input typefile nameimage acceptimage/* required / button typesubmit classupload-btn上传并分析/button /form {% if input_image and output_image %} div classimage-row div h3原始图像/h3 img src{{ url_for(static, filenameinput_image) }} / /div div h3骨骼可视化结果/h3 img src{{ url_for(static, filenameoutput_image) }} / /div /div {% endif %} /body /html前端特点 - 简洁直观支持拖拽上传 - 左右分栏对比显示原图与结果图 - 使用时间戳防止缓存问题4. 启动与测试4.1 启动服务进入项目根目录运行python app.py控制台输出* Running on http://0.0.0.0:5000点击平台提供的 HTTP 访问链接即可打开 Web 页面。4.2 测试示例上传一张包含站立、深蹲或瑜伽动作的人体照片系统将在几秒内返回结果✅ 正确识别出头部、肩部、手肘、手腕、髋部、膝盖、脚踝等 33 个关键点✅ 所有关节以红点高亮标注✅ 骨骼通过白线连接形成“火柴人”骨架图✅ 支持多种角度与光照条件下的稳定检测5. 实际应用拓展构建智能健身助手5.1 动作标准化评分原理利用检测出的 33 个关键点坐标可以进一步实现角度计算如膝关节弯曲角判断深蹲是否到位距离比值如双手间距是否符合俯卧撑标准轨迹追踪连续帧中某关节运动路径是否平滑合规示例判断深蹲动作质量def calculate_angle(a, b, c): 计算三点形成的角度a-b-c ba np.array([a.x - b.x, a.y - b.y]) bc np.array([c.x - b.x, c.y - b.y]) cosine_angle np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc)) angle np.arccos(cosine_angle) return np.degrees(angle) # 获取左腿三个关键点 left_hip landmarks[mp_pose.PoseLandmark.LEFT_HIP.value] left_knee landmarks[mp_pose.PoseLandmark.LEFT_KNEE.value] left_ankle landmarks[mp_pose.PoseLandmark.LEFT_ANKLE.value] angle calculate_angle(left_hip, left_knee, left_ankle) if angle 90: feedback 深蹲到位 else: feedback 还需下蹲更深5.2 可扩展功能清单功能技术实现方式实时摄像头检测替换cv2.imread为cv2.VideoCapture(0)多人姿态识别设置pose_detector mp_pose.Pose(..., static_image_modeFalse)动作序列识别结合 LSTM 或 Transformer 对关键点序列建模数据导出将关键点坐标保存为 CSV 或 JSON 文件供分析6. 总结6.1 核心收获回顾通过本教程我们成功实现了✅ 基于MediaPipe Pose的高精度人体骨骼关键点检测✅ 构建了完整的本地化 Web 应用支持图像上传与可视化反馈✅ 掌握了从模型调用、Web 接口开发到前端展示的全流程✅ 为智能健身 APP 提供了可落地的技术原型该项目具备轻量、快速、稳定、可扩展四大优势特别适合部署在边缘设备或作为移动端 AI 功能模块。6.2 下一步学习建议学习 MediaPipe Hands / Face Mesh 模块实现手势控制或表情识别尝试将模型转换为 TFLite 格式部署到 Android/iOS 设备结合 OpenCV 实现视频流实时处理使用 PyTorch/TensorFlow 构建自定义动作分类器获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。