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

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

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

一、项目前置准备

1. 安装必要依赖库

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

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

2. 依赖说明

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

二、完整项目源码

import cv2 import mediapipe as mp # ---------------------- 初始化配置 ----------------------# 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)ifnot cap.isOpened():print("错误:无法打开摄像头!")return# 2. 循环读取视频帧并进行姿态追踪while cap.isOpened():# 读取一帧图像 ret, frame = cap.read()ifnot ret: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. 绘制肢体追踪结果(骨骼点+连接线)if results.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'键关闭窗口if cv2.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键正常退出释放资源。

Read more

【JAVA 进阶】SpringBoot自动配置机制:从原理到实践的深度解析

【JAVA 进阶】SpringBoot自动配置机制:从原理到实践的深度解析

文章目录 * 前言 * 第一章 初识SpringBoot自动配置 * 1.1 自动配置的定义 * 1.2 自动配置的核心价值 * 1.2.1 降低开发门槛 * 1.2.2 提高开发效率 * 1.2.3 保证配置一致性 * 1.3 自动配置与传统Spring配置的对比 * 1.3.1 传统Spring Web配置(Spring 4.x及之前) * 1.3.2 SpringBoot自动配置实现 * 第二章 深入原理:SpringBoot自动配置是如何实现的 * 2.1 核心注解:@SpringBootApplication的“三位一体” * 2.1.1 @SpringBootConfiguration:标识配置类

By Ne0inhk
JAVA | 聚焦 OutOfMemoryError 异常

JAVA | 聚焦 OutOfMemoryError 异常

个人主页 文章专栏 在正文开始前,我想多说几句,也就是吐苦水吧…最近这段时间一直想写点东西,停下来反思思考一下。 心中万言,真正执笔时又不知先写些什么。通常这个时候,我都会随便写写,文风极像散文,形散意不散吧! 先说一下近况,最近参加了Mathorlab数学建模,作为一个大一的学生,第一次参加那么高强度的竞赛。深深的意识到自己的不足,天之大,不过蚍蜉撼树。我不过是渺小的沧海一粟。竟欲与苍天比高,不自量力、痴人说梦。梦醒了,还是得加油干…高考后,天真的以为自己不用学习了,后来发现,自己一辈子都要学习。害,挺难过的,也挺无助的。 我,出现在这里。可能你们以为我是理科生,工科女…哦不!我江苏高考纯文出身,这像极了案底。高二下之前,我的确是根正苗红的物化生。可惜,尔辈不能究物理。我无比后悔当时的决定,可是人是不会满足的,那时候不管学啥,我都会后悔。用现在的眼光,去埋怨当时的自己。

By Ne0inhk
Java 大视界 --Java 大数据在智能教育学习资源整合与知识图谱构建中的深度应用(406)

Java 大视界 --Java 大数据在智能教育学习资源整合与知识图谱构建中的深度应用(406)

Java 大视界 --Java 大数据在智能教育学习资源整合与知识图谱构建中的深度应用(406) * 引言: * 正文: * 一、智能教育的两大核心痛点与 Java 大数据的适配性 * 1.1 资源整合:42% 重复率背后的 “三大堵点” * 1.2 知识图谱:83% 学生面临 “知识衔接断层” * 1.3 Java 大数据的 “适配性优势”:为什么选 Java 不选其他? * 二、Java 大数据技术栈选型:贴合教育场景的 “最优解” * 2.1 选型三大核心原则 * 2.2 核心技术栈与场景适配性 * 三、核心方案设计:资源整合 + 知识图谱双引擎 * 3.1 整体架构:从

By Ne0inhk
模仿淘宝购物系统的Java Web前端项目(开源项目)

模仿淘宝购物系统的Java Web前端项目(开源项目)

提示:此项目仅作为本博主的学习笔记记录,不作为商品售卖,资源往下翻看源码获取 文章目录 * 前言 * Web端功能设计 * 首页 * 热销商品 * 新到商品 * 商品分类 * 商品详情 * 购物车 * 添加地址 * 提交订单 * 部分代码展示 * 可能会出现的错误 * 如果拿到项目后发现图片不显示 * 源码获取 前言 提示:这里可以添加本文要记录的大概内容: 本项目要求完成Java Web的开发环境准备,以及项目开发框架的搭建 Web开发环境准备,包括eclipse、MySQL、tomcat Web项目框架搭建,涉及jsp、servlet、MVC等技术 运行网址:http://localhost:8080/eshop0/index.action 提示:以下是本篇文章正文内容,下面案例可供参考 Web端功能设计 首页 热销商品 新到商品 商品分类 商品详情 ![在这里

By Ne0inhk