手把手教你:在Python中通过机器学习实现人体姿势估计

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2023.04.11贵州

姿态检测是计算机视觉领域的一个活跃研究领域。你可以从字面上找到数百篇研究论文和几个试图解决姿势检测问题的模型。

之所以有如此多的机器学习爱好者被姿势估计所吸引,是因为它的应用范围很广,而且实用性很强。

在本文中,我们将介绍一种使用机器学习和Python中一些非常有用的库进行姿势检测和估计的应用。

姿态估计是一种跟踪人或物体运动的计算机视觉技术。这通常通过查找给定对象的关键点位置来执行。基于这些关键点,我们可以比较各种动作和姿势并得出见解。姿态估计在增强现实、动画、游戏和机器人领域得到了积极的应用。

目前有几种模型可以执行姿态估计。下面给出了一些姿势估计的方法:

1.Openpose

2.Posenet

3.Blazepose

4.DeepPose

5.Densepose

6.Deepcut

在本文中,我们将使用Blazepose检测人体姿势并提取关键点。该模型可以通过一个非常有用的库轻松实现,即众所周知的MediaPipe。

MediaPipe——MediaPipe是一个开源的跨平台框架,用于构建多模型机器学习管道。它可用于实现人脸检测、多手跟踪、头发分割、对象检测和跟踪等前沿模型。

BlazePoseDetector——大部分姿态检测依赖于由17个关键点组成的COCO拓扑结构,而Blaze姿态检测器预测33个人体关键点,包括躯干、手臂、腿部和面部。包含更多关键点对于特定领域姿势估计模型的成功应用是必要的,例如手、脸和脚。每个关键点都使用三个自由度以及可见性分数进行预测。BlazePose是亚毫秒模型,可用于实时应用,其精度优于大多数现有模型。该模型有两个版本:Blazeposelite和Blazeposefull,以提供速度和准确性之间的平衡。

Blaze姿势提供多种应用程序,包括健身和瑜伽追踪器。这些应用程序可以通过使用一个额外的分类器来实现,比如我们将在本文中构建的分类器。

姿势估计可以在2D或3D中完成。2D姿态估计通过像素值预测图像中的关键点。而3D姿态估计是指预测关键点的三维空间排列作为其输出。

我们在上一节中了解到,人体姿势的关键点可以用来比较不同的姿势。在本节中,我们将使用MediaPipe库本身来准备数据集。我们将拍摄两个瑜伽姿势的图像,从中提取关键点并将它们存储在一个CSV文件中。

你可以通过此链接从Kaggle下载数据集

该数据集包含5个瑜伽姿势,但是,在本文中,我只采用了两个姿势。如果需要,你可以使用所有这些,程序将保持不变。

在上面的代码片段中,我们首先导入了有助于创建数据集的必要库。然后在接下来的四行中,我们将导入提取关键点所需的模块及其绘制工具。

接下来,我们创建一个空的Pandas数据框并输入列。这里的列包括由Blaze姿态检测器检测到的33个关键点。每个关键点包含四个属性,即关键点的x和y坐标(从0到1归一化),z坐标表示以臀部为原点且与x的比例相同的地标深度,最后是可见度分数。可见性分数表示地标在图像中可见或不可见的概率。

count=0forimginos.listdir(path):temp=[]img=cv2.imread(path+'/'+img)imageWidth,imageHeight=img.shape[:2]imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)blackie=np.zeros(img.shape)#Blankimageresults=pose.process(imgRGB)ifresults.pose_landmarks:#mpDraw.draw_landmarks(img,results.pose_landmarks,mpPose.POSE_CONNECTIONS)#drawlandmarksonimagempDraw.draw_landmarks(blackie,results.pose_landmarks,mpPose.POSE_CONNECTIONS)#drawlandmarksonblackielandmarks=results.pose_landmarks.landmarkfori,jinzip(points,landmarks):temp=temp+[j.x,j.y,j.z,j.visibility]data.loc[count]=tempcount+=1cv2.imshow('Image',img)cv2.imshow('blackie',blackie)cv2.waitKey(100)data.to_csv('dataset3.csv')#savethedataasacsvfile在上面的代码中,我们单独遍历姿势图像,使用Blaze姿势模型提取关键点并将它们存储在临时数组“temp”中。

迭代完成后,我们将这个临时数组作为新记录添加到我们的数据集中。你还可以使用MediaPipe本身中的绘图实用程序来查看这些地标。

应该注意的一件事是,Blaze姿态模型采用RGB图像而不是BGR(由OpenCV读取)。

获得所有图像的关键点后,我们必须添加一个目标值,作为机器学习模型的标签。你可以将第一个姿势的目标值设为0,将另一个设为1。之后,我们可以将这些数据保存到CSV文件中,我们将在后续步骤中使用该文件创建机器学习模型。

你可以从上图中观察数据集的外观。

现在我们已经创建了我们的数据集,我们只需要选择一种机器学习算法来对姿势进行分类。在这一步中,我们将拍摄一张图像,运行blaze姿势模型(我们之前用于创建数据集)以获取该图像中人物的关键点,然后在该测试用例上运行我们的模型。

该模型有望以高置信度给出正确的结果。在本文中,我将使用sklearn库中的SVC(支持向量分类器)来执行分类任务。

在上面的代码行中,我们首先从sklearn库中导入了SVC(支持向量分类器)。我们已经用目标变量作为Y标签训练了我们之前在SVC上构建的数据集。

然后我们读取输入图像并提取关键点,就像我们在创建数据集时所做的那样。

最后,我们输入临时变量并使用模型进行预测。现在可以使用简单的if-else条件检测姿势。

从上面的图像中,你可以观察到模型已经正确地对姿势进行了分类。你还可以在右侧看到Blaze姿势模型检测到的姿势。

在第一张图片中,如果你仔细观察,一些关键点是不可见的,但姿势分类是正确的。由于Blaze姿态模型给出的关键点属性的可见性,这是可能的。

姿势检测是机器学习领域的一个活跃研究领域,并提供了多种实际应用。在本文中,我们尝试开发一个这样的应用程序,并通过姿势检测来解决问题。

我们了解了姿势检测和几个可用于姿势检测的模型。出于我们的目的选择了blaze姿势模型,并了解了它相对于其他模型的优缺点。

最后,我们使用sklearn库中的支持向量分类器构建了一个分类器来对瑜伽姿势进行分类。为此,我们还构建了自己的数据集,可以使用更多图像进一步扩展。

你也可以尝试其他机器学习算法而不是SVM,并相应地比较结果。

THE END
1.天工一刻一文看懂3D大模型“纯原生”3D生成方案与通用大模型思路类似,采用端到端方案,首先使用海量3D数据集训练大模型,然后以前馈(feed-forward)方案生成3D模型。 (“纯原生”3D大模型路径代表研究,来自论文《A Comprehensive Survey on 3D Content Generation》) 这一路径的代表玩家毫无疑问有OpenAI——Scaling Law与大模型领域的坚定支持者。https://www.csdn.net/article/2024-07-31/140813818
2.使用Python从2D图像进行3D重建过程详解使用Python从2D图像进行3D重建过程详解 2D图像的三维重建是从一组2D图像中创建对象或场景的三维模型的过程。这个技术广泛应用于计算机视觉、机器人技术和虚拟现实等领域。 在本文中,我们将解释如何使用Python执行从2D图像到三维重建的过程。我们将使用TempleRing数据集作为示例,逐步演示这个过程。该数据集包含了在对象周围https://www.elecfans.com/d/2331603.html
3.3D目标检测数据集KITTI(标签格式解析3D框可视化点云转图像kitti 3D数据集的基本情况: KITTI整个数据集是在德国卡尔斯鲁厄采集的,采集时长6小时。KITTI官网放出的数据大约占采集全部的25%,去除了测试集中相关的数据片段,按场景可以分为“道路”、“城市”、“住宅区”、“校园”和“行人”5类。 传感器配置: https://developer.aliyun.com/article/1376108
4.MedMNIST:18个数据集开启2D+3D医学影像之旅,可免费下载MedMNIST v2医学图像数据集已经发布,相较 MedMNIST v1,MedMNISTv2新增了 2 个 2D 生物图像数据,以及 6 个 3D 生物医学图像数据。 在基于深度学习的人工智能和计算机视觉技术的快速发展下,医学影像分析领域得到了长足的发展,以至于深度学习成为医学图像分析领域中最核心的研究方式之一。医学影像分析中的数据模态、数据集https://www.shangyexinzhi.com/article/4332788.html
5.学习关于2D和3D姿势估计的知识阅读本文并不需要任何有关姿势估计的基础知识。本文从头到尾总结了有关姿态估计的所有关键点和重要主题。文章的开头包括什么是姿态估计以及为什么我们必须了解姿态估计。本文从头部、手部、人体、2D、3D 以及更多姿势估计中描述了多种姿势估计。之后,我们将使用各种公共数据集,用于使用流行算法进行姿势估计。 https://mp.ofweek.com/ai/a556714591307
6.MedMNIST:18个数据集开启2D+3D医学影像之旅,可免费下载机器之心该研究在验证集上采用早停法的 ResNet 为基线方法,对于 2D 数据集选取 ResNet18 和 ResNet50 分别在 28*28 和 224*224(从 28 分辨率进行插值放大)分辨率上进行测试;对于 3D 数据集,选取 2.5D、3D、ACS 卷积的 ResNet18 和 ResNet50 进行测试。同时,该研究还选取了三种自动机器学习模型 auto-sklearn、Authttps://www.jiqizhixin.com/articles/2021-11-04-6
7.MMdetection3dnuscenes数据集mob64ca14031c97的技术博客在这项工作中,我们的目标是通过增强基于激光雷达的算法来处理单个图像输入,从而弥合3D传感和2D传感在3D目标检测方面的性能差距。具体来说,我们进行单目深度估计,并将输入图像提升到点云表示,我们称之为伪激光雷达点云。然后我们可以用我们的伪激光雷达端到端训练一个基于激光雷达的三维检测网络。按照两阶段3D检测算法https://blog.51cto.com/u_16213628/11567377
8.thepairof2Dfaceimageanditscorresponding3DfaceThis repository contains the dataset including the pair of 2D face image and its corresponding 3D face geometry model. - Juyong/3DFacehttps://github.com/Juyong/3DFace
9.DAIR数据集中使用了三个坐标系:世界坐标系(UTM Coord.)、相机坐标系以及激光雷达坐标系。为了获得准确的2D-3D 联合标注结果,需要在不同传感器之间进行校准。 首先,通过棋盘格检测来对相机进行标定获得相机内参数。然后通过车辆定位模块进行 Lidar坐标系到世界坐标系的校准。对于世界坐标到相机坐标系的校准,首先将包含车道和http://thudair.baai.ac.cn/rope
10.与姿态动作相关的数据集介绍由于受到收集数据设备的限制,目前大部分姿态数据都是收集公共视频数据截取得到,因此2D数据集相对来说容易获取,与之相比,3D数据集较难获取。2D数据集有室内场景和室外场景,而3D目前只有室内场景。 ms coco 地址:http://cocodataset.org/#download 样本数:>= 30W https://www.jianshu.com/p/cfae23ae64f1
11.学习报告:机器人抓取中物体定位位姿估计和抓取估计算法综述基于对应关系的目标6D 位姿估计涉及在观察到的输入数据和现有完整 3D 对象模型之间寻找对应关系的方法。 当我们想基于2D RGB图像解决这个问题时,需要找到现有3D模型的2D像素和3D点之间的对应关系。然后通过 Perspective-n-Point (PnP) 算法计算出位姿信息。 当要从深度图像中提取的 3D 点云来进行位姿估计时,要找到https://www.scholat.com/teamwork/teamwork/showPostMessage.html?id=10653
12.NVIDIA赋能Cyanpuppets打造实时2D视频生成3D骨骼AI转换KIRI Engine 的核心价值不仅在于用更低的成本为 3D 开发者提供 3D 重建工具,更在于通过快速增长的用户在云端积累海量 3D 数据集。随着 AI 带来的创作变革,AI 生成 3D 模型将会是下一个生成式 AI 的主战场,而高度标准化的 3D 数据集是 AI 生成 3D 模型的必要条件。在生成式 AI 全面到来的时代,KIRI 正在面https://blogs.nvidia.cn/?p=84558
13.基于深度学习的医学影像处理(1)2D vs 3D 在医学影像领域,有些数据并不是单纯的二维图像,有大量的三维数据,比如MRI和CT数据。而深度学习的图像处理技术现在大多数还是针对二维图像而言的。如何对这些三维数据进行建模,并使用深度学习的方式进行训练,是一个非常有挑战性的事情。 (2)迁移学习 https://bmci.hdu.edu.cn/2022/0915/c7486a156946/page.htm
14.comsol后处理——结果分析和绘图教程.ppt2D绘图(huì tú)组和绘图(huì tú)类型 第十一页,共24页。 2D散射(sǎnshè)面和3D散射(sǎnshè)体在2D面或3D体上绘制(huìzhì)散点图 第十二页,共24页。 1D绘图(huì tú)组和绘图(huì tú)类型 第十三页,共24页。 切面(qiēmiàn)图 切面图需要将数据集和绘图组相结合 可以在1D、2D、3D点https://max.book118.com/html/2021/1022/7106063106004025.shtm
15.今日CV计算机视觉论文速览第128期Mon,10Jun2019特别是,CPD Net被证明具有理论上的保证,可以学习连续位移矢量函数,这可以进一步避免像以前的工作那样施加额外的参数平滑约束。我们的实验验证了CPD Net在各种2D 3D数据集上非刚性点集配准的出色表现,即使存在明显的位移噪声,异常值和缺失点。我们的代码是可用的https://www.cnblogs.com/Tom-Ren/p/11054595.html