MPII数据集简介
概述:
MPII人体姿势数据集是人体姿势预估的一个 benchmark,数据集包括了超过 40k 人的 25000 张带标注图片,这些图片是从 YouTube video 中抽取出来的。在测试集中还收录了身体部位遮挡、3D 躯干、头部方向的标注。
MPII 地址: http://human-pose.mpi-inf.mpg.de/#overview
MPII 样本数: 25000 个(单人、多人)
16类标注: (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)
demo
将MATLAB的mat标签转为txt格式,仅针对单人。
"""
摘录:https://github.com/Fangyh09/PoseDatasets
"""
from scipy.io import loadmat
import numpy as np
def save_joints():
mat = loadmat('./mpii_human_pose_v1_u12_1.mat')
fout = open(r'mpii_list.txt','w')
for i, (anno, train_flag) in enumerate(
zip(mat['RELEASE']['annolist'][0, 0][0],
mat['RELEASE']['img_train'][0, 0][0],
)):
img_fn = anno['image']['name'][0, 0][0]
train_flag = int(train_flag)
head_rect = []
if 'x1' in str(anno['annorect'].dtype):
head_rect = zip(
[x1[0, 0] for x1 in anno['annorect']['x1'][0]],
[y1[0, 0] for y1 in anno['annorect']['y1'][0]],
[x2[0, 0] for x2 in anno['annorect']['x2'][0]],
[y2[0, 0] for y2 in anno['annorect']['y2'][0]])
if 'annopoints' in str(anno['annorect'].dtype):
# only one person
annopoints = anno['annorect']['annopoints'][0]
head_x1s = anno['annorect']['x1'][0]
head_y1s = anno['annorect']['y1'][0]
head_x2s = anno['annorect']['x2'][0]
head_y2s = anno['annorect']['y2'][0]
for annopoint, head_x1, head_y1, head_x2, head_y2 in zip(
annopoints, head_x1s, head_y1s, head_x2s, head_y2s):
if annopoint != []:
head_rect = [float(head_x1[0, 0]),
float(head_y1[0, 0]),
float(head_x2[0, 0]),
float(head_y2[0, 0])]
# build feed_dict
feed_dict = {}
feed_dict['width'] = int(abs(float(head_x2[0, 0]) - float(head_x1[0, 0])))
feed_dict['height'] = int(abs(float(head_y2[0, 0]) - float(head_y1[0, 0])))
# joint coordinates
annopoint = annopoint['point'][0, 0]
j_id = [str(j_i[0, 0]) for j_i in annopoint['id'][0]]
x = [x[0, 0] for x in annopoint['x'][0]]
y = [y[0, 0] for y in annopoint['y'][0]]
joint_pos = {}
for _j_id, (_x, _y) in zip(j_id, zip(x, y)):
joint_pos[str(_j_id)] = [float(_x), float(_y)]
# visiblity list
if 'is_visible' in str(annopoint.dtype):
vis = [v[0] if v else [0]
for v in annopoint['is_visible'][0]]
vis = dict([(k, int(v[0])) if len(v) > 0 else v
for k, v in zip(j_id, vis)])
else:
vis = None
feed_dict['x'] = x
feed_dict['y'] = y
feed_dict['vis'] = vis
feed_dict['filename'] = img_fn
if len(joint_pos) == 16:
data = {
'filename': img_fn,
'train': train_flag,
'head_rect': head_rect,
'is_visible': vis,
'joint_pos': joint_pos
}
print(data)
label = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']
sss = ' '
for key in label:
sss = sss + str(int(data['joint_pos'][key][0]))+' '+str(int(data['joint_pos'][key][1]))+' '+str(int(data['is_visible'][key]))+' '
sss = sss.strip()
fout.write(data['filename'] + ' ' + sss + '\n')
fout.close()
if __name__ == '__main__':
save_joints()
输出结果:
{‘filename’: ‘015494179.jpg’, ‘train’: 1, ‘head_rect’: [1085.0, 95.0, 1144.0, 180.0], ‘is_visible’: {‘6’: 0, ‘7’: 0, ‘8’: 0, ‘9’: 0, ‘0’: 0, ‘1’: 0, ‘2’: 0, ‘3’: 1, ‘4’: 1, ‘5’: 1, ‘10’: 1, ‘11’: 0, ‘12’: 0, ‘13’: 1, ‘14’: 1, ‘15’: 1}, ‘joint_pos’: {‘6’: [1162.0, 345.0], ‘7’: [1170.0, 182.0], ‘8’: [1146.7901, 163.3903], ‘9’: [1082.2099, 111.6097], ‘0’: [1149.0, 572.0], ‘1’: [1158.0, 466.0], ‘2’: [1161.0, 344.0], ‘3’: [1163.0, 346.0], ‘4’: [1161.0, 466.0], ‘5’: [1161.0, 577.0], ‘10’: [1102.0, 227.0], ‘11’: [1147.0, 227.0], ‘12’: [1165.0, 175.0], ‘13’: [1175.0, 189.0], ‘14’: [1175.0, 280.0], ‘15’: [1146.0, 346.0]}}
Display
# -*- coding: utf-8 -*-
"""
mat格式转成txt格式
"""
import numpy as np
import cv2
import os
if __name__ == '__main__':
dst = r"./ooo"
img_name = r"001170661.jpg"
label = "532 472 1 524 407 1 534 310 0 553 313 1 542 407 1 550 470 1 544 312 0 558 216 0 555 193 0 550 142 0 519 263 0 534 264 0 540 216 0 576 215 1 586 269 1 556 255 1"
label = label.split()
label = [int(temp) for temp in label]
label = np.array(label).reshape(16,3)
img = cv2.imread(os.path.join(r"D:\human_pose\MPII_Data\mpii",img_name))
for i,key in enumerate(label):
cv2.circle(img,(key[0],key[1]),8,(0,0,255),2)
cv2.putText(img, str(i), (key[0],key[1]), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)
cv2.imwrite(os.path.join(dst,img_name),img)
cv2.imshow('src',img)
cv2.waitKey(0)
标签链接:
github上下载的,找不到链接了。这链接是我网盘里的。
链接:https://pan.baidu.com/s/1WDjvcGpdpl2lSvyemzNgsw
提取码:5xpu