人体姿势骨架以图形格式表示人的方向。本质上,它是一组坐标,可以连接起来描述人的姿势。骨架中的每个坐标都被称为一个部分(或一个关节,或一个关键点)。两个部分之间的有效连接称为一对(或分支)。下面是一个人体姿势骨架样本。
因此,在本文中,我们将研究如何使用深度神经网络模型在OpenCV中执行人体姿态估计。

AI Dance based on Human Pose Estimation

  • 1、数据集
  • 2、模型架构
  • 3、实验和结果
    • 加载网络结构
    • 读取图像和准备输入到网络
    • 做出预测并分析关键点
    • 画出骨架

1、数据集

由于缺乏高质量的数据集,人体姿态估计一直是一个具有挑战性的问题。如今,每一个AI挑战都是需要一个好的数据集来完成的。在过去的几年里,有挑战性的数据集已经发布,这使得研究人员更容易有效地解决这个问题。
以下是常用的数据集:

  • COCO Key-points 数据集
  • MPII 人体姿态估计数据集
  • VGG姿态数据集
  • SURREAL(实际任务下的人体姿态数据集)
  • UP-3D数据集
    本文中我们采用的是COCO数据集进行人体姿态估计任务。

2、模型架构

OpenPose首先检测属于图像中每个人的部分(关键点),然后将部分分配给不同的个体。下图是OpenPose模型的架构。

该模型将尺寸为w × h的彩色图像作为输入,并生成图像中每个人关键点的二维位置作为输出。检测分三个阶段进行:

  1. 阶段一:VGGNet的前10层用于为输入图像创建特征映射。
  2. 阶段二:使用2分支多级CNN,其中第一个分支预测身体部位位置(例如肘部,膝盖等)的一组2D置信度图(S)。下面给出了关键点的置信度图和亲和度图。第二个分支预测部分亲和度的一组二维向量场(L),它编码了部分之间的关联程度。
  3. 阶段三:通过贪婪推理对置信度图和亲和度图进行解析,生成图像中所有人的二维关键点。

3、实验和结果

在本节中,为了简单起见,我们将加载用于理解单个人的人体姿态估计的训练模型。步骤如下:

下载模型的权重: 权重下载

加载网络结构

我们正在使用在Caffe深度学习框架上训练的模型。Caffe模型有2个文件:

  • Prototxt文件,它指定了神经网络的体系结构
  • Caffemodel文件,存储训练模型的权重

读取图像和准备输入到网络

我们使用OpenCV读取的输入帧应该转换为输入blob(如Caffe),以便它可以馈送到网络。这是使用blobFromImage函数完成的,该函数将图像从OpenCV格式转换为Caffe blob格式。首先,我们将像素值归一化为(0,1)。然后我们指定图像的尺寸。接下来,要减去的平均值,即(0,0,0)。

做出预测并分析关键点

一旦将图像传递给模型,就可以进行预测。输出为4D矩阵:

  1. 第一个维度是图像ID(如果向网络传递多个图像)。
  2. 第二个维度表示关键点的索引。该模型生成的置信度图和部件关联图都是连接在一起的。对于COCO模型,它由57部分组成- 18关键点置信度图+ 1背景+ 19*2部分亲和图。
  3. 第三个维度是输出映射的高度。
  4. 第四个维度是输出映射的宽度。

画出骨架

当我们有关键点的时候我们就可以画骨架了只要把它们对连接起来。

# 2.Load the network
# Specify the paths for the 2 files
protoFile = "pose/mpi/pose_deploy_linevec_faster_4_stages.prototxt"
weightsFile = "pose/mpi/pose_iter_160000.caffemodel"
# Read the network into Memory
net = cv2.dnn.readNetFromCaffe(protoFile, weightsFile)#3.Read Image and Prepare Input to the Network# Read image
frame = cv2.imread("single.jpg")# Specify the input image dimensions
inWidth = 368
inHeight = 368# Prepare the frame to be fed to the network
inpBlob = cv2.dnn.blobFromImage(frame, 1.0 / 255, (inWidth, inHeight), (0, 0, 0), swapRB=False, crop=False)# Set the prepared object as the input blob of the network
net.setInput(inpBlob)# 4. Make Predictions and Parse Keypoints
output = net.forward()
H = out.shape[2]
W = out.shape[3]
# Empty list to store the detected keypoints
points = []
for i in range(len()):# confidence map of corresponding body's part.probMap = output[0, i, :, :]# Find global maxima of the probMap.minVal, prob, minLoc, point = cv2.minMaxLoc(probMap)# Scale the point to fit on the original imagex = (frameWidth * point[0]) / Wy = (frameHeight * point[1]) / Hif prob > threshold :cv2.circle(frame, (int(x), int(y)), 15, (0, 255, 255), thickness=-1, lineType=cv.FILLED)cv2.putText(frame, "{}".format(i), (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 1.4, (0, 0, 255), 3, lineType=cv2.LINE_AA)# Add the point to the list if the probability is greater than the thresholdpoints.append((int(x), int(y)))else :points.append(None)cv2.imshow("Output-Keypoints",frame)
cv2.waitKey(0)
cv2.destroyAllWindows()# 5. Draw Skeleton
for pair in POSE_PAIRS:partA = pair[0]partB = pair[1]if points[partA] and points[partB]:cv2.line(frameCopy, points[partA], points[partB], (0, 255, 0), 3)
Human Pose Estimation.py hosted with  by GitHub

输出结果如下:

视频结果如下:Youtobe:Human-Pose-Estimation

上述源码开源,已经上传☞此链接: 代码传送门

基于人体姿势估计的舞蹈检测(AI Dance based on Human Pose Estimation)相关推荐

  1. 【2020-CVPR-3D人体姿态估计】Deep Kinematics Analysis for Monocular 3D Human Pose Estimation

    Deep Kinematics Analysis for Monocular 3D Human Pose Estimation 题目:<单目三维人体姿态估计的深度运动学分析> 作者:Jin ...

  2. 姿态估计入门-2020综述《The Progress of Human Pose Estimation: A Survey and Taxonomy of Models Applied in 2D》

    <The Progress of Human Pose Estimation: A Survey and Taxonomy of Models Applied in 2D Human Pose ...

  3. 人体姿态2019(八)Distribution-Aware Coordinate Representation for Human Pose Estimation

    <Distribution-Aware Coordinate Representation for Human Pose Estimation>论文解读 Abstract 1. Intro ...

  4. Human Pose Estimation姿态估计调研

    介绍 姿态估计的目标是在RGB图像或视频中描绘出人体的形状,这是一种多方面任务,其中包含了目标检测.姿态估计.分割等等.有些需要在非水平表面进行定位的应用可能也会用到姿态估计,例如图形.增强现实或者人 ...

  5. 重新思考人体姿态估计 Rethinking Human Pose Estimation

    Newly updated by 2019-11-19 ----------------------------------------------------- 浅谈:2D人体姿态估计基本任务.研究 ...

  6. 无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020

    作者 | Muhammed Kocabas 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 人体的运动对于理解人的行为是非常重要的.尽管目前已经在单图像3D姿势和动作估计方面取得 ...

  7. CVPR2020|无需3D运动数据训练,最新SOTA人体姿势估计方法

    点击我爱计算机视觉标星,更快获取CVML新技术 作者 | Muhammed Kocabas 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 人体的运动对于理解人的行为是非常重要的 ...

  8. 从DeepNet到HRNet,这有一份深度学习“人体姿势估计”全指南

    大数据文摘出品 来源:blog.nanonets 作者:栾红叶.熊琰.周家乐.钱天培 从DeepNet到HRNet,这有一份深度学习"人体姿势估计"全指南 几十年来,人体姿态估计( ...

  9. (Stacked Hourglass Networks for Human Pose Estimation)用于人体姿势估计的堆叠沙漏网络

    摘要 This work introduces( 提出) a novel(新奇的) convolutional network architecture for the task of human p ...

最新文章

  1. ABC181——F - Silver Woods
  2. 【dfs】树(jzoj 2753)
  3. 值类型和引用类型的区别
  4. nacos 公共_Nacos 知识点
  5. 大数据技术周报第 007 期
  6. [Maven问题总结]Maven+Tomcat7
  7. php 运行服务,php自动运行 win32service功能
  8. 逆向-IDA工具的基本使用
  9. 保护计算机组件免受esd,TVS管与ESD保护二极管的区别
  10. C指针 取地址符 取值符*
  11. 华为电脑怎么把虚拟化打开_【解决方案】华为虚拟化解决方案
  12. android 通知 广告,解决三星/小米等Android手机通知栏推送广告的问题
  13. 你还没有变成真正的孙悟空托世
  14. java实时获取android网速_Android实现网速实时监测工具类
  15. u盘乱码怎么办?数据丢失如何恢复?(详解)
  16. Zabbix监控系统详解
  17. js中onsubmit用法
  18. 【番杰的问答笔记】C语言的命令注意事项
  19. 游戏开发经验之游戏App是先做大用户量 还是先盈利呢
  20. uniapp项目运行到小米平板调试

热门文章

  1. Scratch(二):猫猫开始运动啦
  2. 三个办法提升电厂安全管理
  3. 【有功-无功协调优化】基于改进多目标粒子群优化算法(小生境粒子群算法)的配电网有功-无功协调优化研究(Matlab代码实现)
  4. 这些挺进Opensea销量前十名的新NFT有什么共同特点?
  5. 最新消息!信息系统项目管理师教程改版!
  6. RPG角色生成器(java)
  7. 基于javaFX的生鲜销售系统
  8. Android之GridView+BaseAdapter
  9. 【岩熹解读】海澜之家“男人的衣柜”,一件女装都放不下
  10. 计算机科学与技术论文提纲,信息技术论文提纲创作示例