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

功能演示

请添加图片描述

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

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


前言

人类的面部表情变化可以传达出其内心的情绪变化,表情是人类内心世界的真实写照。目前最常见的是将人类的表情定义为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:【阿旭算法与机器学习】,回复【表情识别】即可获取下载方式


结束语

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

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

猜你喜欢

转载自blog.csdn.net/qq_42589613/article/details/131413839