MPII数据集:从图像到姿态估计

一、MPII数据集

MPII人体姿态数据集是一个常用的用于人体姿态估计和关键点检测的数据集,其中包含大量的人体姿态标注数据和图像数据。该数据集由德国马克斯·普朗克研究所计算机视觉小组提供。

该数据集包含超过25k个图像和对应的人体姿态标注。每个标注包括13个关键点(7个在躯干部分和6个在四肢),每个关键点包括一个坐标。此外,还提供了16个关键部位的二维边界框标注和6个关键部位的三维坐标。

二、Mpi数据

在MPI数据中,提供了训练和测试数据,并且还将训练数据分成了训练集、验证集和测试集。其中,训练集包括24985个图像和相应的注释,验证集包含2958个图像和相应的注释,测试集包括28678个图像和相应的注释。

该数据集提供了多种类型的注释,包括关节位置的二维坐标、关节位置的三维坐标、姿态角度和人体部件的细粒度标注。此外,还提供了图像前背景遮挡的标注、不同图像的相对深度和交互行为的标注。

三、MPII数据集图片选取

1、标注样例

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制姿态估计的关键点位置。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

下面是代码运行的结果显示的图片,其中红色点表示姿态估计的关键点。

2、二维边界框标注

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制二维边界框标注。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

# 加载边框密集区域注释
anno_file = 'mpii_human_pose_v1_u12_2/train/joint_data.mat'
db = Mpii(anno_file)
data = db[0]
img = db.load_image(data['image'])
plt.imshow(img)

# 在图像上绘制边框
x1, y1, x2, y2 = data['objpos'] - data['bbox'][[1, 0, 3, 2]]
plt.gca().add_patch(plt.Rectangle((x1, y1), x2 - x1, y2 - y1, edgecolor='c', fill=False, linewidth=3))

下面是代码运行的结果显示的图片,其中蓝色矩形表示二维边界框标注。

3、三维坐标标注

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制三维坐标标注。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

# 加载三维坐标注释
anno_file = 'mpii_human_pose_v1_u12_2/train/joint_data.mat'
db = Mpii(anno_file)
data = db[0]
image_path = os.path.join(db.img_dir, data['image'])
img = db.load_image(image_path)

# 获取在图像中对应的关键点位置
joints_3d = data['joints_3d']
joints_2d = data['joints']

# 在图像上绘制关键点位置
for joint_id in range(16):
    plt.scatter(joints_2d[joint_id, 0], joints_2d[joint_id, 1], s=100, marker='.', color='r')

# 获取每个关键点的三维坐标
joints_xyz = db.get_joints_xyz(joints_3d, image_path)

# 将三维坐标绘制成点云图
fig = plt.figure()
ax = Axes3D(fig)
ax.set_xlim3d([-1, 1])
ax.set_ylim3d([-1, 1])
ax.set_zlim3d([-1, 1])
ax.scatter(joints_xyz[:, 0], joints_xyz[:, 1], joints_xyz[:, 2], s=20, marker='o')

下面是代码运行的结果显示的图片,其中红色点表示三维坐标标注,蓝色点表示绘制的三维点云图。

4、姿态角度标注

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制姿态角度标注。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

# 加载姿态注释
anno_file = 'mpii_human_pose_v1_u12_2/train/joint_data.mat'
db = Mpii(anno_file)
data = db[0]
img = db.load_image(data['image'])

# 获取在图像中对应的关键点位置
joints_3d = data['joints_3d']
joints_2d = data['joints']

# 绘制在图像上
for joint_id in range(16):
    plt.scatter(joints_2d[joint_id, 0], joints_2d[joint_id, 1], s=100, marker='.', color='r')

# 获取每个关键点的姿态角度
theta = db.get_theta(data)

# 在图像旁边绘制姿态角度的文本说明
for i, t in enumerate(theta):
    plt.text(img.shape[1] + 10, 20 + i * 20, "{}: {:.2f}".format(db.joint_names[i], t))

下面是代码运行的结果显示的图片,其中红色点表示姿态角度标注,红色字表示姿态角度的文本说明。

5、人体部件细粒度注释

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制人体部件细粒度注释。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

# 加载人体部件细粒度注释
anno_file = 'mpii_human_pose_v1_u12_2/train/mpii_human_pose_v1_u12_1.mat'
db = Mpii(anno_file)
data = db[0]
img = db.load_image(data['filename'])

# 获取在图像中对应的关键点位置
joints_3d = data['joints_3d']
joints_2d = data['joints']

# 绘制在图像上
for joint_id in range(16):
    plt.scatter(joints_2d[joint_id, 0], joints_2d[joint_id, 1], s=100, marker='.', color='r')

# 在图像旁边绘制人体部件的标签
for label_id, label_name in enumerate(db.body_part_names):
    center = db.get_body_part_center(data, label_id)
    plt.text(img.shape[1] + 10, 20 + label_id * 20, "{}: ({:.0f}, {:.0f})".format(label_name, center[0], center[1]))

下面是代码运行的结果显示的图片,其中红色点表示人体部件细粒度注释,红色字表示人体部件的标签。

原创文章,作者:NCCC,如若转载,请注明出处:https://www.506064.com/n/145362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NCCCNCCC
上一篇 2024-10-27 23:49
下一篇 2024-10-27 23:49

相关推荐

  • Python读取CSV数据画散点图

    本文将从以下方面详细阐述Python读取CSV文件并画出散点图的方法: 一、CSV文件介绍 CSV(Comma-Separated Values)即逗号分隔值,是一种存储表格数据的…

    编程 2025-04-29
  • 如何在Java中拼接OBJ格式的文件并生成完整的图像

    OBJ格式是一种用于表示3D对象的标准格式,通常由一组顶点、面和纹理映射坐标组成。在本文中,我们将讨论如何将多个OBJ文件拼接在一起,生成一个完整的3D模型。 一、读取OBJ文件 …

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • 如何用Python统计列表中各数据的方差和标准差

    本文将从多个方面阐述如何使用Python统计列表中各数据的方差和标准差, 并给出详细的代码示例。 一、什么是方差和标准差 方差是衡量数据变异程度的统计指标,它是每个数据值和该数据值…

    编程 2025-04-29
  • 如何实现图像粘贴到蒙版

    本文将从多个方面介绍图像粘贴到蒙版的实现方法。 一、创建蒙版 首先,在HTML中创建一个蒙版元素,用于接收要粘贴的图片。 <div id=”mask” style=”widt…

    编程 2025-04-29
  • Python多线程读取数据

    本文将详细介绍多线程读取数据在Python中的实现方法以及相关知识点。 一、线程和多线程 线程是操作系统调度的最小单位。单线程程序只有一个线程,按照程序从上到下的顺序逐行执行。而多…

    编程 2025-04-29
  • Python爬取公交数据

    本文将从以下几个方面详细阐述python爬取公交数据的方法: 一、准备工作 1、安装相关库 import requests from bs4 import BeautifulSou…

    编程 2025-04-29
  • Python两张表数据匹配

    本篇文章将详细阐述如何使用Python将两张表格中的数据匹配。以下是具体的解决方法。 一、数据匹配的概念 在生活和工作中,我们常常需要对多组数据进行比对和匹配。在数据量较小的情况下…

    编程 2025-04-29
  • Python数据标准差标准化

    本文将为大家详细讲述Python中的数据标准差标准化,以及涉及到的相关知识。 一、什么是数据标准差标准化 数据标准差标准化是数据处理中的一种方法,通过对数据进行标准差标准化可以将不…

    编程 2025-04-29
  • 如何使用Python读取CSV数据

    在数据分析、数据挖掘和机器学习等领域,CSV文件是一种非常常见的文件格式。Python作为一种广泛使用的编程语言,也提供了方便易用的CSV读取库。本文将介绍如何使用Python读取…

    编程 2025-04-29

发表回复

登录后才能评论