基于Keras, OpenCv, PyQt5表情检测系统

news/2025/2/19 8:34:12/

1. 前言

在这个人工智能成为超级大热门的时代,人脸表情识别已成为其中的一项研究热点,而卷积神经网络、深度信念网络和多层感知器等相关算法在人脸面部表情识别领域的运用最为广泛。面部的表情中包含了太多的信息,轻微的表情变化都会反映出人心理的变化,可想而知如果机器能敏锐地识别人脸中表达的情感该是多么令人兴奋的事。

2. 表情识别数据集

目前,现有的公开的人脸表情数据集比较少,并且数量级比较小。比较有名的广泛用于人脸表情识别系统的数据集Extended Cohn-Kanada (CK+)是由P.Lucy收集的。CK+数据集包含123 个对象的327 个被标记的表情图片序列,共分为正常、生气、蔑视、厌恶、恐惧、开心和伤心七种表情。对于每一个图片序列,只有最后一帧被提供了表情标签,所以共有327 个图像被标记。为了增加数据,我们把每个视频序列的最后三帧图像作为训练样本。这样CK+数据总共被标记的有981 张图片。这个数据库是人脸表情识别中比较流行的一个数据库,很多文章都会用到这个数据做测试,可通过下面的链接下载。

http://www.pitt.edu/~emotion/ck-spread.htm

3.搭建表情识别的模型以及数据集增强

在这里插入图片描述

  • 表情类别:
"angry", "disgust", "scared", "happy", "sad", "surprised", "neutral"

ImageDataGenerator()是一个图片生成器,同时也可以在batch中对数据进行增强,扩充数据集大小(比如进行旋转,变形,归一化等),增强模型的泛化能力。结合前面的模型和数据训练部分的代码如下:

"""
Description: 训练人脸表情识别程序
"""from keras.callbacks import CSVLogger, ModelCheckpoint, EarlyStopping
from keras.callbacks import ReduceLROnPlateau
from keras.preprocessing.image import ImageDataGenerator
from load_and_process import load_fer2013
from load_and_process import preprocess_input
from models.cnn import mini_XCEPTION
from sklearn.model_selection import train_test_split# 参数
batch_size = 32
num_epochs = 10000
input_shape = (48, 48, 1)
validation_split = .2
verbose = 1
num_classes = 7
patience = 50
base_path = 'models/'# 构建模型
model = mini_XCEPTION(input_shape, num_classes)
model.compile(optimizer='adam', # 优化器采用adamloss='categorical_crossentropy', # 多分类的对数损失函数metrics=['accuracy'])
model.summary()# 定义回调函数 Callbacks 用于训练过程
log_file_path = base_path + '_emotion_training.log'
csv_logger = CSVLogger(log_file_path, append=False)
early_stop = EarlyStopping('val_loss', patience=patience)
reduce_lr = ReduceLROnPlateau('val_loss', factor=0.1,patience=int(patience/4),verbose=1)
# 模型位置及命名
trained_models_path = base_path + '_mini_XCEPTION'
model_names = trained_models_path + '.{epoch:02d}-{val_acc:.2f}.hdf5'# 定义模型权重位置、命名等
model_checkpoint = ModelCheckpoint(model_names,'val_loss', verbose=1,save_best_only=True)
callbacks = [model_checkpoint, csv_logger, early_stop, reduce_lr]# 载入数据集
faces, emotions = load_fer2013()
faces = preprocess_input(faces)
num_samples, num_classes = emotions.shape# 划分训练、测试集
xtrain, xtest,ytrain,ytest = train_test_split(faces, emotions,test_size=0.2,shuffle=True)# 图片产生器,在批量中对数据进行增强,扩充数据集大小
data_generator = ImageDataGenerator(featurewise_center=False,featurewise_std_normalization=False,rotation_range=10,width_shift_range=0.1,height_shift_range=0.1,zoom_range=.1,horizontal_flip=True)# 利用数据增强进行训练
model.fit_generator(data_generator.flow(xtrain, ytrain, batch_size),steps_per_epoch=len(xtrain) / batch_size,epochs=num_epochs,verbose=1, callbacks=callbacks,validation_data=(xtest,ytest))
  • 以上代码中设置了训练时的结果输出,在训练结束后会将训练的模型保存为hdf5文件到自己指定的文件夹下,由于数据量大模型的训练时间会比较长,建议使用GPU加速。

4.UI界面

在这里插入图片描述
运行程序须知:请配置Python3.7或python3.8,对应库安装即可,下面库是python3.8

absl-py==0.12.0
astor==0.8.1
cached-property==1.5.2
certifi @ file:///C:/b/abs_85o_6fm0se/croot/certifi_1671487778835/work/certifi
click==7.1.2
cycler==0.10.0
gast==0.4.0
grpcio==1.37.0
h5py==3.2.1
importlib-metadata==4.0.1
imutils==0.5.2
joblib==1.0.1
Keras==2.2.4
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.2
kiwisolver==1.3.1
Markdown==3.3.4
matplotlib==3.2.1
mock==4.0.3
numpy==1.21.6
opencv-python==4.1.0.25
pandas==1.3.5
protobuf==3.15.8
pyparsing==2.4.7
PyQt5==5.12
pyqt5-tools==5.11.3.1.4
PyQt5_sip==4.19.19
python-dateutil==2.8.1
python-dotenv==0.17.0
pytz==2021.1
PyYAML==5.4.1
scikit-learn==0.21.2
scipy==1.6.3
six==1.15.0
tensorboard==1.13.1
tensorflow==1.13.1
tensorflow-estimator==1.13.0
termcolor==1.1.0
typing-extensions==3.7.4.3
Werkzeug==1.0.1
wincertstore==0.2
zipp==3.4.1

5.结束语

以上便是的基于Keras, OpenCv, PyQt5的库实现表情检测系统的部分内容,希望小伙伴能批评指正。关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!


http://www.ppmy.cn/news/1404542.html

相关文章

深度学习:基于PyTorch的模型解释工具Captum

深度学习:基于PyTorch的模型解释工具Captum 引言简介示例安装解释模型的预测解释文本模型情绪分析问答 解释视觉模型特征分析特征消融鲁棒性 解释多模态模型 引言 当我们训练神经网络模型时,我们通常只关注模型的整体性能,例如准确率或损失函…

Ubuntu20.04安装MatlabR2018a

一、安装包 安装包下载链接 提取码:kve2 网上相关教程很多,此处仅作为安装软件记录,方便后续软件重装,大家按需取用。 二、安装 1. 相关文件一览 下载并解压文件后,如下图所示: 2. 挂载镜像并安装 2…

idea、pycharm、datagrip2023版全家桶安装+激活+性能优化

前序 内容:在windows11环境,以idea为例教大家安装、激活idea、pycharm、datagrip2023最新版本全家桶并性能优化 一、下载安装JDK 1、下载JDK 官网链接:https://www.oracle.com/java/technologies/downloads/archive 下载需要注册账户&…

算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣(LeetCode) 描述 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特…

Rust---复合数据类型之字符串(1)

目录 字符串字符串与切片字符串切片字符串操作追加(Push)插入 (Insert)替换 (Replace) 字符串 Rust 在语言级别,只有一种字符串类型: str,它通常是以引用类型出现 &str。虽然语言级别只有上述的 str 类型&#xf…

苍穹外卖06(HttpClient,微信小程序开发,微信登录流程,获取授权码从微信平台获取用户信息)

目录 一、HttpClient 1. 介绍 2. 入门案例 1 导入依赖(已有) 2 GET方式请求 2 POST方式请求 二、微信小程序开发 1. 介绍 2. 准备工作 1 注册小程序获取AppID 注册小程序 完善小程序信息 2 下载并安装开发者工具 3 设置小程序开发者工具(必做) 3. 入门案例 1 小…

Rust编程(四)PackageCrateModule

这一部分的中文教程/文档都很混乱,翻译也五花八门,所以我建议直接看英文官方文档,对于一些名词不要进行翻译,翻译只会让事情更混乱,本篇从实战和实际需求出发,讲解几个名称的关系。 Module & Crate &am…

Android中运动事件的处理

1.目录 目录 1.目录 2.前言 3.程序演示 4.第二种程序示例 5.扩展 2.前言 触摸屏(TouchScreen)和滚动球(TrackBall)是 Android 中除了键盘之外的主要输入设备。如果需要使用触摸屏和滚动球,主要可以通过使用运动事…