MediaPipe Pose进阶教程:自定义关键点检测

MediaPipe Pose进阶教程:自定义关键点检测

1. 引言:从标准检测到个性化定制

1.1 人体骨骼关键点检测的技术演进

人体姿态估计(Human Pose Estimation)是计算机视觉中的核心任务之一,广泛应用于动作识别、虚拟试衣、运动分析和人机交互等领域。早期方法依赖于复杂的深度学习模型(如OpenPose、AlphaPose),通常需要GPU支持且推理速度较慢。

随着轻量化模型的发展,Google推出的MediaPipe Pose成为边缘设备和CPU环境下的首选方案。它不仅能在毫秒级完成33个关键点的高精度定位,还具备极强的鲁棒性,适用于复杂姿态场景(如瑜伽、舞蹈、健身训练等)。

然而,标准的MediaPipe输出包含全部33个关键点,但在实际项目中,我们往往只关注特定部位——例如仅需检测手部动作用于手势控制,或仅追踪肩、膝关节用于康复评估。这就引出了一个关键需求:如何基于MediaPipe Pose实现自定义关键点检测?

1.2 本文目标与价值

本文将带你从零开始,深入理解MediaPipe Pose的工作机制,并通过代码实践完成以下目标:

  • 理解MediaPipe Pose的关键点索引结构
  • 提取并可视化指定子集的关键点(如上半身/下肢)
  • 自定义连接线逻辑,构建专属骨架图
  • 集成WebUI进行实时图像上传与结果展示

最终你将掌握一套可直接落地的“轻量级+可裁剪”姿态检测方案,适用于资源受限环境下的定制化AI应用开发。


2. 核心原理:MediaPipe Pose的关键点体系解析

2.1 模型架构与输出格式

MediaPipe Pose采用单阶段检测器(Single-stage Detector)结合BlazePose骨干网络,在保证精度的同时极大优化了推理效率。其输出为一组标准化的3D坐标点(x, y, z, visibility),共33个关键点,覆盖面部、躯干、四肢主要关节。

这些关键点按固定顺序排列,每个索引对应特定身体部位。以下是部分关键点映射表(节选):

索引名称区域
0nose面部
1left_eye_inner面部
2left_eye面部
.........
11left_shoulder上肢
12right_shoulder上肢
13left_elbow上肢
14right_elbow上肢
15left_wrist手部
16right_wrist手部
23left_hip下肢
24right_hip下肢
25left_knee下肢
26right_knee下肢
27left_ankle足部
28right_ankle足部

📌提示:完整索引可在 MediaPipe官方文档 查阅。

2.2 关键点连接逻辑分析

默认情况下,MediaPipe使用预定义的POSE_CONNECTIONS来绘制骨架连线。该连接集由17条边组成,例如(11, 13)表示左肩到左肘的连线。

但这一默认配置可能包含你不关心的区域(如面部细节)。因此,要实现“自定义关键点检测”,必须做到两点:

  1. 筛选关键点索引集合
  2. 重构连接关系图

这正是我们接下来要解决的核心问题。


3. 实践应用:构建自定义关键点检测系统

3.1 技术选型与环境准备

本项目基于以下技术栈构建:

  • Python 3.9+
  • MediaPipe 0.10.9+
  • Flask Web框架(用于WebUI)
  • OpenCV-Python(图像处理)
pip install mediapipe opencv-python flask numpy

项目结构如下:

custom_pose/ ├── app.py # Flask主程序 ├── pose_detector.py # 自定义姿态检测类 ├── static/uploads/ # 图片上传目录 └── templates/index.html # 前端页面

3.2 自定义关键点提取与过滤

我们首先封装一个CustomPoseDetector类,支持灵活选择感兴趣的关键点。

# pose_detector.py import cv2 import mediapipe as mp import numpy as np class CustomPoseDetector: def __init__(self, upper_body_only=False, lower_body_only=False): self.mp_drawing = mp.solutions.drawing_utils self.mp_pose = mp.solutions.pose # 初始化MediaPipe Pose模型 self.pose = self.mp_pose.Pose( static_image_mode=True, model_complexity=1, enable_segmentation=False, min_detection_confidence=0.5 ) # 定义感兴趣的区域 if upper_body_only: self.landmark_indices = list(range(11, 17)) + [23, 24] # 肩、肘、腕、髋 self.connection_pairs = [ (11, 13), (13, 15), # 左臂 (12, 14), (14, 16), # 右臂 (11, 23), (12, 24), # 肩至髋 (23, 24) # 髋部连接 ] elif lower_body_only: self.landmark_indices = list(range(23, 29)) # 左右髋、膝、踝 self.connection_pairs = [ (23, 25), (25, 27), # 左腿 (24, 26), (26, 28) # 右腿 ] else: # 默认全身体 self.landmark_indices = list(range(33)) self.connection_pairs = self.mp_pose.POSE_CONNECTIONS def detect(self, image_path): image = cv2.imread(image_path) rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = self.pose.process(rgb_image) if not results.pose_landmarks: return None, "未检测到人体" h, w, _ = image.shape keypoints = [] # 提取指定关键点坐标 for idx in self.landmark_indices: lm = results.pose_landmarks.landmark[idx] cx, cy = int(lm.x * w), int(lm.y * h) keypoints.append((cx, cy, lm.visibility)) # 绘制骨架 annotated_image = image.copy() for pt in keypoints: cv2.circle(annotated_image, (pt[0], pt[1]), 5, (0, 0, 255), -1) # 红点 for conn in self.connection_pairs: if conn[0] in self.landmark_indices and conn[1] in self.landmark_indices: start_idx = self.landmark_indices.index(conn[0]) end_idx = self.landmark_indices.index(conn[1]) cv2.line(annotated_image, keypoints[start_idx][:2], keypoints[end_idx][:2], (255, 255, 255), 2) # 白线 return annotated_image, f"成功检测 {len(keypoints)} 个关键点"

📌代码说明: - 支持三种模式:全身、上半身、下半身 -landmark_indices控制保留哪些关键点 -connection_pairs定义新的连接逻辑 - 使用OpenCV手动绘制红点与白线,替代默认绘图函数


3.3 WebUI集成与交互设计

使用Flask搭建简易Web界面,支持图片上传与结果显示。

# app.py from flask import Flask, request, render_template, send_from_directory import os from pose_detector import CustomPoseDetector app = Flask(__name__) UPLOAD_FOLDER = 'static/uploads' os.makedirs(UPLOAD_FOLDER, exist_ok=True) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': file = request.files['image'] mode = request.form.get('mode', 'full') if file: input_path = os.path.join(UPLOAD_FOLDER, 'input.jpg') output_path = os.path.join(UPLOAD_FOLDER, 'output.jpg') file.save(input_path) # 初始化检测器 detector = CustomPoseDetector( upper_body_only=(mode == 'upper'), lower_body_only=(mode == 'lower') ) result_img, msg = detector.detect(input_path) if result_img is not None: cv2.imwrite(output_path, result_img) return render_template('index.html', message=msg, input_img='uploads/input.jpg', output_img='uploads/output.jpg') else: return render_template('index.html', message=msg) return render_template('index.html') @app.route('/static/<path:filename>') def static_files(filename): return send_from_directory('static', filename) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)

前端HTML模板(简化版):

<!-- templates/index.html --> <h1>🤸‍♂️ 自定义人体骨骼检测</h1> <form method="post" enctype="multipart/form-data"> <input type="file" name="image" required /> <select name="mode"> <option value="full">全身模式</option> <option value="upper">上半身模式</option> <option value="lower">下半身模式</option> </select> <button type="submit">分析姿态</button> </form> {% if message %} <p><strong>{{ message }}</strong></p> <img src="{{ url_for('static', filename=input_img) }}" width="400" /> <img src="{{ url_for('static', filename=output_img) }}" width="400" /> {% endif %}

3.4 实际运行效果与优化建议

运行步骤
  1. 启动服务:python app.py
  2. 浏览器访问http://localhost:5000
  3. 上传一张人物照片
  4. 选择检测模式(如“上半身”)
  5. 查看生成的骨骼图
输出示例
  • 输入图像:一名做俯卧撑的人
  • 选择“上半身模式”
  • 输出图像显示:仅肩、肘、腕、髋四个部位被标记为红点,并用白线连接形成上肢骨架
性能优化建议
优化方向措施说明
减少冗余计算若仅需关键点坐标,可关闭enable_segmentationsmooth_landmarks
提升响应速度对视频流使用static_image_mode=False以启用轨迹平滑
降低内存占用使用model_complexity=0切换至轻量模型(LITE版本)
增强鲁棒性添加置信度过滤:忽略visibility < 0.5的关键点

4. 总结

4.1 核心收获回顾

本文围绕“MediaPipe Pose自定义关键点检测”展开,完成了从理论到实践的完整闭环:

  • 解析了MediaPipe Pose的33个关键点索引体系
  • 构建了一个可配置的CustomPoseDetector类,支持按需提取关键点
  • 实现了自定义连接逻辑,摆脱默认骨架图限制
  • 集成Flask WebUI,提供直观的交互体验

这套方案特别适合以下场景:

  • 康复训练监测(仅关注膝、踝关节)
  • 手势交互系统(聚焦手部与肩部)
  • 健身动作评分(提取核心发力部位)

4.2 最佳实践建议

  1. 明确业务需求再裁剪关键点:避免过度简化导致信息丢失
  2. 建立关键点命名映射表:便于团队协作与后期维护
  3. 添加异常处理机制:如遮挡、多人场景下的关键点歧义
  4. 考虑扩展为API服务:通过REST接口供其他系统调用

通过本次实践,你已具备将MediaPipe Pose从“通用工具”转化为“专用系统”的能力,真正实现“按需而动”的智能视觉解决方案。


💡获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1151747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Multisim汉化全过程记录:从提取到集成完整示例

Multisim汉化实战全记录&#xff1a;从资源提取到中文界面完美呈现 你有没有在打开Multisim时&#xff0c;面对满屏英文菜单感到头大&#xff1f; “File”、“Simulate”、“Place Component”……这些基础操作尚可应付&#xff0c;但一旦遇到报错提示或高级设置项&#xff0…

MediaPipe Pose一键部署:平台HTTP按钮使用详细指南

MediaPipe Pose一键部署&#xff1a;平台HTTP按钮使用详细指南 1. 引言 1.1 AI 人体骨骼关键点检测的现实需求 在智能健身、动作捕捉、虚拟试衣和人机交互等前沿应用中&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;已成为一项核心技术。它通过分析…

企业级翻译解决方案:HY-MT1.5-1.8B Docker部署避坑指南

企业级翻译解决方案&#xff1a;HY-MT1.5-1.8B Docker部署避坑指南 1. 引言 在全球化业务快速扩展的背景下&#xff0c;企业对高质量、低延迟、可私有化部署的机器翻译系统需求日益迫切。腾讯混元团队推出的 HY-MT1.5-1.8B 翻译模型&#xff0c;作为一款参数量为18亿的轻量级…

MediaPipe Pose案例解析:智能健身教练系统

MediaPipe Pose案例解析&#xff1a;智能健身教练系统 1. 引言&#xff1a;AI 人体骨骼关键点检测的现实价值 在智能健身、远程康复训练和虚拟运动指导等场景中&#xff0c;实时准确的人体姿态识别是核心技术支撑。传统方法依赖可穿戴设备或复杂传感器阵列&#xff0c;成本高…

新手必看:AD画PCB入门级布局布线手把手教程

从零开始学AD画PCB&#xff1a;布局布线实战全攻略 你是不是也经历过这样的时刻&#xff1f; 辛辛苦苦画完原理图&#xff0c;信心满满地导入PCB&#xff0c;结果满屏元件像“炸开的烟花”一样堆在角落&#xff1b;想走根线&#xff0c;不是报错就是绕得七拐八弯&#xff1b;最…

正式裁员64796人,赔偿N+4!

前段时间某大厂公布了近年员工人数变化数据&#xff0c;集团员工共减少 24940 人。其中 2025 年 Q4 减少 3671 人。2022 年至 2025 年减少 64796 人。64796这个数字背后&#xff0c;是近6.5万个曾经和我们一样的同行&#xff0c;抱着纸箱走出曾引以为豪的园区。2024年Q4减少的3…

AI人体姿态估计实战案例:舞蹈动作分析系统快速上线

AI人体姿态估计实战案例&#xff1a;舞蹈动作分析系统快速上线 1. 引言&#xff1a;AI驱动的舞蹈动作分析新范式 随着人工智能在计算机视觉领域的深入发展&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;已成为智能健身、虚拟试衣、运动康复和舞蹈教…

AI骨骼检测低成本落地:适合创业团队的部署实战推荐

AI骨骼检测低成本落地&#xff1a;适合创业团队的部署实战推荐 1. 引言&#xff1a;AI人体骨骼关键点检测的现实挑战 在智能健身、虚拟试衣、动作捕捉与康复训练等创新场景中&#xff0c;人体骨骼关键点检测正成为核心技术支撑。传统方案往往依赖昂贵的GPU服务器或第三方API服…

AI人体姿态估计WebUI搭建:33个关键点检测指南

AI人体姿态估计WebUI搭建&#xff1a;33个关键点检测指南 1. 引言&#xff1a;AI 人体骨骼关键点检测的现实价值 随着人工智能在计算机视觉领域的深入发展&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;已成为智能健身、动作捕捉、虚拟试衣、人机交…

从图片到统计报告:YOLOv8智能分析保姆级教程

从图片到统计报告&#xff1a;YOLOv8智能分析保姆级教程 1. 教程目标与适用场景 在工业检测、安防监控、交通管理等实际应用中&#xff0c;快速识别图像中的物体并生成结构化统计报告是一项高频需求。传统的开发流程需要搭建环境、训练模型、部署服务&#xff0c;耗时长且门槛…

超详细版ES6语法入门:展开运算符使用场景

从零搞懂 ES6 展开运算符&#xff1a;不只是...那么简单你有没有写过这样的代码&#xff1f;const result Array.prototype.slice.call(arguments);或者为了合并两个数组&#xff0c;翻出文档查concat的用法&#xff1f;又或者在 React 组件里为了一键透传所有 props&#xff…

AI人体骨骼检测二次开发:自定义关节点连接逻辑修改

AI人体骨骼检测二次开发&#xff1a;自定义关节点连接逻辑修改 1. 背景与需求分析 随着AI在运动分析、虚拟试衣、康复训练等领域的广泛应用&#xff0c;人体骨骼关键点检测已成为计算机视觉中的核心技术之一。Google的MediaPipe Pose模型凭借其高精度、低延迟和轻量化特性&am…

MediaPipe Pose保姆级教程:从零开始搭建人体骨骼检测系统

MediaPipe Pose保姆级教程&#xff1a;从零开始搭建人体骨骼检测系统 1. 引言 1.1 AI 人体骨骼关键点检测的现实需求 在智能健身、动作捕捉、虚拟试衣和人机交互等前沿领域&#xff0c;人体骨骼关键点检测&#xff08;Human Pose Estimation&#xff09;正成为核心技术支撑。…

AI人体骨骼检测部署教程:告别ModelScope,零报错本地运行

AI人体骨骼检测部署教程&#xff1a;告别ModelScope&#xff0c;零报错本地运行 1. 引言 1.1 学习目标 本文将带你从零开始&#xff0c;完整部署一个基于 Google MediaPipe Pose 的高精度 AI 人体骨骼关键点检测系统。你将学会如何在本地环境中快速搭建 WebUI 服务&#xff…

YOLOv8功能全测评:工业级目标检测真实表现

YOLOv8功能全测评&#xff1a;工业级目标检测真实表现 1. 引言&#xff1a;工业场景下的目标检测新标杆 在智能制造、智能安防、无人巡检等工业级应用中&#xff0c;实时性、稳定性与高召回率是目标检测系统的核心诉求。传统模型往往在速度与精度之间难以兼顾&#xff0c;而 …

ES6模块化项目应用:构建可维护的代码架构

用 ES6 模块化打造现代前端架构&#xff1a;从零构建可维护、可扩展的代码体系你有没有遇到过这样的场景&#xff1f;项目越做越大&#xff0c;main.js文件已经膨胀到几千行&#xff0c;函数之间牵一发而动全身&#xff1b;新同事接手时一脸茫然&#xff1a;“这个utils.js到底…

YOLOv8功能全测评:工业场景下的物体识别真实表现

YOLOv8功能全测评&#xff1a;工业场景下的物体识别真实表现 在智能制造、智慧安防、自动化巡检等工业场景中&#xff0c;目标检测技术正扮演着“视觉中枢”的关键角色。而YOLOv8作为Ultralytics推出的最新一代实时检测模型&#xff0c;凭借其高精度、低延迟、易部署的特性&am…

AI骨骼检测模型选型指南:MediaPipe为何适合生产环境?

AI骨骼检测模型选型指南&#xff1a;MediaPipe为何适合生产环境&#xff1f; 1. 引言&#xff1a;AI人体骨骼关键点检测的现实挑战 在智能健身、动作捕捉、虚拟试衣、人机交互等前沿应用中&#xff0c;人体骨骼关键点检测&#xff08;Human Pose Estimation&#xff09;已成为…

人体姿态估计部署指南:MediaPipe Pose的环境配置

人体姿态估计部署指南&#xff1a;MediaPipe Pose的环境配置 1. 引言 1.1 AI 人体骨骼关键点检测的工程价值 在智能健身、动作捕捉、虚拟试衣和人机交互等前沿应用中&#xff0c;人体姿态估计&#xff08;Human Pose Estimation&#xff09;已成为不可或缺的核心技术。其目标…

利用pjsip构建软电话(Softphone):零基础实战教程

从零开始用 pjsip 打造一个能打电话的软电话&#xff1a;实战全记录你有没有想过&#xff0c;自己动手写一个可以拨打电话的“软电话”&#xff1f;不是模拟器&#xff0c;不是调用系统 API&#xff0c;而是真正通过 SIP 协议注册到服务器、拨打号码、听到对方声音的那种。听起…