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/zh-tw/n/145362.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NCCC的頭像NCCC
上一篇 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

發表回復

登錄後才能評論