使用OpenCV和MediaPipe库——实现人体姿态检测

目录
准备工作如何在Windows系统中安装OpenCV和MediaPipe库?
安装Python
安装OpenCV
安装MediaPipe
验证安装
代码逻辑
整体代码
效果展示

准备工作如何在Windows系统中安装OpenCV和MediaPipe库?
安装Python
可以通过命令行运行python --version来检查版本号。如果没有安装,可以从Python官方网站下载并安装。
安装OpenCV
-
打开命令提示符(Command Prompt)。
-
输入以下命令来安装OpenCV-python:
pip install opencv-python如果你也需要OpenCV的额外模块(如SIFT、SURF等),可以运行:
pip install opencv-contrib-python
安装MediaPipe
安装MediaPipe同样简单,只需要在命令提示符下运行:
pip install mediapipe
验证安装
为了验证OpenCV和MediaPipe是否成功安装,可以在命令提示符中启动Python解释器,然后尝试导入这两个库:
import cv2
import mediapipe as mp
print(cv2.__version__)
print(mp.__version__)
如果打印出了版本号,安装成功。

代码逻辑
-
导入必要的库:
cv2: OpenCV库,用于处理图像和视频。mediapipe as mp: MediaPipe库,提供了一种简单的方法来访问先进的机器学习模型,这里用于人体姿态估计。time: 用于时间相关的操作,比如计算FPS。
-
初始化MediaPipe姿势检测对象:
- 使用
mp_pose.Pose()创建了一个姿势检测器对象,设置了最小检测置信度和跟踪置信度为0.5。
- 使用
-
打开摄像头获取视频流:
- 使用
cv2.VideoCapture(0)打开默认摄像头。
- 使用
-
主循环开始:
- 在
while cap.isOpened():循环中不断读取摄像头数据。
- 在
-
处理每一帧图像:
- 首先检查是否成功读取图像。
- 然后计算当前帧的FPS。
- 将BGR格式的图像转换为RGB格式,因为MediaPipe需要RGB格式的输入。
- 使用姿势检测器对象对图像进行处理,得到关键点位置。
-
绘制关键点和连接线:
- 如果检测到了关键点(
results.pose_landmarks),则使用mp_drawing.draw_landmarks()函数在图像上绘制这些关键点及其连接线。 - 可以自定义关键点和连线的颜色、粗细等属性。
- 如果检测到了关键点(
-
显示FPS信息:
- 在图像上显示当前帧的FPS值,帮助用户了解程序运行的流畅度。
-
展示结果并监听退出指令:
- 使用
cv2.imshow()展示处理后的图像。 - 监听键盘事件,当按下'q'键时退出循环,释放资源并关闭所有窗口。
- 使用

整体代码
import cv2 # 导入 OpenCV 库,用于图像处理和显示
import mediapipe as mp # 导入 MediaPipe 库,用于姿势检测
import time # 导入时间模块,用于计算 FPS# 初始化 MediaPipe 的绘图工具和姿势检测模型
mp_drawing = mp.solutions.drawing_utils # 用于绘制关键点和连接线
mp_pose = mp.solutions.pose # 用于姿势检测# 打开摄像头
cap = cv2.VideoCapture(0) # 0 表示默认摄像头,如果有多个摄像头可以尝试 1, 2, 等# 初始化 FPS 计算相关变量
prev_time = 0 # 用于存储上一帧的时间戳# 使用 MediaPipe 的姿势检测模型
with mp_pose.Pose(min_detection_confidence=0.5, # 检测置信度阈值,高于此值才认为检测到姿势min_tracking_confidence=0.5 # 跟踪置信度阈值,高于此值才继续跟踪
) as pose:# 进入主循环,持续读取摄像头画面while cap.isOpened():success, image = cap.read() # 读取一帧画面if not success: # 如果读取失败(如摄像头断开)print("无法读取摄像头画面。")break# --- 计算 FPS ---curr_time = time.time() # 获取当前帧的时间戳dt = curr_time - prev_time # 计算与上一帧的时间间隔(秒)fps = 1 / dt if dt != 0 else 0 # 计算帧率(FPS),避免除以零错误prev_time = curr_time # 更新上一帧的时间戳# 将图像从 BGR 格式转换为 RGB 格式(MediaPipe 需要 RGB 格式)image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 使用姿势检测模型处理图像results = pose.process(image_rgb)# 如果检测到姿势关键点,绘制关键点和连接线if results.pose_landmarks:mp_drawing.draw_landmarks(image, # 要绘制的图像results.pose_landmarks, # 检测到的姿势关键点mp_pose.POSE_CONNECTIONS, # 定义关键点之间的连接线landmark_drawing_spec=mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=2), # 关键点的颜色和粗细connection_drawing_spec=mp_drawing.DrawingSpec(color=(0, 0, 255), thickness=2) # 连接线的颜色和粗细)# --- 在画面上显示 FPS ---fps_text = "FPS: {:.2f}".format(fps) # 格式化 FPS 值,保留两位小数cv2.putText(image, # 要绘制的图像fps_text, # 显示的文本内容(10, 30), # 文本位置(左上角,距离左边 10 像素,距离顶部 30 像素)cv2.FONT_HERSHEY_SIMPLEX, # 字体类型1, # 字体大小(0, 255, 0), # 字体颜色(绿色)2 # 字体粗细)# 显示处理后的图像cv2.imshow('Real-Time Pose Detection', image)# 检测按键输入,如果按下 'q' 键则退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头资源
cap.release()# 关闭所有 OpenCV 窗口
cv2.destroyAllWindows()

效果展示


相关文章:
使用OpenCV和MediaPipe库——实现人体姿态检测
目录 准备工作如何在Windows系统中安装OpenCV和MediaPipe库? 安装Python 安装OpenCV 安装MediaPipe 验证安装 代码逻辑 整体代码 效果展示 准备工作如何在Windows系统中安装OpenCV和MediaPipe库? 安装Python 可以通过命令行运行python --versio…...
JWT的学习
1、HTTP无状态及解决方案 HTTP一种是无状态的协议,每次请求都是一次独立的请求,一次交互之后就是陌生人。 以CSDN为例,先登录一次,然后浏览器退出,这个时候在进入CSDN,按理说服务器是不知道你已经登陆了&…...
elasticsearch是哪家的
Elasticsearch:数据搜索与分析的领航者 在当今这个信息爆炸的时代,快速且准确地处理海量数据成为了众多企业和组织追求的目标。而Elasticsearch正是在这个背景下脱颖而出的一款强大的开源搜索引擎。它是由位于美国加利福尼亚州的Elastic公司所开发和维护…...
《A++ 敏捷开发》- 18 软件需求
需求并不是关于需求 (Requirements are not really about requirements) 大家去公共图书馆寄存物品,以前都是扫二维码开箱,有些图书馆升级了使用指纹识别。 “是否新方法比以前好?”我问年轻的开发人员。 “当然用指纹识别好。新技术&#x…...
计算机网络:计算机网络的组成和功能
计算机网络的组成: 计算机网络的工作方式: 计算机网络的逻辑功能; 总结: 计算机网络的功能: 1.数据通信 2.资源共享 3.分布式处理:计算机网络的分布式处理是指将计算任务分散到网络中的多个节点(计算机或设备&…...
Upload-Labs-Linux 1-20
前端校验绕过:pass 01 两种思路:1.通过抓包,修改后缀 2.前端禁用js绕过前端后缀检验 首先写一个木马,改为图片格式GIF89a<?php eval($_POST[cmd])?>抓包之后改为PHP格式: 使用蚁剑连接木马,第一次尝…...
Compose笔记(八)--权限
这一节主要了解一下Compose中权限的申请,其中主要用到accompanist-permissions这个权限库,它是一个简化的Android Compose 中权限管理的库,如下使用: 栗子: 依赖添加 dependencies {implementation("com.google.accompani…...
单例模式:确保一个类只有一个实例
目录 引言 1. 单例模式的核心思想 2. 单例模式的实现方式 2.1 饿汉式单例 2.2 懒汉式单例 2.3 线程安全的懒汉式单例 2.4 双重检查锁定(Double-Checked Locking) 2.5 静态内部类实现单例 2.6 枚举实现单例 3. 单例模式的使用场景 4. 单例模式…...
推荐一个好用的在线文本对比网站 - diffchecker
推荐网址:https://www.diffchecker.com UI设计也很不错,响应也很快,广告少 生成的对比还可以生成在线链接:(点击右上角“分享”) 可设置过期时间等 我生成的示例:https://www.diffchecker.c…...
学习第八十五行
[capture](parameters) -> return_type {// function body }capture: 捕获列表,指定如何捕获周围作用域中的变量。parameters: 参数列表,与普通函数类似。return_type: 返回类型,可以省略,编译器会自动推断。function body: 函…...
基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程
一、Django项目初始化 1.创建Django项目 Django-admin startproject 项目名 2.安装 djangorestframework pip install djangorestframework 解释: Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架,提供了多种工具和库来构建 RESTf…...
【Python 2D绘图】Matplotlib绘图(统计图表)
【Python 2D绘图】Matplotlib绘图(统计图表) 1. 概述1.1 简介1.2 安装1.3 导入1.4 保存1.5 数据来源1.5.1 Numpy ndarray1.5.2 Pandas DataFrame 1.6 中文显示 2. 基础样式2.1 颜色2.1.1 简称2.1.2 全称 2.2 布局2.2.1 Matplotlib 画布划分2.2.2 绘制子图…...
vue3框架的响应式依赖追踪机制
当存在一个响应式变量于视图中发生改变时会更新当前组件的所以视图显示,但是没有视图中不写这个响应式变量就就算修改该变量也不会修改视图,这是为什么?我们能否可以理解宽泛的理解为vue组件的更新就是视图的更新,单当视图中不存在…...
.Net 6 上传文件接口 文件大小报错整体配置
/// <summary>/// 上传文件/// </summary>/// <param name"file"></param>/// <returns></returns>[HttpPost("UploadifyFile")][RequestSizeLimit(2000 * 1024 * 1024)] // 设置最大请求体大小为 100MBpublic async …...
Git基础之工作原理
基础概念 git本地有三个工作区域,工作目录 Working Directory,暂存区Stage/Index和资源区Repository/Git Directory,如果在加上远程的git仓库就是四个工作区域 四个区域与文件交换的命令之间的关系 WorkSpace:工作区,就…...
小程序 wxml 语法 —— 41列表渲染 - 进阶用法
这一节讲解列表渲染的两个进阶用法: 如果需要对默认的变量名和下标进行修改,可以使用 wx:for-item 和 wx:for-item: 使用 wx:for-item 可以指定数组当前元素的变量名使用 wx:for-index 可以指定数组当前下标的变量名 将 wx:for 用在 标签上&…...
ElasticSearch 入门教程
ElasticSearch 入门教程 ElasticSearch 是一个分布式、可扩展的搜索和分析引擎,基于 Apache Lucene 构建,支持全文检索、结构化查询和聚合分析。本教程将带你深入了解 ElasticSearch 的核心概念、安装配置、常见操作,并提供示例代码…...
用Python写一个算24点的小程序
一、运行界面 二、显示答案——递归介绍 工作流程: 1. 基本情况:函数首先检查输入的数字列表 nums 的长度。如果列表中只剩下一个数字,它会判断这个数字是否接近 24(使用 abs(nums[0] - 24) < 1e-10 来处理浮点数精度问题&…...
分布式网络
分布式网络(Distributed Network)指的是一种计算机网络架构,其中计算资源(计算、存储、数据处理等)分布在多个物理或逻辑上的节点上,而不是集中在单一的服务器或数据中心中。这种架构的主要目标是提高系统的…...
忘记dedecms后台超级管理员账号和密码的解决方案
解决方案: 方案一、数据库修改: 1、前提是您能登录到数据库后台,登录MySQL数据库管理工具(如phpMyAdmin) 2、打开数据库中的 dede_admin 表,找到管理员记录,将 pwd 字段的值改成 f297a57a5a7…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
