参考github项目,源码地址:
https://github.com/luanshiyinyang/FacialExpressionRecognition
前言
记录一下自己本科毕设项目,也希望能给大家一个参考
一、使用的语言、环境和库的版本
基于python3.7 主要使用的包和版本有:
TensorFlow2.1.0
keras2.8.0
opencv3.4.2
numpy1.16.0
cudnn7.6.5
cudatoolkit 10.1.243
花了很长时间解决库版本冲突问题,经过试验上述版本应该不会出现冲突
默认已经安装了Anaconda,推荐新建一个虚拟环境安装,会方便不少
使用
conda search XXX #查看相关库的可下载版本
conda install XXX=X.X.X #安装指定版本的库
二、数据集
使用FER2013数据集,这个数据集网上应该能很方便的下载到,我下载的是已经分好类别的图像数据,有的版本是一个csv文件,转成图片也行。
三、数据处理
项目文件夹下的data.py文件↓
代码如下:
from tqdm import tqdm #进度条模块
import os
import numpy as np
from tensorflow.keras.preprocessing.image import img_to_array, load_img
class Fer2013(object):
def __init__(self, folder="dataset/fer2013"):
"""
构造函数
"""
self.folder = folder
def gen_train(self):
"""
产生训练数据
:return expressions:读取文件的顺序即标签的下标对应
:return x_train: 训练数据集
:return y_train: 训练标签
"""
#folder = os.path.join(self.folder, 'Training')
folder = 'F:/pycharm/face_emotion/venv/dataset/fer2013/Training'
expressions = ['anger', 'disgust', 'fear', 'happy', 'sad', 'surprised', 'neutral', 'contempt']
x_train = []
y_train = []
for i in tqdm(range(len(expressions))):
if expressions[i] == 'contempt':
continue
expression_folder = os.path.join(folder, expressions[i])
#expression_folder = 'F:/pycharm/face_emotion/venv/dataset/fer2013/Training/'
images = os.listdir(expression_folder)
for j in range(len(images)):
img = load_img(os.path.join(expression_folder, images[j]), target_size=(48, 48), color_mode="grayscale")
img = img_to_array(img) # 灰度化
x_train.append(img)
y_train.append(i)
x_train = np.array(x_train).astype('float32') / 255.
y_train = np.array(y_train).astype('int')
return expressions, x_train, y_train
def gen_valid(self):
"""
产生验证集数据
:return:
"""
#folder = os.path.join(self