Python Opencv实践 - 人体姿态检测

news2024/9/23 23:31:48

        本文仍然使用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.pose
        self.pose = self.mpPose.Pose(mode, modelComplexity, upperBodyOnly, smoothLandmarks, minDetectionConfidence, minTrackConfidence)
        self.mpDraw = mp.solutions.drawing_utils

    def 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 img

    def 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.shape
                x = 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 landmarkList


def 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 curTime

def main():
    poseDetector = PoseDetector()
    video = cv.VideoCapture('../../SampleVideos/acts.mp4')
    #FPS显示
    preTime = 0
    
    while 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.coloradmin.cn/o/1335287.html

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

相关文章

07 Vue3框架简介

文章目录 一、Vue3简介1. 简介2. 相关网站3. 前端技术对比4. JS前端框架5. Vue核心内容6. 使用方式 二、基础概念1. 创建一个应用2. 变量双向绑定(v-model)3. 条件控制(v-if)4. 数组遍历(v-for)5. 绑定事件…

项目经理到底要不要考取PMP证书呢?

IT行业考PMP的人是最多的,转管理是大部分人30人的想法,如果是小白,拿到PMP证书直接转管理还是有些难度的。 不过“经验式管理终将成为过去,专业式管理才是时代趋势”,要想做好一个项目经理,系统的项目管理…

redis基本用法学习(C#调用StackExchange.Redis操作redis)

StackExchange.Redis是基于C#的高性能通用redis操作客户端,也属于常用的redis客户端之一,本文学习其基本用法。   新建Winform项目,在Nuget包管理器中搜索并安装StackExchange.Redis,如下图所示:   StackExchange.…

[kubernetes]Kube-APIServer

API Server API Server是什么 提供集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更等提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd) 访问控制…

《PySpark大数据分析实战》-19.NumPy介绍ndarray介绍

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

creo投影的使用-如何将一个实体的轮廓曲线单独画出来

第一步:先建立一个平面: 比如你需要将实物的曲线正对自己,然后建立此面的偏移平面,然后选中新建立的偏移平面, 然后进入新偏移平面的草绘,然后就可以进行投影了。 第二步:建立参考:…

VMware安装linux系统一

1、创建虚拟机 1.1、创建新的虚拟机 1.2、进入安装向导 1.3、安装操作系统,选择稍后安装操作系统 1.4、选择Linux,版本选择CentOS64位 1.5、设置虚拟机名称和安装位置 1.6、设置磁盘大小 1.7、创建虚拟机 1.8、完成安装 2、配置虚拟机 2.1、选择编辑虚拟机 2.2、修…

drf知识--05

两个视图基类 # APIView:之前一直在用---》drf提供的最顶层的父类---》以后所有视图类,都继承自它 # GenericAPIView:继承自APIView--》封装 继承APIView序列化类Response写接口 # urls.py--总路由 from django.contrib import admin from dj…

SQL server 数据库面试题及答案(实操3)

一、编程题 公司部门表 department 字段名称 数据类型 约束等 字段描述 id int 主键,自增 部门ID name varchar(32) 非空,唯一 部门名称 description varchar(1024) …

天猫生意参谋的各模块功能

生意参谋常用的几个模块有首页、实时、作战室、流量、品类、交易、市场、竞争八大模块,各模块功能如下图所示 1.首页:主要用来了解店铺整体体情况。 2.实时:主要用来了解店铺实时数据总览,分析实时客户访客来源,商品…

【算法题】链表重排(js)

力扣链接:https://leetcode.cn/problems/LGjMqU/description/ /*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode…

案例082:基于微信小程序的跑腿管理系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

智能优化算法应用:基于厨师算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于厨师算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于厨师算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.厨师算法4.实验参数设定5.算法结果6.参考文献7.MA…

pytorch 踩坑

pytorch 踩坑 在pytorch中,如果你定义了没用的组件,同样也会影响你的模型(我也不知道从哪里影响的),看一个例子 def _make_layer(self, block, planes, blocks, stride1, dilateFalse):norm_layer self._norm_layer#downsample Noneprevio…

如何快速删除pdf周围的空白

问题:写论文往往需要pdf格式的图片,但pdf往往四周存在大量空白需要手动截图很麻烦 解决: 打开命令行输入:pdfcrop 图片名.pdf

Vue-Pinina基本教程

前言 官网地址:Pinia | The intuitive store for Vue.js (vuejs.org) 看以下内容,需要有vuex的基础,下面很多概念会直接省略,比如state、actions、getters用处含义等 1、什么是Pinina Pinia 是 Vue 的存储库,它允许您跨…

阻抗控制中的弹簧与阻尼影响分析

阻抗控制是一种机器人控制方法,通过调整机器人的阻抗来实现对机器人的精准控制。在阻抗控制中,弹簧和阻尼是两个重要的参数,它们对机器人的性能和稳定性有很大的影响。 弹簧代表机器人的刚度和弹性,而阻尼代表机器人的阻尼特性&a…

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

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

防火墙双机热备配置步骤

拓朴图: 步骤: 1、交换机分配vlan,分配网关;PC分配IP 2、防火墙划分区域 firewall zone trust add interface G1/0/0 dis zone 3、分配IP,分配服务 service-manage ping permit 4、做安全策略(先允…

基于Python的新能源汽车销量分析与预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 基于Python的新能源汽车销量分析与预测系统是一个使用Python编程语言和Flask框架开发的系统。它可以帮助用户分析和预测新能源汽车的销量情况。该系统使用了关系数据库进行数据存储,并…