人脸关键点数据集 300W 数据整理
- 由于300W 数据集里面的图片尺寸大小不一,而且关键点数据为 .pts 文件,这些使得进行神经网络学习的时候,数据集必须经过一定的处理,才能使用。
- 现在,我将使用 python 程序,将里面的图片尺寸全都转化为 500 * 500,同时读取并修改 .pts 文件的人脸关键点数据,最后将图片数据和人脸关键点数据保存为 numpy.ndarray 类型。
一. 导入模块
二. 获得 300W 目录下所有的文件
- 获得 300W 目录下所有的文件
file_path_indoor = "E:/300W/300W/01_Indoor/"
file_path_outdoor = "E:/300W/300W/02_Outdoor/"
indoor_file = os.listdir(file_path_indoor)
outdoor_file = os.listdir(file_path_outdoor)
print(indoor_file[0:10], "\n", outdoor_file[0:10])
- 运行结果:
['indoor_001.png', 'indoor_001.pts', 'indoor_002.png', 'indoor_002.pts', 'indoor_003.png', 'indoor_003.pts', 'indoor_004.png', 'indoor_004.pts', 'indoor_005.png', 'indoor_005.pts']
['outdoor_001.png', 'outdoor_001.pts', 'outdoor_002.png', 'outdoor_002.pts', 'outdoor_003.png', 'outdoor_003.pts', 'outdoor_004.png', 'outdoor_004.pts', 'outdoor_005.png', 'outdoor_005.pts']
三. 建立相应 ndarray 数组来保存数据
- 要保存的数据有,人脸图片数据,人脸关键关数据,图片的缩放比例等。
image_size_h, image_size_w = 500, 500
files_num = int(len(indoor_file)/2) + int(len(outdoor_file)/2)
facial_keypoints = np.zeros([files_num, 68*2], dtype=np.float64)
facial_image = np.zeros([files_num, image_size_h, image_size_w, 3], dtype=np.uint8)
image_scale = np.zeros([files_num, 2], dtype=np.float64)
四. 读取图片数据以及人脸关键点数据
- 主要通过 正则表达式 来获得 .pts 文件名,然后进行数据获取
count = 0
for i in indoor_file:ret = re.match(r"(.\w+)\.pts", i) if ret:pts_file = file_path_indoor + iwith open(pts_file, "r") as f:pts_str = f.read()key_point = re.findall(r"\d+\.\d+", pts_str)key_point = [float(x) for x in key_point]facial_keypoints[count] = key_pointimage_file = file_path_indoor + ret.group(1) + ".png"image = cv.imread(image_file, cv.IMREAD_COLOR)image_h, image_w = image.shape[:2]image = cv.resize(image, (image_size_h, image_size_w))image_scale[count] = [image_h/image_size_h, image_w/image_size_w]facial_image[count] = imagecount += 1
for i in outdoor_file:ret = re.match(r"(.\w+)\.pts", i)if ret:pts_file = file_path_outdoor + iwith open(pts_file, "r") as f:pts_str = f.read()key_point = re.findall(r"\d+\.\d+", pts_str)key_point = [float(x) for x in key_point]facial_keypoints[count] = key_pointimage_file = file_path_outdoor + ret.group(1) + ".png"image = cv.imread(image_file, cv.IMREAD_COLOR)image_h, image_w = image.shape[:2]image = cv.resize(image, (image_size_h, image_size_w))image_scale[count] = [image_h/image_size_h, image_w/image_size_w]facial_image[count] = imagecount += 1
五. 对人脸关键点数据进行缩放
六. 效果查看
- 目前,我们的数据处理已经全部完成了,接下来,使用 matplotlib 来看一下效果
for j in range(10): image = facial_image[j] image = cv.cvtColor(image, cv.COLOR_BGR2RGB) for i in range(0, 68):cv.circle(image, (int(facial_keypoints[j, 2*i]), int(facial_keypoints[j, 2*i+1])), 5, (255, 0, 0), -1) plt.subplot(2, 5, j+1)plt.imshow(image)
plt.show()
- 运行结果:

六. 保存数据与载入
- 获取数据之后,我们就可以对这些 ndarray 数组进行保存了。
np.save("./facial_image.npy", facial_image)
np.save("./facial_keypoints.npy", facial_keypoints)
- 使用 np.save() 保存的数据,我们可以通过 np.load() 来载入。
facial_image = np.load(r"./facial_image.npy")
facial_keypoints = np.load(r"./facial_keypoints.npy")
七. 结语
- 如果文中有写的不对的地方,请大家指正。联系方式:lwl510ll@163.com
- 本文到这就结束了,最后感谢大家的观看。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!