基于tensorflow的表情识别算法实现

**计算机系统的介绍

一 概要

  本文题目为基于tensorflow的人脸表情识别算法的研究。科研学家把面部表情识别主要将表情划分为七个种类,整个人脸表情识别研究将会划分为四个过程:数据预处理、卷积神经网络的搭建、模型的训练与人脸表情的识别界面的设计,第一部分包括对数据集的预处理和利用卷积网络搭建的神经网络与训练模型,第二部分为加载模型进行人脸表情识别测试,其中创新点就是使用pyqt5进行GUI界面设计封装,增加系统的界面简洁性与用户体验感。其中最大的难点就是搭建卷积神经网络与训练的过程花费的时间。

关键词: 人脸表情识别 深度学习 人工智能

二、基于Tensorflow人脸表情识别

3.1 数据集与预处理

3.1.1数据集的选择

  本研究在数据集的选择中,最终抉择使用kaggle上被公开的数据集,这样的选择不但可以节省数据采集花费过多的时间,而且可以更加准确、统一地评估同一个数据集以及人脸表情分类器通过不同方式测出的性能,即而采用人脸表情库FER2013作为表情识别的数据集。
  这个数据集一共包含35887张不同人不同表情的图片,并且标注usage划分为3个部分为测试部分(Training)共有28709条数据,共同验证部分和私自验证部分一共由7178条数据组成,每条数据都是由48X48像素的灰色图像转化为不同数据点组成的,并且标注emotion划分为7种表情,用数字0-6标签分别对具体表情标注中英文如下:0=生气(angry),1=厌恶(disgust),2=恐惧(fear),3=快乐(happy),4=悲伤(sad),5=惊喜(surprised),6=正常(netrual)。
所选择的人脸表情库(fer2013)是将表情图片的数据与用途全部以数组的形式存放如fer2013.csv文件中而不是以图片的形式保存的,fer2013.csv数据集的组成为由首行为表头说明三列数据的具体含义与命名,首列为心情标签(即表明表情种类);第二列为图片转化成的所有数据(即像素值)以数组格式储存;尾列为三类数据用途的标注(即为训练集或测试集或验证集)组成如图3-1-1所示
在这里插入图片描述

图3-1-1 fer2013.csv内容图

3.1.2数据集的预处理

  若通过寻常的处理数据集的方法,若选择直接将从网上收集到的图片数据集全部载入内存,再进行预处理将会花费许多时间,也没有必要将csv文件数据集再转为图片集多此一举的方法会使得每次训练全部数据载入的过程缓慢,耗时长,而且必然会造成内存巨大的开销。所以决定选择将数据集(csv文件)直接转化为TFRECORD的格式而不是图片从而节省内存与方便调用。
选择的TFRECORD格式是由Tensorflow 提供的以一种独特的格式将数据存储起来。TFRECORD的格式结构比较难理解作为一种二进制文件,没法直接查看。但是它可以合理调配及运用内存,便利于海量数据的读取与运用而且不需要独自的标签文件,优点效率高、跨平台,有助于降低学习成本;TFRECORD格式文件由字段(Features)与协议内存块(protocol buffer)组成。并且可以输入代码从而获得所需的数据,再将数据写入Example协议内存块(PB)中且将协议内存块序列转化成一个字符串,并且通过TFRecordWriter将得到的数据写入到TFRECORD格式文件中去。
TFRecord只可以支持string,int64,float32三种格式进行存储管理,本文通过以列表的形式选用Int64格式写入Feature中。信息包含了图片的标签(label),图片的高度(height)与宽度(width)还有图片的数据(raw),分别对应了value为 label,height,width,raw的feature如下图3-1-2所示。
在这里插入图片描述

图3-1-2 csv转TFRecorf主要代码图
  最终将测试部分(Training)公共验证部分(PublicTest)和私有验证部分(PrivateTest)数据分别生成fer2013_train、fer2013_test、fer2013_eavl三个TFRECORD文件,如下图3-1-3所示。
在这里插入图片描述

图3-1-3 划分数据集图

3.2 搭建卷积神经网络

3.2.1GoogleNet原理

  Googlenet是于2014年与VGGNet并行被提出的深度卷积网络,在深度学习分类与识别方面的实验中深受喜爱且对识别分类体现效果有着很大的作用,GoogleNet的特点与之前被熟知的网络不一样的是它主要考虑横向的延伸而不是纵向。Googlenet在深度与宽度的领域中,选择合并使用11与33与5*5与pooling层的聚集结合使用。主要选择运用Inception mod来进行对特征映射厚度的减低作用。最大优点是使用小计算量却提高一层特征变化与非线性化属于性价比较高的一类Inception模型如下图3-2-1所示。
在这里插入图片描述

图3-2-1 Inception模型图

3.2.2深度卷积神经网络模型

  一个完整的卷积神经网络(CNN)包括一个输入层(INPUT)、一个卷积层(CONV)、激活函数(RELU)、池化层(POOL)、全连接层(FC)和一个输出层(OUTPUT),但是在日常实验中那个所使用到的卷积神经网络进行特征提取时,将会使用不限定个卷积层。相对于传统分类方法,神经网络能够在特征提取和分类范畴同时延伸,改变了传统手工编码提取特征的方式,将其优化成自动化一种端到端(ETE)的学习。传统方法与深度学习方法对比如下图3-2-2所示:
在这里插入图片描述

图3-2-2 传统方法与深度学习对比图

三、系统设计与实现

4.1 系统设计

4.1.1系统功能需求

用户可以通过生成的ui界面进行提交图像、实时摄像头读取视频数据进行分析,然后通过检测得到对应的表情分析结果。该系统并没有制定适用人群,需求分析没有较为复杂繁琐的功能,普通的使用pyqt5与opencv进行实现图片识别与视频在线人脸表情识别GUI界面封装。最主要的工作仍然是放在内部各种深度网络算法(包括人脸面部表情特征识别提取、搭建卷积神经网络等)的优化搭建以及实现,并且进一步明确各个功能之间的关联性以及是否达到目的准确率。

4.1.2系统模块流程

人脸表情识别系统数据处理流程如图4-1-1所示:
在这里插入图片描述

图4-1-1 数据处理流程图

4.2相关技术

4.2.1pyqt5介绍

PyQt是由Riverbank Computing开发,由一系列Python模块组合而成的,有不少于620个类与6000个函数和方法,是最强大的GUI库之一。PyQt提供了一款对使用者非常友好且设计极优的窗口控件集合,每一个PyQt控件都会有其专属的Qt控件。pyqt5特性为:跨平台性、高性能的GUI控件、对QT库进行完全封装、提供一整套齐全的窗口控件,可以利用IDE进行对界面设计与制作,其最大优点是一键生成Python代码。
本系统用到的pyqt5模块为:
1、QtGui:包括窗口控件、2D图像、基本绘画、事项处理、字体与文字类。QtWidgets类还包罗创建桌面应用的一系列UI元素
2、QtMultimedia:包括处理多媒体和调节使用摄像头API的类。
3、QtWidgets:创建主窗口及其主要组成部分

4.2.2opencv介绍

英特尔公司发起并参与开发,最终提出的一个可以跨平台使用的计算机视觉库——OpenCV(Open Source Computer Vision Library)。开始出现在人们认知世界。OpenCV可利用于实时性的图像处理的开发、计算机视觉、模式辨别程序以及对象鉴别、图形滤波、模块匹配、颜色空间、人机交互、图形分区、物体、姿势、人脸识别、动作跟踪、机器人等等领域。
主要用到的模块:
video视频剖析组件与core主要核心功能模块

4.2.3具体设计

采集视频:在电脑端通过0penCVs模块cv2.VideoCapture()获得来自网络摄像头的视频流,然后对视频流进行挖掘分析。
抽取视频帧:VideoCapture()可在构造函数中打开视频,当参数为0时,默认打开本机摄像头获取视频流,若还带有其他摄像头可通过修改参数进行选择。可以通过flag,self.image = self.cap.read()进行数据获取,第一个参数为True or False,代表有没有读取到图片,第二个参数表示截取到一帧的图片。
图像预处理:cvtColor() 方法可用于转换图像的色彩空间,参数为cv2.COLOR_BGR2RGB代表把视频色彩转换回RGB,这样才是现实的颜色,因为一开始读取彩色图像得到的格式是BGR格式。使用OpenCV自带的人脸检测器(haarcascade_frontalface_alt.xml)可以利用该检测器判断图像中是否含有人脸,如果含有人脸则做进一步分析,可调用detectMultiScale方法检测图,分析像中的人脸区域。具体代码如下图4-2-1所示:
在这里插入图片描述

图4-2-1 检查人脸代码图

表情检测标准:在调用人脸检测接口时带上训练所得的模型参数,即可对这张人脸图片进行情绪识别,并且通过putText添加表情文字。主要代码如下图4-2-2所示:
在这里插入图片描述

图4-2-2 标注表情代码图

四、系统运行效果

打开文件夹选择图片主要界面如下图4-3-1所示:
在这里插入图片描述

图4-3-1 打开文件界面图

图片识别主要界面如下图4-3-2所示:
在这里插入图片描述

图4-3-2 图片表情识别图

使用pyqt将系统封装起来后,对图片识别的效果影响不大,但是对于摄像头实时识别会有一点影响,因为在调用摄像头的时候是读的帧数,然后计算机色彩也有一定的调整,所以还是会有一点点小影响,但是已经尽量优化。

五、 结论

  本研究题目为基于Tensorflow的表情识别算法研究,主要工作是收集数据集进行预处理和搭建卷积神经网络,利用OpenCV进行对视频流的分析,并用PYQT5进行GUI界面封装,具体工作如下文:
1、简要的介绍了人脸表情识别在国内外的主要研究以及发展领域。
2、详细的描述了Tensorflow框架的相关知识领域。
3、对在网上收集与采用的数据集(fer2013),进行预处理,包括图像数据格式的处理,使用Tensorflow特有的格式TFRecord进行数据集的分类:训练集、测试集、私有测试集。
4、搭建卷积神经网络,参考GoogleNet并且多次尝试与修改最终搭建了一个4层卷积层的卷积神经网络对数据集进行人类面脸表情识别的模型训练。虽然准确率有所提升,但是由于数据集(fer2013)数据自身某些如光线,脸部比例等问题,准确率最终只能达到75%左右。
5、成功实现了基于Tensorflow的人脸表情识别模型,并在Window8+python3.7+tensorflow2.0的笔记本上进行了模型测试,能够对图片进行人脸表情的自动识别,且准确率和效果较为理想
6、利用Pyqt5+OpenCV进行了界面的封装,成功的实现一个可以图片能识别以及实时视频人脸表情识别的系统。

六、 目录

目 录

第一章 绪论 1
1.1研究背景及意义 1
1.2 国内外研究现状 1
1.3 本文组织结构 2
第二章 Tensorflow相关基础知识 3
2.1 Tensorflow介绍 3
2.1.1tensorflow计算图 3
2.1.2tensorflow数据读取 3
2.1.3运行模型(会话) 4
2.2 Tensorflow平台特性 4
2.3 Tensorflow环境配置 5
第三章 基于Tensorflow人脸表情识别 6
3.1 数据集与预处理 6
3.1.1数据集的选择 6
3.1.2数据集的预处理 6
3.2 搭建卷积神经网络 8
3.2.1GoogleNet原理 8
3.2.2深度卷积神经网络模型 8
3.3 模型训练与测试 11
3.3.1模型训练 11
3.3.2模型测试 13
3.4本章小结 15
第四章 系统设计与实现 17
4.1 系统设计 17
4.1.1系统功能需求 17
4.1.2系统模块流程 17
4.2相关技术 17
4.2.1pyqt5介绍 17
4.2.2opencv介绍 18
4.2.3具体设计 18
4.3 系统运行效果 21
4.4 本章小结 23
第五章 总结 24
5.1 工作总结 24
5.2 不足与展望 24
参考文献 25
致谢 26

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值