300WLP、AFLW2000-3D、Biwi Kinect Head Pose Database姿态数据的读取

目前头部姿态估计算法使用的数据,一般是300WLP、AFLW2000、Biwi Kinect Head Pose Database

  • 300WLP共有数据122450张图片,其中AFW:5207 AFW_Flip:5207 HELEN:37676 HELEN_Flip:37676 IBUG:1786 IBUG_Flip:1786 LFPW:16556 LFPW_Flip:16556
  • AFLW2000共有2000张图片
  • Biwi Kinect Head Pose Database共有15678张图片

300WLP、AFLW2000真实标签的读取

300WLP数据有成对的图片(jpg)和标签组成的,标签都以mat形式保存的,里面包含了了【'__header__', '__version__', '__globals__', 'pt2d', 'roi', 'Illum_Para', 'Color_Para', 'Tex_Para', 'Shape_Para', 'Exp_Para', 'Pose_Para'】,AFLW2000类似

import h5py
from scipy.io import loadmat
import numpy as np
import math

if __name__ == "__main__":
    mat_path = "./300W_LP/AFW/AFW_134212_1_0.mat"
    c_mat = loadmat(mat_path)
    print(c_mat.keys())

    #人脸68个关键点
    landmarks = np.array(np.transpose(c_mat['pt2d'])).astype('float').reshape(-1, 2)
    print("landmarks \n", landmarks)
    
    #头部姿态角的俯仰、偏航和滚转角(以弧度的形式表示),并将弧度制转变为以度(°)为单位
    Pose_Para = c_mat['Pose_Para']
    pitch = Pose_Para[0][0] * 180 / math.pi
    yaw = Pose_Para[0][1] * 180 / math.pi
    roll = Pose_Para[0][2] * 180 / math.pi
    print("pitch: {} yaw: {} roll: {}".format(pitch, yaw, roll))

头部姿态输出:

pitch: -18.200389713407343 yaw: 26.86726114746613 roll: -8.615160925626265

300wlp数据集有68个关键点坐标

from scipy.io import loadmat
import cv2
import numpy as np
 
if __name__ == '__main__':
    imagepath = "/home/sunny/dataset/姿态开发/姿态估计_深度学习/300W_LP/AFW/AFW_134212_1_0.jpg"
    matpath = "/home/sunny/dataset/姿态开发/姿态估计_深度学习/300W_LP/AFW/AFW_134212_1_0.mat"

    img = cv2.imread(imagepath)

    c_mat = loadmat(matpath)
    print(c_mat.keys())
    print(c_mat['pt2d'])
    print(c_mat['pt2d'].shape)
 
    landmarks = np.array(np.transpose(c_mat['pt2d'])).astype(
    'float').reshape(-1, 2)
    
    for x, y in landmarks:

        x = int(x)
        y = int(y)
        cv2.circle(img, (x, y), 2, (0, 0, 255), 2)
 
    cv2.imshow('0', img)
    # cv2.imwrite("test.jpg", img)
    cv2.waitKey(0)

 

Biwi Kinect Head Pose Database数据读取

头部姿态估计的标签都保存在了txt文件中,

import numpy as np

def get_pose_angle(pose_path):
    pose_annot = open(pose_path, 'r')
    R = []
    for line in pose_annot:
                    line = line.strip('\n').split(' ')
                    L = []
                    if line[0] != '':
                        for nb in line:
                            if nb == '':
                                continue
                            L.append(float(nb))
                        R.append(L)

    R = np.array(R)
    T = R[3,:]
    R = R[:3,:]
    pose_annot.close()
    R = np.transpose(R) # 求矩阵的转置
    roll = -np.arctan2(R[1][0], R[0][0]) * 180 / np.pi
    yaw = -np.arctan2(-R[2][0], np.sqrt(R[2][1] ** 2 + R[2][2] ** 2)) * 180 / np.pi
    pitch = np.arctan2(R[2][1], R[2][2]) * 180 / np.pi
    return pitch, yaw, roll

if __name__ == '__main__':
    post_path = "./Biwi Kinect Head Pose Database/hpdb/01/frame_00036_pose.txt"
    pitch, yaw, roll = get_pose_angle(post_path)
    print("pitch:{} yaw:{} roll:{}".format(pitch, yaw, roll))

发现不少有问题的图片,如AFLW2000中image03714.jpg(pitch: -29.543809085066318 yaw: -11.260400983618409 roll: -29.381892620601995);image03282.jpg (pitch: 30.66166858048187 yaw: -77.87501653892568 roll: -31.465400845779367);

参考:

【Python】Python读取mat数据集(COFW,300WLP),解析后训练模型用_不会飞的鹰08的博客-CSDN博客

读取头部姿态数据集300W_LP、AFLW2000、BIWI数据集中的真值_福尔摩斯帅双的博客-CSDN博客


版权声明:本文为pursuit_zhangyu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。