fer2013人脸表情数据集简介

fer2013人脸表情数据集由35886张人脸表情图片组成,其中,测试图(Training)28708张,公共验证图(PublicTest)和私有验证图(PrivateTest)各3589张,每张图片是由大小固定为48×48的灰度图像组成,共有7种表情,分别对应于数字标签0-6,具体表情对应的标签和中英文如下:0 anger 生气; 1 disgust 厌恶; 2 fear 恐惧; 3 happy 开心; 4 sad 伤心;5 surprised 惊讶; 6 normal 中性。

但是,数据集并没有直接给出图片,而是将表情、图片数据、用途的数据保存到csv文件中,如下图所示,

如上图所示,第一张图是csv文件的开头,第一行是表头,说明每列数据的含义,第一列表示表情标签,第二列即为图片数据,这里是原始的图片数据,最后一列为用途。

将表情图片提取出来

知道数据结构以后,就好办了,使用pandas解析csv文件,再将原始图片数据保存为jpg文件,并根据用途和标签标签进行分类,分别保存到对应文件夹下,代码比较简单,并且做了详细备注,直接给完整代码如下:

import cv2
# pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/
import pandas as pd
import numpy as np
import osemotions = {'0': 'anger',  # 生气'1': 'disgust',  # 厌恶'2': 'fear',  # 恐惧'3': 'happy',  # 开心'4': 'sad',  # 伤心'5': 'surprised',  # 惊讶'6': 'normal',  # 中性
}
#创建文件夹
def createDir(dir):if os.path.exists(dir) == False:os.makedirs(dir)
createDir("../imgs")
def saveImageFromFer2013(file):#读取csv文件faces_data = pd.read_csv(file)# print(faces_data.head(10))# print(faces_data.columns) #['emotion', 'pixels', 'Usage']# print(faces_data.shape)(35887, 3)# print(len(faces_data)) # 35887#遍历csv文件内容,并将图片数据按分类保存print(faces_data.head())for index in range(len(faces_data)):#解析每一行csv文件内容emotion_data = faces_data.iloc[index, 0]# print(emotion_data)image_data = faces_data.iloc[index, 1]# print(image_data)# print(type(image_data))usage_data = faces_data.iloc[index, 2]#  ['222', '222', '210'] 变成[222, 222, 210]data = list(map(float, image_data.split()))#将图片数据转换成48*48image = np.array(data).reshape(48, 48)print(image.shape)#选择分类,并创建文件名dirName = usage_dataemotionName = emotions[str(emotion_data)]# print(emotionName)#图片要保存的文件夹image_path = os.path.join(dirName, emotionName)print(image_path)# 创建“用途文件夹”和“表情”文件夹createDir(image_path)#图片文件名image_Name = os.path.join(image_path, str(index) + '.jpg')cv2.imwrite(image_Name, image)  #使用cv2实现图片与numpy数组的相互转化saveImageFromFer2013('../datasets/fer2013/fer2013.csv')

运行结果,

运行完上面的代码后,得到3个文件夹,文件下有相应的表情的子文件夹,

子文件夹下又有相应的图片,

加载fer2013数据集合

创建 utils.py

import pandas as pd
import numpy as np
from matplotlib import pyplot as pltdef load_data(data_file):""" loads fer2013.csv dataset# Arguments: data_file fer2013.csv# Returns: faces and emotionsfaces: shape (35887,48,48,1)emotions: are one-hot-encoded"""data = pd.read_csv(data_file)print(data.head())pixels = data['pixels'].to_list()weight, height = 48, 48faces = []for pixel_squence in pixels:face = [int(pixel) for pixel in  pixel_squence.split()]face = np.array(face).reshape(weight, height)faces.append(face)faces = np.array(faces)## 扩充一个维度faces = np.expand_dims(faces,-1)# 获取该列的one_hot表示df = pd.get_dummies(data['emotion'])emotions = df.valuesreturn faces, emotions
def preprocess_input(images):"归一化数据"images = images/255return imagesfaces, emotions = load_data('../datasets/fer2013/fer2013.csv')
print('faces.shape = ', faces.shape)
print('emotions.shape = ', emotions.shape)
print("faces[0].shape = ", faces[0].shape) # 一张表情图
one_face = faces[0].reshape(48, -1)
print('one_face.shape = ', one_face.shape)
one_emotion = emotions[0]
print('one_emotion = ', one_emotion)
plt.imshow(one_face, cmap='gray')
plt.show()print(preprocess_input(one_face))

该函数输入的是fer2013.csv文件路径,返回值是一个元组,包含faces图像矩阵以及emotions的one-hot-encoded矩阵。
data = pd.read_csv(data_file)
利用pandas读取csv文件到data变量。
pixels = data[‘pixels’].tolist() 返回一个列表,列表中每个数据如下:

70 80 82 72 58 58 60 63 54 58 60 48 89 115 121 119 115 110 98 91 84 84 90 99 110 126 143 153 158 171 169 172 169 165 129 110 113 107 95 79 66 62 56 57 61 52 43 41 65 61 58 57 56 69 75 70 65 56 54 105 146 154 151 151 155 ...

列表中每个数据都是表情图片像素点的值的集合,用空格分隔。

接下来,遍历图像列表,

faces = []
for pixel_squence in pixels:face = [int(pixel) for pixel in  pixel_squence.split()]face = np.array(face).reshape(weight, height)faces.append(face)

遍历图像列表,将每一个图片像素数据先用空格分隔,然后转换为列表,之后在转换为48*48的矩阵,最后加入到列表faces。

faces = np.array(faces)

将列表faces再次转换成numpy矩阵,此时faces的shape为(35887,48,48)

faces = np.expand_dims(faces,-1)

扩充faces的维度,扩充之后的faces的shape为(35887,48,48,1),做此步操作的原因是,神经网络的输入为图片,格式为(height,width,通道信息)。

df = pd.get_dummies(data['emotion'])

pd.get_dummies(data[‘emotion’])获得每一个表情分类的one-hot表示,返回的是一个dataframe,最后调用

emotions = df.values

将类型转换为矩阵

CNN表情识别系统制作(1)----fer2013人脸表情数据集简介相关推荐

  1. android 表情识别,基于Android平台的人脸表情识别系统的设计与实现

    摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...

  2. 【人脸表情识别】基于图片的人脸表情识别,基本概念和数据集

    大家好,欢迎来到我们人脸表情识别的专栏,这是专栏的第一篇文章,今天我们讨论的问题是关于表情识别的基本概念和数据集. 作者&编辑 | Menpinland 在较早之前,有三AI已经有一篇< ...

  3. 基于MobileNet的人脸表情识别系统(MATLAB GUI版+原理详解)

    摘要:本篇博客介绍了基于MobileNet的人脸表情识别系统,支持图片识别.视频识别.摄像头识别等多种形式,通过GUI界面实现表情识别可视化展示.首先介绍了表情识别任务的背景与意义,总结近年来利用深度 ...

  4. 人脸表情识别系统(VGG_16和Xception模型)配置GPU加速,Fer2013数据集和CK+数据集,tensorboard

    编译器 python3.8 开发平台 Pycharm PyQT5 系统界面 (可视化开发工具designer ) 模型训练基于深度学习tensorflow框架 opencv haar cascade ...

  5. 基于CNN的人脸表情识别系统

    基于CNN的人脸表情识别系统 主要功能: 1)图片识别,可以通过上传本地图片,进行表情识别 2)拍照识别,点击拍照识别按钮,可以调用摄像头实现拍照,并进 行表情识别 实现原理: 1.表情库的建立 fe ...

  6. 毕业设计-人脸表情识别系统、人工智能

    人脸表情识别系统 1. 前言 在这个人工智能成为超级大热门的时代,人脸表情识别已成为其中的一项研究热点,而卷积神经网络.深度信念网络和多层感知器等相关算法在人脸面部表情识别领域的运用最为广泛.面部的表 ...

  7. Python基于OpenCV的人脸表情识别系统[源码&部署教程]

    1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...

  8. Opencv基于改进VGG19的表情识别系统(源码&Fer2013&教程)

    1.研究背景 在深度学习中,传统的卷积神经网络对面部表情特征的提取不充分以及计算参数量较大的问题,导致分类准确率偏低.因此,提出了一种基于改进的VGG19网络的人脸表情识别算法.首先,对数据进行增强如 ...

  9. 人脸表情识别系统的设计与实现(含UI界面,有完整代码)

    人脸表情识别系统的设计与实现(含UI界面,有完整代码) 这是之前本科做的毕设,当时使用的是keras搭建了一个简单的神经网络作为入门实现了在fer2013人脸表情数据集上的表情分类,并移植到了树莓派上 ...

最新文章

  1. AODV---点点滴滴
  2. .net core实践系列之短信服务-Api的SDK的实现与测试
  3. c++语句switch语句_错误:案例标签不在C中的switch语句内
  4. 开源中国 精彩回顾_如何撰写精彩的事件回顾
  5. 【JavaScript】正则表达式 1
  6. python中的continue和break
  7. MyISAM与InnoDB的区别是什么?
  8. 大数据如何应用在食品追溯管理
  9. 如何选型音视频即时通讯产品
  10. Markdown文章排版
  11. PHPAdmin删除外键约束
  12. 苹果手机10秒解除锁屏_苹果密码忘了不想刷机怎么办_苹果手机10秒解除锁屏
  13. Reporting Services 配置工具
  14. java的SSPanel类_SpringBoot中遇到的一些问题
  15. 大疆无人机自动避障技术盘点
  16. 【HCNP-OSPF】LSA
  17. Python包 - networkx
  18. 做为码农,应该被熟知和关注的技术站点,再也不用担心技术漏洞
  19. faker和劫的图片_Faker喜迎23岁生日 生涯回顾:双劫三冠都比不上最后一图
  20. Android L中水波纹点击效果的实现

热门文章

  1. 体育直播android,500体育直播
  2. Unity 视频播放
  3. 堆漏洞挖掘:19---_lib_malloc函数源码详解
  4. 把AS代码链接到fla文件
  5. Mac Pro 触摸板按压失效(没有按压回弹效果)
  6. ubuntu20.04没有声音如何处理
  7. 电子产品高温贮存试验的价格-第三方检测机构
  8. Origin中输入希腊字母
  9. (数字ic验证)从零开始的apb_watchdog验证模块搭建(一、功能介绍与环境搭建)
  10. 解析DELLR710服务器迁移操作内容