人脸表情识别和情绪分类 | Python+TensorFlow(框架)+Keras+PyQt5

  • Post author:
  • Post category:python




人脸表情识别 | Python+Keras+PyQt5

参考学习文章:


Keras|基于深度学习的人脸表情识别系统



PyQt5+QtDesigner编写摄像头界面程序(一)——pyqt5、qtdesigner安装和环境设置


本次设计参考以上两篇文章,非常感谢博主们的分享,我收获良多!



一、前言



(一)本设计简介

本设计是基于Python的人脸表情识别和情绪分类,在TensorFlow框架下,使用其内部高级API——Keras搭建训练模型,并利用OpenCV库中的相关函数共同实现人脸识别、人脸表情识别、情绪分类的目的,最后借助PyQt5增加界面,通过界面可对输入的画面进行调整颜色、调整曝光度、亮度等操作,还可以通过“开始”、“暂停”、“结束”功能控制识别过程的通断,通过“录像”功能保存所需的画面,从而使整个设计更友好、更加人性化。



(二)语言选择

本设计选用相对简单易上手的Python语言,其具体的介绍可查看

Python百度百科

,此处不做过多陈述。



(三)环境选择



1.TensorFlow简介

具体内容请查看

TensorFlow官网

。TensorFlow是Google开源的基于数据流图的机器学习框架,支持python和c++程序开发语言。TensorFlow支持卷积神经网络(CNN)和循环卷积网络(RNN),以及RNN的一个特例长短期记忆网络(LSTM),以上都是目前在计算机视觉、语音识别、自然语言处理方面最流行的深度神经网络模型。

在这里插入图片描述

在TensorFlow官网中介绍了TensorFlow的以下六大优势:

●高度灵活性

●真正的可移植性

●将科研和产品结合在一起

●自动求微分

●多语言支持

●最优化性能

因为本设计仅使用TensorFlow框架作为程序运行环境,主要是使用其高级API——Keras,因此不过多介绍。



2.Keras简介

具体内容请查看

Keras官网

。Keras是一个高级的Python神经网络框架。Keras已经被添加到TensorFlow中,成为其默认的框架,作为TensorFlow高级API之一。Keras作为TensorFlow的高层封装,可以与TensorFlow联合使用,用它快速搭建原型。

Keras是高度封装的,非常适合新手使用,代码更新速度较快,有大量公开示例代码,文档和讨论区也比较完善。

在Keras官网描述了其以下几个有点:

●模块化:模型的各部分,如神经层、成本函数、优化器、初始化、激活函数、规范化都是独立的模块,可以组合在一起来创建模型。

●极简主义:每个模块都保持简短和简单。

●易扩展性:很容易添加新模块,因此Keras更适合做进一步的高级研究。

●使用Python语言:模型使用Python实现,非常易于调试和扩展。

在这里插入图片描述



(三)本设计相关知识学习


Python学习笔记(一)



Python+OpenCV(一)——基础操作



Python+Tensorflow学习(二)——初试keras



(四)本设计环境搭建步骤


Win10+Python3.6.5+Anaconda3-5.2.0+Tensorflow安装



二、本设计成果展示



(一)无PyQt5界面:

在这里插入图片描述



(二)与PyQt5界面结合:

在这里插入图片描述



三、本设计主要代码结构讲解

本设计主要代码结构整体上分为两大部分,在各部分再细分以下几点:

代码主要结构主要分为两大部分:

一、人脸表情识别和情绪分类部分

(一)卷积神经网络模型的训练

1数据集的获取

2.加载pre-model网络与权重;

3.训练模型

4.保存训练模型

(二)面部表情识别

1.打开摄像头

2.人脸识别

3.图像预处理

4.人脸表情识别

5.情绪分类

二、PyQt5界面创建

1.PyQt+QtDesigner及opencv等工具的安装与设置;

2.基于QtDesigner的界面设计;

3.各部分程序的编写;

4.笔记本摄像头的读取、显示和参数控制;

以下逐点介绍。



(一)人脸表情识别和情绪分类部分

在人脸表情识别和情绪分类部分分为过程:卷积神经网络模型的训练与面部表情的识别。



1.卷积神经网络模型的训练


1.1数据集的获取


(1)数据集下载

为了节约素材收集时间,同时也为更公平的评价模型以及人脸表情识别分类器的性能,我们采用使用公开的数据集。

本次设计使用了

kaggle面部表情识别竞赛所使用的fer2013人脸表情数据库

,图片统一以csv的格式存储,利用python可将csv文件转为单通道灰度图片,并根据标签将其分类在不同的文件夹中。

在这里插入图片描述

在这里插入图片描述



(2)数据集格式转换

首先根据用途label分成三个csv(分别是训练集(train)、测试集(test)、验证集(val));

# -*- coding = utf-8 -*-
# @Time : 2021/8/7 09:12
# @Author : 西兰花
# @File : convert_fer2013.py
# @Software : PyCharm

"""
根据用途label分成三个csv(分别是训练集(train)、测试集(test)、验证集(val));
"""

import csv

database_path = 'F:/test05/表情识别/表情识别/emotion_classifier-master/fer2013/'
datasets_path = './fer2013/'
csv_file = database_path+'fer2013.csv'
train_csv = datasets_path+'train.csv'
val_csv = datasets_path+'val.csv'
test_csv = datasets_path+'test.csv'


with open(csv_file) as f:
    csvr = csv.reader(f)
    header = next(csvr)
    print(header)
    rows = [row for row in csvr]
    
    trn = [row[:-1] for row in rows if row[-1] == 'Training']
    csv.writer(open(train_csv, 'w+'), lineterminator='\n').writerows([header[:-1]] + trn)
    print(len(trn))

    val = [row[:-1] for row in rows if row[-1] == 'PublicTest']
    csv.writer(open(val_csv, 'w+'), l



版权声明:本文为Cat_North_South原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。