基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】

news2025/2/21 22:56:38

功能演示

请添加图片描述

摘要:面部表情识别(Facial Expression Recognition)是一种通过技术手段识别人物图像中人脸面部表情的技术。本文详细介绍了其实现的技术原理,同时给出完整的Python实现代码、训练好的深度学习模型,并且通过PyQT实现了UI界面,更方便进行功能的展示。该表情识别系统可通过图片视频摄像头3种方式进行表情识别。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习,完整的代码资源文件获取方式见文末。

文章目录

  • 功能演示
  • 前言
  • 一、软件核心功能介绍及效果演示
  • 二、人脸面部表情识别的基本原理
    • 1.基本原理
  • 【获取方式】
  • 结束语

点击跳转至文末《完整相关文件及源码》获取


前言

人类的面部表情变化可以传达出其内心的情绪变化,表情是人类内心世界的真实写照。目前最常见的是将人类的表情定义为7中,分别是:悲伤害怕厌恶高兴生气惊讶中立。这也组成了现今的人脸表情识别研究中的七种基础面部表情。

由于不同的面部表情,可以反映出在不同情景下人们的情绪变化以及心理变化,因此面部表情的识别对于研究人类行为和心理活动,具有十分重要的研究意义和实际应用价值。现如今,面部表情识别主要使用计算机对人类面部表情进行分析识别,从而分析认得情绪变化,这在人机交互、社交网络分析、远程医疗以及刑侦监测等方面都具有重要意义。

博主根据深度学习网络模型,开发了一款简易的人脸面部表情识别系统,可以通过图片视频摄像头3种方式进行人脸面部表情识别,并且展示识别结果。可以识别悲伤害怕厌恶高兴生气惊讶中立这7种常见表情,感兴趣的小伙伴可以自己试试。

觉得不错的小伙伴,感谢点赞、关注加收藏!如果大家有任何建议或意见,欢迎在评论区留言交流!

界面如下图:
在这里插入图片描述

一、软件核心功能介绍及效果演示

(1)图片表情识别
点击打开图片按钮,选择需要识别的图片即可,操作演示如下:
在这里插入图片描述
(2)视频面部表情识别
点击打开视频按钮,选择需要识别的视频即可,操作演示如下:
在这里插入图片描述
(3)摄像头面部表情识别
点击打开摄像头按钮,即可开启摄像头,再次点击该按钮,会关闭摄像头,操作演示如下:
在这里插入图片描述

二、人脸面部表情识别的基本原理

1.基本原理

人脸面部表情识别通常可以划分为四个步骤:包括图像获取人脸检测面部图像预处理表情分类。其中,人脸检测,面部图像预处理(脸部特征提取)和面部表情分类是面部表情识别的三个关键环节。面部表情识别的基本流程如下图所示:
在这里插入图片描述
我们首先可以通过比较常用的人脸检测库face_recognition,来实现人脸区域的检测,并画在图片上。核心代码如下:

image_path = 'TestImages/2.jpg'
image = cv2.imread(image_path)
face_locations = face_recognition.face_locations(image)
num = len(face_locations)
face = []
if num:
    for face_location in face_locations:
        top, right, bottom, left = face_location
        face.append(image[top:bottom, left:right])
        image = cv2.rectangle(image,(left, top), (right, bottom), (50, 50, 250),3)

在这里插入图片描述
检测出的上述人脸区域后,然后将人脸区域提取出来,并转化为人脸检测模型需要的48*48大小。传入模型进行人脸表情检测,取概率最大的分类,并将表情识别结果画在图片上,核心代码如下:

# 加载训练好的DenseNet121深度学习模型
inputs = keras.Input(shape=(48, 48, 1), batch_size=64)
x = create_dense_net(7, inputs, include_top=True, depth=121, nb_dense_block=4, growth_rate=16, nb_filter=-1,
                     nb_layers_per_block=[6, 12, 32, 32], bottleneck=True, reduction=0.5, dropout_rate=0.2,
                     activation='softmax')
model = tf.keras.Model(inputs, x, name='densenet121')
filepath = 'models/DenseNet121.h5'
model.load_weights(filepath)

# 进行人脸表情识别
image = cv2.imread(image_path)
frame, faces, locations = face_detect(image)
if faces is not None:
    for i in range(len(faces)):
        top, right, bottom, left = locations[i]
        face = cv2.cvtColor(faces[i], cv2.COLOR_BGR2GRAY)
        face = cv2.resize(face, (48, 48))
        face = face / 255.0
        num = np.argmax(model.predict(np.reshape(face, (-1, 48, 48, 1))))
        label = labeldict[num]
        frame = cv2.putText(frame, label, (left, top-10), cv2.FONT_ITALIC, 0.8, (0, 0, 250), 2,
                            cv2.LINE_AA)
cv2.imshow('frame',frame)
cv2.waitKey(0)

在这里插入图片描述
基于以上内容,博主基于python+ pyqt5开发了一个简洁界面的人脸面部表情识别系统。也就是第二部分介绍的内容。
关于该人脸面部表情识别系统的涉及到的完整源码、UI界面代码等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。


【获取方式】

关注下方名片G-Z-H:【阿旭算法与机器学习】,回复【表情识别】即可获取下载方式

本文涉及到的完整全部程序文件:包括python源码、UI文件等(见下图),获取方式见文末:
在这里插入图片描述

注意:该代码采用Pycharm+Python3.8开发,运行界面的主程序为MainProgram.py,图片测试脚本可运行imgTest.py,摄像头测试脚本可运行cameraTest.py。为确保程序顺利运行,请按照程序环境配置说明.txt配置软件运行所需环境。

关注下方名片GZH:【阿旭算法与机器学习】,回复【表情识别】即可获取下载方式


结束语

以上便是博主开发的关于人脸面部表情识别系统的全部内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691228.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中的四种条件语句结构和应用举例

Python中的四种条件语句结构和应用举例 条件语句是计算机实现分类高效执行计算的重要方法。在许多计算机语言编写(C语言,Java语言,matlab语言等)的时候,都有涉及条件语句的部分,本文对Python语言中的条件语…

Docker操作镜像与容器常用命令

Docker操作镜像与容器的常用命令 文章目录 Docker操作镜像与容器的常用命令前言1、镜像相关命令1.1 查看镜像1.2 搜索镜像1.3 拉取镜像1.4 删除镜像 2 容器相关命令2.1 查看容器2.2 创建与启动容器2.3 停止与启动容器2.4 文件拷贝2.5 目录挂载2.6 查看容器IP地址2.7 删除容器 总…

金山云联合MiniMax推出MaaS互信推理专区方案 解决大模型与数据互信难题

作为人工智能领域颇具里程碑式的进展,ChatGPT以其惊艳的表现,迅速掀起了行业热潮,使得大模型成为当下最为炙手可热的技术方向之一。但在大模型落地过程中,如何既能保障大模型使用方的数据安全,又能保护大模型提供方的部…

C编译过程 以及 ELF文件(学习笔记)

C编译过程 一个用C语言编写的高级语言程序是从编写到打包、再到编译执行的基本过程,我们知道在CPU上执行的是低级别的机器语言,从高级语言到低级别的机器语言肯定是要经过翻译过程,这个过程大体的过程如下图所示: 在Unix系统中,从…

基于simulink的四节串联锂电池的主动均衡算法(PID控制)

电动汽车往往搭载上百节单体电池作为能量来源,如此多的电池聚在一起其性能差异往往造成电量的不一致。不均衡性会随着电池的充放电循环而不断加剧,致使单体容量快速衰减,最终个别单体的失效就会影响整个电池组乃至用电系统的工作。常见的均衡方式可分为主动均衡和被…

亚马逊云科技“专库专用”模式,可有效提高数据库的性能和效率

近日,全球数据库市场发生了一件令人瞩目的事件,根据Gartner的数据,我们发现亚马逊云科技作为一个纯云厂商,夺得了2022年全球数据库领导者的桂冠,占据全球市场的25.3%份额。 云原生数据库的发展方向:与数据分…

深度剖析PostgreSQL慢SQL:原因与优化方案大揭秘

​ PostgreSQL 是一种成熟稳定的关系型数据库管理系统,它支持高级的数据类型、索引以及查询语言。但是,尽管 PostgreSQL 在性能和可靠性方面表现出色,但偶尔也会出现慢 SQL 的情况。本文将探讨 PostgreSQL 慢 SQL 的原因和优化方案&#xff0…

Qt安卓AMD64-v8a配置OpenCV4.5.2

1.OpenCV官方网下载OpenCV的安卓平台SDK并解压 在工程的配置pro文件中添加opencv包含路径INCLUDEPATH与库LIBS unix {ANDROID_OPENCV = C:\Users\dev2\Desktop\OpenCV-android-sdk\sdk\nativeINCLUDEPATH += $$ANDROID_OPENCV/jni/include/opencv2 \$$ANDROID_OPENCV/jni/in…

进行网站建设,开启数字化时代的新篇章

在当今数字化时代,拥有一个个人或企业网站已经成为了非常普遍的需求。网站可以帮助你展示自己或品牌的形象、提供各种服务和信息,甚至是进行在线销售等,这些都是传统媒体所无法比拟的优势。 网站建设是什么? 网站建设是指在互联…

LaravelPHP笔记-转json后中文变成\u数据

用 PHP 的 json_encode 来处理中文的时候,中文都会被编码,变成不可读的,类似”\u***” 的格式,如果想汉字不进行转码,可用如下方法: 在json_encode第二个参数添加JSON_UNESCAPED_UNICODE。 如下代码&…

dsl语句查询elasticsearch集群节点分布和资源使用情况

查询语句如下(本文是直接在kibana里面执行的哦) GET _cat/nodes?v执行结果 这样就可以很直观的看到,es部署在了哪些节点上,以及各节点资源分布使用

【Ant Design of Vue】自定义SVG图标的使用

一、需求 由于Ant Design Vue提供的 Icon 图标满足不了项目的需求(需求图标未提供),所以我们使用了自定义的 SVG 图标 二、技术栈 前端框架:vue2 Vue Cli前端UI框架:Ant Design of Vue(v1.7.8&#xff…

Python自动化测试,Excel数据驱动读取 xlrd实战(超详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 xlrd模块安装 pi…

JS逆向系列之猿人学爬虫第16题-window蜜罐

文章目录 目标网站参数定位与加密逻辑分析补全后的jspython调用测试往期逆向文章推荐目标网站 https://match.yuanrenxue.cn/match/16参数定位与加密逻辑分析 t就是时间戳,m是我们主要逆向的参数,跟栈进入window

mysql之mha高可用

目录 一、MHA的相关知识 1)什么是 MHA 2)MHA 的组成 (1)MHA Node(数据节点) (2)MHA Manager(管理节点) 3)MHA 的特点 二、MHA的一主两从部…

Java中创建对象的方式有几种?

使用new关键字 这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。 Student s new Student();2.使用Class类的newInstance方法(反射) 我们也可以使用Class类的newInstance方法创建对象…

必要条件与充分条件

关于对充分条件、必要条件、充要条件的最简单扼要的理解: 充分条件:有A就一定有B,则A是B的充分条件; 必要条件:无A就一定无B,则A是B的必要条件; 充要条件:有A就一定有B&#xff0…

黑客是怎样练成的

网学黑客技术的人越来越多了,不少人都不知道该怎么学,今天就来详细的说一说黑客是如何炼成的。 首先,什么是黑客? 黑客 :泛指擅长IT技术的电脑高手 黑客一词,源自英文Hacker,早期其实就是一群…

6月27日亚马逊云科技中国峰会议程抢先看

大会亮点预览 ● 汇聚百余位重磅嘉宾共同探路云端 ● 技术分享与发布 赋能数字化转型创新 ● 共同探索行业转型之道 驱动创新价值 ● 聚焦前沿科技 云计算年度热点话题盘点 ● 热点主题展示 打造数字科技创新型展区 ● 开发者专属版块 学玩一体 高效进阶 ● Amazon De…

海外网红营销潜藏的风险:如何规避失败的可能性?

在数字化时代,海外网红营销已成为品牌推广的重要策略。然而,不少企业在海外网红营销中遭遇失败,导致推广效果不佳甚至适得其反。本文Nox聚星将和大家探讨海外网红营销失败的原因,并详细分析其中的关键问题。 1、文化差异 海外网红…