首页 > 编程语言 >2D Pose人体关键点实时检测(Python/Android /C++ Demo)

2D Pose人体关键点实时检测(Python/Android /C++ Demo)

时间:2023-01-02 20:01:19浏览次数:75  
标签:Python 检测 Pose 2D Demo Android 关键点 人体


2D Pose人体关键点实时检测(Python/Android /C++ Demo)

目录

​​2D Pose人体关键点实时检测(Python/Android /C++ Demo)​​

​​1.人体关键点数据集​​

​​(1)COCO数据集​​

​​(2)MPII数据集​​

​​(3)关键点示意图​​

​​2.人体关键点Demo(Python版本)​​

​​3.人体关键点Demo(C++版本)​​

​​4.人体关键点Demo(Android版本)​​

​​5.人体关键点检测效果​​

​​6.人体关键点检测训练代码​​

​​7.博客推荐:人脸检测+人体检测C++ Android实现​​


人体关键点检测(Human Keypoints Detection)又称为人体姿态估计2D Pose,是计算机视觉中一个相对基础的任务,是人体动作识别、行为分析、人机交互等的前置任务。一般情况下可以将人体关键点检测细分为单人/多人关键点检测、2D/3D关键点检测,同时有算法在完成关键点检测之后还会进行关键点的跟踪,也被称为人体姿态跟踪。

本博客提供2D Pose的Python代码,以及C++版本的推理代码,还提供​​Android Demo APP​​,已经集成了轻量化版本的​​人体检测模型​​​和​​人体姿态估计模型​​,在普通手机可实时检测。

来,先看个Android Demo的效果图:

2D Pose人体关键点实时检测(Python/Android /C++ Demo)_人体姿态估计

 2D Pose人体关键点检测整套Android源码:​​2D Pose人体关键点实时检测Android源码​​, 整套项目源码,主要内容包含有:  

(1)2D Pose人体关键点检测Android Demo整套源码,可以直接在本地Android studio构建

(2)已经集成了轻量化版本的​​人体检测模型​​​和​​2D Pose人体关键点检测模型​​,在普通手机可实时检测(CPU多线程约70ms, GPU约50ms)

(3)核心算法均采用C++实现,有效提高性能,开发者可轻松进行二次开发

(4)Android Demo支持多线程CPU处理,以及GPU(OpenCL)加速,可支持多人人体关键点检测

(5)​​https://pan.baidu.com/s/1ywiBsJMZlIZoLAu0UZAOFg 提取码: bunc 


1.人体关键点数据集

(1)COCO数据集

下载地址:http://cocodataset.org/

COCO人体关键点标注,最多标注全身的17个关键点,平均一幅图像2个人,最多有13个人;

人体关键点标注,每个人体关键点个数的分布情况,其中11-15这个范围的人体是最多的,有接近70000人,6-10其次,超过40000人,后面依次为16-17,2-5,1.

(2)MPII数据集

下载地址:http://human-pose.mpi-inf.mpg.de/#download

 人体关键点标注了全身16个关键点及其是否可见的信息,人数:train有28821,test有11701,有409种人类活动;使用mat的struct格式;行人框使用center和scale标注,人体尺度关于200像素高度。也就是除过了200

(3)关键点示意图

数据集

关键点示意图          

关键点说明

COCO

2D Pose人体关键点实时检测(Python/Android /C++ Demo)_2D Pose Android_02

# 图像左右翻转时,成对的关键点(训练时用于数据增强)
flip_pairs=[[1, 2], [3, 4], [5, 6], [7, 8],[9, 10], [11, 12], [13, 14], [15, 16]]

# 关键点连接线序号(用于绘制图像)
skeleton =[[15, 13], [13, 11], [16, 14], [14, 12], [11, 12], [5, 11], [6, 12], [5, 6], [5, 7], [6, 8], [7, 9], [8, 10], [0, 1], [0, 2], [1, 3], [2, 4]]


# 每个关键点序号对应人体关键点的意义
"keypoints": { 0: "nose", 1: "left_eye", 2: "right_eye", 3: "left_ear", 4: "right_ear", 5: "left_shoulder", 6: "right_shoulder", 7: "left_elbow", 8: "right_elbow", 9: "left_wrist", 10: "right_wrist", 11: "left_hip", 12: "right_hip", 13: "left_knee", 14: "right_knee", 15: "left_ankle", 16: "right_ankle" }

MPII

2D Pose人体关键点实时检测(Python/Android /C++ Demo)_人体姿态估计_03

# 图像左右翻转时,成对的关键点(训练时用于数据增强)
flip_pairs = [[0, 5], [1, 4], [2, 3], [10, 15], [11, 14], [12, 13]]# 关键点连接线序号(用于绘制图像)
skeleton=[[0, 1], [1, 2], [3, 4], [4, 5], [2, 6], [6, 3], [12, 11], [7, 12], [11, 10], [13, 14], [14, 15], [8, 9], [8, 7], [6, 7], [7, 13]]
# 每个关键点序号对应人体关键点的意义
"keypoints": {0: "r_ankle", 1: "r_knee", 2: "r_hip", 3: "l_hip", 4: "l_knee", 5: "l_ankle", 6: "pelvis", 7: "thorax", 8: "upper_neck", 9: "head_top", 10: " r_wrist", 11: "r_elbow", 12: "r_shoulder", 13: "l_shoulder", 14: "l_elbow", 15: "l_wrist" }


human3.6M

2D Pose人体关键点实时检测(Python/Android /C++ Demo)_2D Pose_04

kinect

2D Pose人体关键点实时检测(Python/Android /C++ Demo)_2D Pose Android_05

JointType_SpineBase = 0 # 脊柱底
JointType_SpineMid = 1 # 脊柱中间
JointType_Neck = 2 # 脖子
JointType_Head = 3 # 额头
JointType_ShoulderLeft = 4
JointType_ElbowLeft = 5
JointType_WristLeft = 6
JointType_HandLeft = 7
JointType_ShoulderRight = 8
JointType_ElbowRight = 9
JointType_WristRight = 10
JointType_HandRight = 11
JointType_HipLeft = 12
JointType_KneeLeft = 13
JointType_AnkleLeft = 14
JointType_FootLeft = 15
JointType_HipRight = 16
JointType_KneeRight = 17
JointType_AnkleRight = 18
JointType_FootRight = 19
JointType_SpineShoulder = 20
JointType_HandTipLeft = 21
JointType_ThumbLeft = 22
JointType_HandTipRight = 23
JointType_ThumbRight = 24
JointType_Count = 25

2.人体关键点Demo(Python版本)

git clone https://github.com/PanJinquan/Human-Keypoints-Detection

目前仅仅提供推理代码,相关训练代码和数据,可以跟博主交流一起学习,可以支持自定义人体关键点进行训练。

人体关键点手部关键点原理差不多的,只要有相关数据即可训练模型。

运行demo:

python demo.py

3.人体关键点Demo(C++版本)

git clone https://github.com/PanJinquan/Human-Pose-Estimation-Lite-cpp

运行demo: 

bash build.sh

这是轻量化版本的人体姿态估计(2D Pose)C++推理代码,推理框架使用​​TNN​

  • 轻量化模型是基于MobileNet V2的改进版本
  • 使用COCO的数据集进行训练,也可以支持MPII数据
  • 支持OpenCL模型推理加速,在普通手机可实时检测
  • 该仓库并未集成​​人体检测模型​​,Pose检测输入是原图,使用人体检测框并进行裁剪,Pose检测效果会更好
  • 关于轻量化版本的人体检测检测模型,可参考​​Object-Detection-Lite-cpp​
  • 注意:纯C++版本速度比较慢,需要配置OpenCL方可实时检测
  • 仅用于学习交流,并未进行过多的性能优化
  • 模型训练代码暂时未提供

4.人体关键点Demo(Android版本)

 2D Pose人体关键点检测整套Android源码:​​2D Pose人体关键点实时检测Android源码​​  , 整套项目源码,主要内容包含有: 

(1)2D Pose人体关键点检测Android Demo整套源码,可以直接在本地Android studio构建

(2)已经集成了轻量化版本的​​人体检测模型​​​和​​2D Pose人体关键点检测模型​​,在普通手机可实时检测(CPU多线程约70ms, GPU约50ms)

(3)核心算法均采用C++实现,有效提高算法性能,开发者可轻松进行二次开发

(4)Android Demo支持多线程CPU处理,以及GPU(OpenCL)加速,可支持多人人体关键点检测

(5) https://pan.baidu.com/s/1ywiBsJMZlIZoLAu0UZAOFg 提取码: bunc 

​Android Demo​​ CPU:70ms,GPU:50ms

2D Pose人体关键点实时检测(Python/Android /C++ Demo)_人体姿态估计

5.人体关键点检测效果

2D Pose人体关键点实时检测(Python/Android /C++ Demo)_人体姿态估计_07

2D Pose人体关键点实时检测(Python/Android /C++ Demo)_2D Pose_08



标签:Python,检测,Pose,2D,Demo,Android,关键点,人体
From: https://blog.51cto.com/u_15764210/5983999

相关文章

  • 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python
    双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python目录​​双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python​​​​1.项目结构​​​​2.Envir......
  • django与python版本对应关系 附加djangorestframework框架
    Django与python版本Django1.11版本兼容Python2.7、3.4、3.5、3.6、3.7(addedin1.11.17)#1.11.5python<=3.6Django2.0版本兼容Python3.4、3.5、3.6、3.7Djang......
  • python 使用 VSCode 入门简介
    本文主要介绍如何使用VSCode创建、编辑、运行、调试hello.py程序,对如何安装使用python不做介绍,也不对安装vscode介绍。准备事项电脑安装python3,vscode,并安装v......
  • Python pip3用国内源安装
    国内可用的源如下:清华:https://pypi.tuna.tsinghua.edu.cn/simple中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学:http://pypi.hustunique.com/山东理工......
  • python 装饰器
    装饰器:本质是一个闭包作用:在不改变原有函数调用的情况下,给函数增加新的功能defwrapper(fn):wrapper:装饰器,fn:目标函数definner(*args,**kwargs):......
  • Python类与对象详解
    一、类和对象类的意思:种类、分类、类别对象是特征与技能的结合体,我可能有身高体重、而你也有身高体重,所以你会说你像我,但是你一定不会说你像阿猫阿狗。并且我和你其实就......
  • Python重用父类方法
    一、重用父类方法1与继承没有关系的重用指名道姓的使用在子类里想用父类的方法,我们可以直接用父类名.方法名()--->父类里方法有几个参数就传几个参数我们看起来......
  • Linux下更新Python版本
    参考:安装图形化配置解析工具_LiteOS_编译和开发工具_Linux下的编译_搭建Linux编译环境_华为云(huaweicloud.com)系统:Centos7$uname-aLinuxlocalhost.localdom......
  • Python类的封装教程
    一、什么是封装封装的本身意思其实就和闭包函数一样,就是把一个函数和变量全都包在一起,但其实这样的说法不是很具体,就是一种很片面的解释二、为什么要封装封装数据的主要......
  • python调用sklearn库实现svr拟合数据
    参考的是b站南方小鱼儿的代码,参考网址:SVR模型对连续量的预测(SVM)02-生成样本数据_哔哩哔哩_bilibili代码如下importnumpyasnpfromsklearn.svmimportSVRimpor......