MPII数据集简介

    技术2023-06-04  88

    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

    Processed: 0.010, SQL: 9