功能演示
摘要:
面部表情识别(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:【阿旭算法与机器学习】,回复【表情识别】即可获取下载方式
结束语
以上便是博主开发的关于人脸面部表情识别系统的全部内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!
觉得不错的小伙伴,感谢点赞、关注加收藏哦!