Python Opencv实践 - 人体姿态检测

        本文仍然使用mediapipe做练手项目,封装一个PoseDetector类用作基础姿态检测类。

        mediapipe中人体姿态检测的结果和手部跟踪检测的结果是类似的,都是输出一些定位点,各个定位点的id和对应人体的位置如下图所示:

        关于mediapipe的pose解决方案类更详细的说明,可自行百度或参考这里:

        MediaPipe基础(5)Pose(姿势)_mediapipe pose-CSDN博客文章浏览阅读1.5w次,点赞9次,收藏110次。1.摘要从视频中估计人体姿势在各种应用中起着至关重要的作用,例如量化体育锻炼、手语识别和全身手势控制。例如,它可以构成瑜伽、舞蹈和健身应用的基础。它还可以在增强现实中将数字内容和信息叠加在物理世界之上。MediaPipe Pose 是一种用于高保真身体姿势跟踪的 ML 解决方案,利用我们的 BlazePose 研究从 RGB 视频帧推断整个身体上的 33 个 3D 地标和背景分割掩码,该研究也为 ML Kit 姿势检测 API 提供支持。当前最先进的方法主要依赖于强大的桌面环境进行推理,而我们的方法在大_mediapipe posehttps://blog.csdn.net/weixin_43229348/article/details/120541448        和前面的手部检测代码类似,封装一个PoseDetector类,代码如下:

import cv2 as cv
import mediapipe as mp
import time#mediapipe的pose用于检测人体姿态
#参考资料:https://blog.csdn.net/weixin_43229348/article/details/120541448
class PoseDetector():def __init__(self,mode = False,modelComplexity = 1,upperBodyOnly = False,smoothLandmarks = True,minDetectionConfidence = 0.5,minTrackConfidence = 0.5):self.mpPose = mp.solutions.poseself.pose = self.mpPose.Pose(mode, modelComplexity, upperBodyOnly, smoothLandmarks, minDetectionConfidence, minTrackConfidence)self.mpDraw = mp.solutions.drawing_utilsdef Detect(self, img, drawOnImage = True):#mediapipe需要RGB,opencv默认的格式为BGR,进行转换imgRGB = cv.cvtColor(img, cv.COLOR_BGR2RGB)self.results = self.pose.process(imgRGB)if (self.results.pose_landmarks):#print(results.pose_landmarks)if drawOnImage:self.mpDraw.draw_landmarks(img, self.results.pose_landmarks, self.mpPose.POSE_CONNECTIONS)return imgdef GetPosition(self, img, drawOnImage = True):landmarkList = []if self.results.pose_landmarks:for id, landmark in enumerate(self.results.pose_landmarks.landmark):h,w,c = img.shapex = int(landmark.x * w)y = int(landmark.y * h)landmarkList.append([id, x, y])if (drawOnImage):#cv.circle(img, (x,y), 5, (0,255,0))cv.putText(img, str(id), (x,y), cv.FONT_HERSHEY_PLAIN, 1, (0,255,0), 1)return landmarkListdef DisplayFPS(img, preTime):curTime = time.time()if (curTime - preTime == 0):return curTime;fps = 1 / (curTime - preTime)cv.putText(img, "FPS:" + str(int(fps)), (10,70), cv.FONT_HERSHEY_PLAIN,3, (0,255,0), 3)return curTimedef main():poseDetector = PoseDetector()video = cv.VideoCapture('../../SampleVideos/acts.mp4')#FPS显示preTime = 0while True:ret,frame = video.read()if ret == False:break;frame = poseDetector.Detect(frame)poseDetector.GetPosition(frame)preTime = DisplayFPS(frame, preTime)cv.imshow('Real Time Hand Detection', frame)if cv.waitKey(10) & 0xFF == ord('q'):break;video.release()cv.destroyAllWindows()if __name__ == "__main__":main()

   运行结果:

可以参考我的B站视频:

Python Opencv - Mediapipe人体姿态检测_哔哩哔哩_bilibili 

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

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

相关文章

Fastjson中关于json的处理与配置

Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。 无依赖,不需要例外额外的jar,能够直接跑在JDK上。 FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错&#xff0c…

案例分析:三一重工集团数字化转型

三一重工集团,作为制造业中的数字化转型佼佼者,荣获“全球灯塔工厂”的殊荣,率先采用了物联网、云计算、大数据等尖端技术手段。数字化转型让三一重工步入了全面信息化的管理时代,通过ERP、CRM、HRM等系统的协同运作,实…

第十二章 集合类

12.1集合类概论 java.util包中提供了一些集合类,这些 集合类又被成为容器,提到容器不难想到数组。集合类于数组的不同之处是:数组的长度是固定的 但集合类不同长度是可变的:数组用来存放基本数据类型的数据,集合用来存放对象的引…

Spring Cloud + Vue前后端分离-第7章 核心业务功能开发

Spring Cloud Vue前后端分离-第7章 核心业务功能开发 7-1 课程管理功能开发 课程管理页面美化 1.课程管理页面美化 demo-course.jpg 复制search.html中的部分代码 course.vue 看效果 测试一下新增修改删除效果 1.课程管理页面美化2 scoped:style下的样式只应用于当前组件…

docker的一些思考

1.docker是啥? 2.镜像执行流程 3.一些疑惑和解答 1. 2.

喜报频传!百望云获评“2023数字经济独角兽”称号

“数字经济独角兽”是在数字经济领域具备高成长性、高创新性和高潜力性的企业,他们不仅是数字经济的先锋,是科技创新型企业的典范,也是推动经济发展的新兴引擎。 12月20日,“2023数字经济独角兽大会”在北京大兴区成功举办。大会以…

关于Smartbi登录代码逻辑漏洞的动态情报

一、基本内容 近日,思迈特软件核查发现存在“登录代码逻辑漏洞”问题,重点影响范围涉及Smartbi V9及其以上版本。该漏洞可能导致攻击者利用逻辑缺陷对目标系统进行攻击,造成敏感信息泄露和远程代码执行的风险。 二、相关发声情况 Smartbi是…

.NET 7(C#)配置使用log4net日志框架的方法

log4net 是一个高效、灵活且广泛使用的日志记录库,专门用于 .NET 框架。它是 Apache 的一个开源项目Apache log4j框架在Microsoft .NET平台的实现。log4net 旨在提供一个简单、易用但功能强大的日志系统。本文主要介绍.NET 7 中配置使用log4net,以及相关…

电路设计(7)——窗口比较器的multism仿真

1.功能设计 构建一个窗口比较器的电路,在输入电压大于3.5v,小于0.8v时,蜂鸣器报警,输入电压在0.8v到3.5v之间时,不报警。 整体电路如下: 2.设计思路 在输入端,采取电阻分压的方式,输…

【C++】开源:libmodbus通信协议库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍libmodbus通信协议库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#x…

电脑开机快捷启动,启动菜单没有u盘怎么办

电脑开机快捷启动键找不到u盘怎么办 对于快捷启动键找不到u盘的问题,小编很了解其中的门道,因为开机找不到u盘是我们使用电脑时候的常见问题。那么我们到底要如何解决开机找不到u盘的问题呢?其实方法还是蛮简单的,下面小编就来教大家电脑开…

达梦数据库问题集

达梦数据库问题集 1.达梦库实例 页大小 16K 簇大小 32页 列[LINK]附近出现错误: 在使用达梦数据库时,查询SQL中涉及XML,EXCHANGE,DOMAIN,link字段,在达梦中是关键字,SQL报关键词不能使用的错误。文章来源地址:https://www.yii666.com/art…

java数据结构与算法刷题-----LeetCode633. 平方数之和

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 思路一:双指针 可以使用双指针,不断从两个方向匹配…

IP代理科普| 共享IP还是独享IP?两者的区别与优势

通俗地讲,共享IP就像乘坐公共汽车一样,您可以到达目的地,但将与其他乘客共享旅程,座位很可能是没有的。独享IP就像坐出租车一样,您可以更快到达目的地,由于车上只有您一个人,座位是您一个人专用…

ComfyUI激活中文

comfyui中文地址如下: https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translationhttps://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translation如何安装? 1. git安装 进入项目目录下的custom_nodes目录下,然后进入控制台,运…

获取京东商品信息:使用详情API的步骤与技巧

注册并登录京东开放平台:首先,你需要在京东开放平台上注册一个账号并获取必要的API凭证,如appkey和appsecret。构建请求URL:根据京东详情API的文档,确定需要查询的商品类目和商品ID。然后,使用适当的查询参…

近屿智能OJAC第六期AIGC星辰大海:大模型工程师与产品专家深度训练营已拉开序幕

您想成为AIGC大模型领域的佼佼者吗? 近屿智能OJAC第六期AIGC星辰大海:大模型工程师与产品专家深度训练营已拉开序幕,上千名学员已经实现转行、跳槽、升职、加薪,还不赶快行动起来,这是专为您量身定制的AI大模型学习之旅…

Git常用命令分享

Git常用命令分享 1. 初始化一个新的仓库 git init默认初始化的是master分支&#xff0c;如果想指定分支&#xff0c;使用下面命令&#xff1a; git init -b <branch_name>2.克隆一个仓库 git clone <repository_url>从远程仓库克隆代码到本地。 3. 配置 Git 用…

『CVE』简析CVE-2023-48795:SSH协议前缀截断攻击(Terrapin攻击)

文章目录 OpenSSH 9.6更新公告Terrapin攻击 (CVE-2023-48795)基本信息利用手段利用路径利用条件利用原理及示意图危害Terrapin-Scanner 基于Terrapin的潜在风险&#xff1a;CVE-2023-46445 & 46446参考完 OpenSSH 9.6更新公告 *ssh(1), sshd(8): implement protocol extens…

mysql的timestamp字段和serverTimezone的关系

1. mysql中timestamp字段类型的定义&#xff1a;表示从1970年1月1日0点0分1秒开始到存储时间之间的秒数&#xff0c;最高到2038年1月19号3点14分07秒 这个怎么理解呢&#xff1f;就是不管你当前的时区是什么&#xff0c;当你存入一个时间类型的数据的时候&#xff0c;mysql都会…