一、用卷积神经网络实现,做笑脸、非笑脸等表情识别
1.1 研究背景
面部表情识别 (Facial Expression Recognition )
在日常工作和生活中,人们情感的表达方式主要有:语言、声音、肢体行为(如手势)、以及面部表情等。在这些行为方式中,面部表情所携带的表达人类内心情感活动的信息最为丰富,据研究表明,人类的面部表情所携带的内心活动的信息在所有的上述的形式中比例最高,大约占比55%。
人类的面部表情变化可以传达出其内心的情绪变化,表情是人类内心世界的真实写照。上世纪70年代,美国著名心理学家保罗•艾克曼经过大量实验之后,将人类的基本表情定义为悲伤、害怕、厌恶、快乐、气愤和惊讶六种。同时,他们根据不同的面部表情类别建立了相应的表情图像数据库。随着研究的深入,中性表情也被研究学者加入基本面部表情中,组成了现今的人脸表情识别研究中的七种基础面部表情。
1.2 人脸表情识别
要经历三个阶段,第1个阶段是人脸检测阶段,第2个阶段是人脸表情特征的提取阶段,第3个阶段是人脸表情的识别阶段。这三个阶段缺一不可,共同完成一次人脸表情的精准识别。所谓的人脸检测指的是在图像中精准的,找出人脸的位置,因此不论是第二步骤还是第三步骤的应用,都需要经历第一步骤,如果相关神经网络技术的应用,无法在图像中进行人脸位置的准确提取,那么第二步骤与第三步骤也就无从谈起。能够用来进行人脸检测的方式有很多,这里不进行一一的举例。在第一步骤完成之后,到了第二阶段,就需要进行人脸表情的特征提取,所谓人脸表情的特征,指的是面部肌肉以及纹理变化的相关特征数据化,通过数据化的呈现来进行准确的提取和分析。由于相关人脸表情识别技术不仅仅要运用在静态图像上,也需要运用到动态图像上。而运用到静态图像上的技术与运用到动态图像上的技术有些微的差别,因此相关技术人员必须要对不同的图像类型的人脸表情特征提取进行不同的基础研究。到了第3个步骤之后,由于已经有了提取出的人脸表情特征信息,因此该步骤只需要判断提取出来的特征属于哪一类别,便算是完成了整体的人脸表情识别。这一步骤的完成也可以通过好几种不同的算法来进行。总而言之,人脸表情识别方式以技术手段仍然有不断改进的可能,在卷积网络神经技术使用基础上进行人脸识别技术的使用,更能够保证其准确性。
1.2面部表情识别框架
面部表情识别通常可以划分为四个进程。包括图像获取,面部检测,图像预处理和表情分类。其中,面部检测,脸部特征提取和面部表情分类是面部表情识别的三个关键环节面部表情识别的基本框架如下图所示。
2.将下载里面的datasets,放到D盘新建的smile中,
1.3根据猫狗数据集训练的方法来训练笑脸数据集
1.首先将train_folder文件夹下俩个文件夹内的图片的名字做修改。(修改成猫狗的图片格式
#coding=gbk
import os
import sys
def rename():
path=input("请输入路径(例如D:\\\\picture):")
name=input("请输入开头名:")
startNumber=input("请输入开始数:")
fileType=input("请输入后缀名(如 .jpg、.txt等等):")
print("正在生成以"+name+startNumber+fileType+"迭代的文件名")
count=0
filelist=os.listdir(path)
for files in filelist:
Olddir=os.path.join(path,files)
if os.path.isdir(Olddir):
continue
Newdir=os.path.join(path,name+str(count+int(startNumber))+fileType)
os.rename(Olddir,Newdir)
count+=1
print("一共修改了"+str(count)+"个文件")
rename()
2)图片分类
import os, shutil #复制文件
# 原始目录所在的路径
# 数据集未压缩
original_dataset_dir1 = 'D:\\smile\\datasets\\train_folder\\1' ##笑脸
original_dataset_dir0 = 'D:\\smile\\datasets\\train_folder\\0' ##非笑脸
# 我们将在其中的目录存储较小的数据集
base_dir = 'D:\\smile1'
os.mkdir(base_dir)
# # 训练、验证、测试数据集的目录
train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)
validation_dir = os.path.join(base_dir, 'validation')
os.mkdir(validation_dir)
test_dir = os.path.join(base_dir, 'test')
os.mkdir(test_dir)
# 猫训练图片所在目录
train_cats_dir = os.path.join(train_dir, 'smile')
os.mkdir(train_cats_dir)
# 狗训练图片所在目录
train_dogs_dir = os.path.join(train_dir, 'unsmile')
os.mkdir(train_dogs