fer2013数据集
源链接:https://www.kaggle.com/datasets/ahmedmoorsy/facial-expression
下载后的文件为一个csv,每一行代表一个图片,表情类别id和train或者val或者test以及图像的像素信息。可以用下面的代码处理:
import os
import pandas as pd
import numpy as np
from PIL import Image
# 表情类别映射,根据FER2013官方定义
emotion_map = {
0: 'Angry',
1: 'Disgust',
2: 'Fear',
3: 'Happy',
4: 'Sad',
5: 'Surprise',
6: 'Neutral'
}
# 加载数据集
data = pd.read_csv('fer2013.csv')
# 创建根目录
base_dir = 'FER2013_images'
datasets = ['train', 'val', 'test']
for dataset in datasets:
for emotion_name in emotion_map.values():
os.makedirs(os.path.join(base_dir, dataset, emotion_name), exist_ok=True)
# 遍历数据集,提取并保存图像
for index, row in data.iterrows():
emotion = emotion_map[row['emotion']]
usage = row['Usage'].lower()
if usage == 'training':
dataset_type = 'train'
elif usage == 'publictest':
dataset_type = 'val'
elif usage == 'privatetest':
dataset_type = 'test'
else:
continue
pixels = np.array(list(map(int, row['pixels'].split()))).reshape(48, 48)
img = Image.fromarray(pixels.astype(np.uint8))
filename = os.path.join(base_dir, dataset_type, emotion, f"{emotion}_{index}.png")
img.save(filename)
if index % 1000 == 0:
print(f"Processed {index} images")
print("所有图像已成功提取并分类到train、val、test的各自目录中。");