使用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…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
