人脸表情识别和情绪分类

您所在的位置:网站首页 人脸检测分类器下载什么软件 人脸表情识别和情绪分类

人脸表情识别和情绪分类

2024-07-10 23:45| 来源: 网络整理| 查看: 265

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

参考学习文章: Keras|基于深度学习的人脸表情识别系统 PyQt5+QtDesigner编写摄像头界面程序(一)——pyqt5、qtdesigner安装和环境设置 本次设计参考以上两篇文章,非常感谢博主们的分享,我收获良多!

目录 人脸表情识别 | Python+Keras+PyQt5 一、前言 (一)本设计简介 (二)语言选择 (三)环境选择 1.TensorFlow简介 2.Keras简介 (三)本设计相关知识学习 (四)本设计环境搭建步骤 二、本设计成果展示 (一)无PyQt5界面: (二)与PyQt5界面结合: 三、本设计主要代码结构讲解 (一)人脸表情识别和情绪分类部分 1.卷积神经网络模型的训练 1.1数据集的获取 (1)数据集下载 (2)数据集格式转换 1.2搭建卷积神经网络模型 1.3训练模型 1.4保存训练模型 2.面部表情的识别 2.1加载pre-model网络与权重; 2.2利用opencv对图像预处理; 1.打开系统摄像头 2.人脸识别 3.灰度处理、裁切、翻转、几何归一化等处理 2.3人脸表情识别 2.4表情分类器检测 (二)PyQt5界面部分 1.PyQt+QtDesigner等工具的安装与设置; 2.基于QtDesigner的界面设计; 3.各部分程序的编写; 4.笔记本摄像头的读取、显示和参数控制; 四、主代码展示

一、前言 (一)本设计简介

本设计是基于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+'), lineterminator='\n').writerows([header[:-1]] + val) print(len(val)) tst = [row[:-1] for row in rows if row[-1] == 'PrivateTest'] csv.writer(open(test_csv, 'w+'), lineterminator='\n').writerows([header[:-1]] + tst) print(len(tst))

文件夹“test”存放测试集数据; 文件夹“train”存放训练集数据; 文件夹“valt”存放验证集数据; 在这里插入图片描述 各文件夹中将图片分为七种,并存放在相应标签(label)中,标签“0”至“7”分别对应情绪“angry”、 “disgust”、“fear”、“happy”、“sad”、“surprise”、“neutral”。 在这里插入图片描述 将图像转换为单通道灰度图:

# -*- coding = utf-8 -*- # @Time : 2021/8/7 09:18 # @Author : 西兰花 # @File : convert_csv2gray.py # @Software : PyCharm """ 将图像转换为单通道灰度图 """ import csv import os from PIL import Image import numpy as np datasets_path = r'.\fer2013' train_csv = os.path.join(datasets_path, 'train.csv') val_csv = os.path.join(datasets_path, 'val.csv') test_csv = os.path.join(datasets_path, 'test.csv') train_set = os.path.join(datasets_path, 'train') val_set = os.path.join(datasets_path, 'val') test_set = os.path.join(datasets_path, 'test') for save_path, csv_file in [(train_set, train_csv), (val_set, val_csv), (test_set, test_csv)]: if not os.path.exists(save_path): os.makedirs(save_path) num = 1 with open(csv_file) as f: csvr = csv.reader(f) header = next(c


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3