前言
人类的面部表情变化可以传达出其内心的情绪变化,表情是人类内心世界的真实写照。目前最常见的是将人类的表情定义为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
开发了一个简洁界面的人脸面部表情识别系统。也就是第二部分介绍的内容。