Python 肢体动作追踪项目(基于 MediaPipe + OpenCV)

Python 肢体动作追踪项目(基于MediaPipe + OpenCV)

本文简单介绍一个可直接运行的Python肢体动作追踪项目,核心将采用MediaPipe Pose(谷歌开源的高精度姿态估计工具)结合OpenCV(图像/视频处理库)实现,该方案无需训练自定义模型,开箱即用,适合快速落地肢体追踪需求。

一、项目前置准备

1. 安装必要依赖库

打开终端/命令提示符,执行以下安装命令:

# 安装OpenCV(用于视频捕获、图像渲染)pipinstallopencv-python# 安装MediaPipe(核心肢体姿态检测引擎)pipinstallmediapipe

2. 依赖说明

  • opencv-python:负责调用摄像头、读取视频文件、绘制追踪结果和显示窗口。
  • mediapipe:内置预训练的Pose模型,可检测人体33个关键骨骼点(如头部、肩膀、手肘、膝盖等),支持实时追踪。

二、完整项目源码

importcv2importmediapipeasmp# ---------------------- 初始化配置 ----------------------# 1. 初始化MediaPipe Pose相关组件mp_pose=mp.solutions.pose# 创建Pose检测对象(设置静态图像检测/置信度阈值)# static_image_mode=False:适合视频/实时流(更高效)# min_detection_confidence:最小检测置信度(0-1,越高越严格)# min_tracking_confidence:最小追踪置信度(0-1,越高越稳定)pose=mp_pose.Pose(static_image_mode=False,model_complexity=1,# 模型复杂度(0/1/2,越高精度越高、速度越慢)min_detection_confidence=0.5,min_tracking_confidence=0.5)# 2. 初始化MediaPipe绘图工具(用于绘制骨骼点和连接线)mp_drawing=mp.solutions.drawing_utils# 定义骨骼点和连接线的绘制样式(可选,默认样式也可满足需求)drawing_spec_landmark=mp_drawing.DrawingSpec(color=(0,255,0),# 骨骼点颜色:绿色thickness=5,# 骨骼点大小circle_radius=3)drawing_spec_connection=mp_drawing.DrawingSpec(color=(255,0,0),# 连接线颜色:蓝色thickness=3,# 连接线粗细circle_radius=2)# ---------------------- 核心追踪逻辑 ----------------------defbody_pose_tracking():# 1. 打开摄像头(参数0:默认内置摄像头,若外接摄像头可改为1/2等)cap=cv2.VideoCapture(0)# 设置摄像头分辨率(可选,根据硬件调整)cap.set(cv2.CAP_PROP_FRAME_WIDTH,1280)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,720)ifnotcap.isOpened():print("错误:无法打开摄像头!")return# 2. 循环读取视频帧并进行姿态追踪whilecap.isOpened():# 读取一帧图像ret,frame=cap.read()ifnotret:print("警告:无法读取摄像头帧,退出循环!")break# ---------------------- 关键处理步骤 ----------------------# a. 图像格式转换:OpenCV读取的是BGR格式,MediaPipe需要RGB格式frame_rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)# b. 禁用图像写入(提升处理速度)frame_rgb.flags.writeable=False# c. 传入Pose模型进行姿态检测results=pose.process(frame_rgb)# d. 重新启用图像写入(用于绘制结果)frame_rgb.flags.writeable=True# e. 格式转换回BGR(用于OpenCV显示)frame_bgr=cv2.cvtColor(frame_rgb,cv2.COLOR_RGB2BGR)# 3. 绘制肢体追踪结果(骨骼点+连接线)ifresults.pose_landmarks:# 绘制33个骨骼点和对应的连接线mp_drawing.draw_landmarks(image=frame_bgr,landmark_list=results.pose_landmarks,connections=mp_pose.POSE_CONNECTIONS,landmark_drawing_spec=drawing_spec_landmark,connection_drawing_spec=drawing_spec_connection)# (可选)获取某个骨骼点的坐标(示例:获取鼻子的坐标)nose_landmark=results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE]# 转换为像素坐标(frame_bgr.shape[1]:宽度,frame_bgr.shape[0]:高度)nose_x=int(nose_landmark.x*frame_bgr.shape[1])nose_y=int(nose_landmark.y*frame_bgr.shape[0])# 在图像上标注鼻子坐标cv2.putText(frame_bgr,f"Nose: ({nose_x},{nose_y})",(nose_x+10,nose_y),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,255),1,cv2.LINE_AA)# 4. 显示追踪窗口cv2.imshow("Body Pose Tracking (Press 'q' to quit)",frame_bgr)# 5. 退出条件:按下'q'键关闭窗口ifcv2.waitKey(1)&0xFF==ord('q'):break# 6. 释放资源cap.release()cv2.destroyAllWindows()pose.close()# ---------------------- 运行项目 ----------------------if__name__=="__main__":print("正在启动肢体动作追踪...")print("提示:按下'q'键可退出程序")body_pose_tracking()print("肢体动作追踪已结束")

三、项目运行说明

1. 运行步骤

  1. 确保已安装所有依赖库(opencv-pythonmediapipe)。
  2. 将上述源码保存为body_pose_tracking.py文件。
  3. 终端进入文件所在目录,执行命令:python body_pose_tracking.py
  4. 程序启动后,会自动调用电脑内置摄像头,弹出追踪窗口显示肢体骨骼追踪结果。
  5. 按下键盘q键,即可退出程序并释放摄像头资源。

2. 运行效果

  • 窗口中实时显示你的肢体动作,绿色圆点为人体33个关键骨骼点,蓝色线条为骨骼连接线。
  • 鼻子位置会标注其像素坐标(可选功能,可扩展其他骨骼点的坐标获取)。
  • 支持实时跟随肢体移动,无明显延迟(取决于电脑性能和摄像头帧率)。

四、核心功能解析

  1. MediaPipe Pose 初始化:配置模型复杂度、检测/追踪置信度,平衡精度和运行速度。
  2. 摄像头数据读取:通过cv2.VideoCapture获取实时视频帧,处理摄像头打开失败的异常。
  3. 图像格式转换:MediaPipe仅支持RGB格式图像,而OpenCV默认读取BGR格式,需进行格式互转。
  4. 姿态检测与结果绘制:调用pose.process()得到骨骼点数据,通过draw_landmarks()绘制追踪结果。
  5. 资源释放:程序退出时释放摄像头、关闭窗口、关闭Pose模型,避免资源泄露。

五、扩展方向(可选)

  1. 视频文件追踪:将cv2.VideoCapture(0)改为cv2.VideoCapture("your_video.mp4"),即可对本地视频文件进行肢体追踪。
  2. 骨骼点坐标保存:将检测到的骨骼点坐标写入csv文件,用于后续动作分析、机器学习训练。
  3. 自定义动作识别:通过判断特定骨骼点的相对位置(如手肘是否弯曲、膝盖是否抬起),实现自定义动作(如举手、深蹲)的识别。
  4. 提升模型精度:将model_complexity改为2,模型精度更高,但对电脑性能要求更高(适合高性能设备)。

六、常见问题排查

  1. 摄像头无法打开:检查摄像头是否被其他程序占用,外接摄像头需确认连接正常,将cv2.VideoCapture(0)改为1尝试。
  2. 运行卡顿:降低模型复杂度(model_complexity=0)、降低摄像头分辨率,或关闭其他占用性能的程序。
  3. 无骨骼点绘制:确保环境光线充足(避免过暗/过曝),人体处于摄像头画面中央,提高min_detection_confidence阈值(如0.7)。
  4. 依赖安装失败:升级pippython -m pip install --upgrade pip),再重新安装依赖库,国内用户可使用镜像源加速安装。
  5. AttributeError: module ‘mediapipe’ has no attribute ‘solutions’:检查安装的mediapipe的版本,可以通过安装低版本解决此问题。

总结

  1. 该项目基于MediaPipe PoseOpenCV实现,无需自定义训练,快速实现实时肢体动作追踪。
  2. 核心流程:摄像头取帧→格式转换→姿态检测→结果绘制→窗口显示,逻辑清晰且易于扩展。
  3. 运行关键:安装对应依赖、确保摄像头可用、按下q键正常退出释放资源。

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

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

相关文章

Flutter艺术探索-Flutter自定义组件:组合与封装技巧

Flutter自定义组件:从组合到封装的全链路指南 引言:自定义组件,为什么是Flutter开发者的必修课? 在Flutter的世界里,“一切皆为组件”不仅仅是一句口号,更是我们构建界面的基本方式。尽管Flutter自带了一个…

循环神经网络与文本处理:编码器-解码器架构及其应用

编码器-解码器架构 学习目标 通过本课程,学员将了解到编码器-解码器架构的基本原理、组成组件以及其在机器翻译等序列转换问题中的应用。 相关知识点 编码器-解码器架构 学习内容 1 编码器-解码器架构 1.1 编码器 机器翻译是序列转换模型的一个核心问题,…

Flutter艺术探索-Flutter调试工具:DevTools使用指南

Flutter调试利器:手把手带你玩转DevTools 引言 开发Flutter应用时,卡顿、内存泄漏或是UI渲染异常,这些问题你肯定遇到过。光靠print调试显然不够用,这时候,一个强大的调试工具就是你的“救命稻草”。Flutter DevTools正…

循环神经网络与文本处理:深度循环神经网络的实现与应用

深度循环神经网络 学习目标 通过学习本课程,学员将了解深度循环神经网络的函数依赖关系,简洁实现,训练与预测。 相关知识点 深度循环神经网络 学习内容 讨论一个具有单向隐藏层的循环神经网络。其中,隐变量和观测值与具体的函数形…

Promise 吞错太坑?前端老鸟教你揪出那些藏起来的错误

Promise 吞错太坑?前端老鸟教你揪出那些藏起来的错误Promise 吞错太坑?前端老鸟教你揪出那些藏起来的错误错误去哪了?—— 一场“无声”的坠机Promise 为啥爱“吃白食”?现场还原:四个最容易踩的坑1. then 里 throw 完…

长尾关键词如何助力SEO策略优化与网站流量提升

长尾关键词是SEO策略中不可或缺的组成部分,因其能够为网站带来更精准的流量。通常,这些关键词由多个词组成,比传统关键词更具针对性,帮助满足用户特定的搜索需求。在实施长尾关键词策略时,网站需要关注内容的相关性&am…

【笔试真题】- 华子-2026.01.07-研发岗

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 华子-2026.01.07-研发岗 题目一:预约订单收益最大化 1️⃣:使用动态规划思想,维护两个状态变量 2️⃣:利用状态转移方程 f[i] = max(f[i-1], f[i-2] + val[…

Flutter device_info_plus库在鸿蒙端的设备信息获取适配实践

Flutter device_info_plus库在鸿蒙端的设备信息获取适配实践 引言 OpenHarmony(以下简称鸿蒙)生态这几年发展很快,分布式架构和全场景能力吸引了越来越多开发者的目光。在这种背景下,跨平台开发框架与鸿蒙的深度融合,已…

Flutter艺术探索-Flutter状态管理入门:setState最佳实践

Flutter状态管理入门:setState 最佳实践指南 引言:从命令式到声明式的思维转变 Flutter 作为谷歌主推的跨平台 UI 框架,其核心特点之一是采用了声明式编程范式。这与我们熟悉的命令式 UI 开发(比如 Android 的 View 系统或原生 iO…

AI技术赋能SEO关键词优化策略新路径解析

在数字化营销的背景下,AI技术的应用为SEO关键词优化带来了前所未有的可能。AI通过先进的数据分析能力,能够快速识别出用户的搜索需求和市场变化。这使得企业在选择关键词时更加精准,提高了关键词布局的科学性和有效性。运用自然语言处理和机器…

【笔试真题】- 华子-2026.01.07-算法岗

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 华子-2026.01.07-算法岗 2026.01.07 华子算法岗笔试题解 题目一:AI 算法基础知识测评 1️⃣:建立题号到答案的映射字典 2️⃣:输入题号,直接查表输出对应答…

深度测评本科生必用的8个AI论文平台

深度测评本科生必用的8个AI论文平台 2026年本科生论文写作工具测评:如何选择高效实用的AI平台 随着人工智能技术在学术领域的深入应用,越来越多的本科生开始借助AI论文平台提升写作效率与质量。然而,面对市场上琳琅满目的工具,如何…

长尾关键词在关键词优化中提升SEO效果的有效策略

在关键词优化中,长尾关键词扮演着至关重要的角色。它们不仅有助于提高网站在搜索引擎中的排名,还能吸引更精准的用户群体。长尾关键词通常更长且具体,通常包含三到五个词,不同于更为宽泛的短尾关键词。由于竞争较小,优…

Flutter艺术探索-Flutter响应式设计:MediaQuery与LayoutBuilder

Flutter响应式设计:MediaQuery与LayoutBuilder深度解析 引言:为什么响应式设计非做不可? 如今,用户的设备琳琅满目,从握在手里的手机、桌上的平板,到新兴的折叠屏乃至桌面应用,屏幕尺寸和形态千…

黑客网站大全!都在这了!速看被删就没了

黑客网站大全!都在这了!速看被删就没了 我们学习网络安全,很多学习路线都有提到多逛论坛,阅读他人的技术分析帖,学习其挖洞思路和技巧。但是往往对于初学者来说,不知道去哪里寻找技术分析帖,也…

(9-1-01)自动驾驶中基于概率采样的路径规划:RRT算法介绍+RRT算法的定义与实现(1)

提升在复杂环境中使用RRT算法族解决路径规划问题的实践能力。9.1 RRT算法介绍快速扩展随机树(Rapidly-exploring Random Trees,RRT)是一种用于路径规划的算法,特别适用于机器人、自动驾驶车辆和其他自主系统的运动规划问题。该算法通过在自由空间中随机…

Linux 文本处理工具

先创建一个测试文件data.txt# 创建并写入内容&#xff0c;执行后直接生成data.txt cat > data.txt << EOF 2026-01-01,张三,技术部,9000 2026-01-02,李四,市场部,8500 2026-01-03,王五,技术部,10000 2026-01-04,赵六,销售部,7500 2026-01-05,钱七,技术部,9500 # 这是员…

别只盯酷炫形态,CES 2026逛展,我更关注AI硬件的落地底气

刚从CES 2026展会上归来&#xff0c;仍觉余韵未消、震撼不已&#xff01;今年拉斯维加斯这场展会&#xff0c;堪称AI硬件领域的巅峰对决。服务机器人能精准听令调酒&#xff0c;智能座舱靠眼动追踪交互&#xff0c;AR眼镜轻巧却功能强大……各类展品共同描绘出智能无缝的未来生…

小白考CPA难吗?难度、通过率科目指南

对于零基础小白来说&#xff0c;CPA&#xff08;注册会计师&#xff09;考试常被贴上“难度大”“通过率低”的标签&#xff0c;但真正的关键在于是否找对了备考路径。考伯乐依托多年财经教育沉淀&#xff0c;专为小白打造从入门到持证的高效方案&#xff0c;今天就从难度、通过…

嘈杂环境秒哑火?声网让AR眼镜走出实验室

刚从CES 2026的AR眼镜展区逛完出来&#xff0c;心情五味杂陈。这赛道竞争愈发激烈&#xff0c;重量减10克、分辨率升500PPI&#xff0c;甚至有品牌塞进eSIM模块。可我作为用了近两年AR眼镜的老用户&#xff0c;站在展台前却格外平静。参数进步固然好&#xff0c;但对我这种要日…