深度学习实战人脸表情识别【源码+模型+PyQt5界面】

您所在的位置:网站首页 人脸定位跟踪软件下载 深度学习实战人脸表情识别【源码+模型+PyQt5界面】

深度学习实战人脸表情识别【源码+模型+PyQt5界面】

2024-07-06 17:23:14| 来源: 网络整理| 查看: 265

在这里插入图片描述

文章目录 研究背景与意义代码下载链接一、效果演示1.1 图像识别1.2 视频识别1.3 摄像头识别 二、技术原理2.1 整体技术流程2.2 常见七种人脸表情2.3 传统人脸定位2.4 深度学习人脸定位2.4.1 MTCNN2.4.2 RetinaFace2.4.3 CenterFace2.4.4 BlazeFace2.4.5 YOLO2.4.6 SSD2.4.7 CascadeCNN 2.5 人脸表情分类2.5.1 RAF-DB数据集介绍2.5.2 FER2013数据集介绍2.5.3 vgg-16人脸表情分类2.5.4 表情分类网络模型训练 代码下载链接参考文献

AI人脸表情识别

研究背景与意义

  人脸表情识别是计算机视觉领域中的一个重要研究方向,它涉及到通过分析人脸图像中的面部表情来理解人的情感状态。这项技术具有广泛的研究背景和实际应用意义:

研究背景:

心理学基础: 人类情感通过面部表情得以传递和理解。Paul Ekman等研究者提出的基础情感模型中包含了六种基本表情(快乐、愤怒、恐惧、悲伤、惊讶、厌恶),这为人脸表情识别研究提供了基本理论依据。

社交交互: 在人与人之间的交往中,情感的传递和理解是非常重要的。人脸表情识别可以用于改善计算机与人类之间的交互体验,例如,通过识别用户的情感状态来自适应性地调整系统的行为。

娱乐与游戏: 在娱乐和游戏领域,人脸表情识别可以用于创造更加逼真的虚拟角色,使其能够根据玩家的情感状态做出相应反应,增强游戏的沉浸感。

研究意义与应用:

情感分析: 人脸表情识别技术可以应用于情感分析,帮助分析人们在特定情境下的情感状态。这在市场调研、广告评估等领域有很大的价值。

心理健康: 人脸表情识别可以辅助心理健康领域,帮助识别抑郁、焦虑等情感障碍的迹象,为临床诊断提供参考。

用户体验改善: 在人机交互中,通过分析用户的面部表情,系统可以实时了解用户的情感状态,从而调整界面设计、推荐内容等,提供更好的用户体验。

虚拟现实与增强现实: 在虚拟现实和增强现实应用中,人脸表情识别可以使虚拟角色更加逼真地模拟真实的情感表现,提升沉浸感。

安全与监控: 人脸表情识别技术可以应用于安全领域,帮助检测人们在监控画面中的情感变化,从而及早发现潜在威胁或异常行为。

总之,人脸表情识别作为一项综合性的研究和应用领域,既有深厚的理论基础,又有广泛的实际应用,对于改善人机交互、促进情感分析、提升虚拟现实体验等方面都有重要的意义。

觉得不错的小伙伴,感谢点赞、关注加收藏哦!更多干货内容持续更新…

代码下载链接

关注博主的G Z H【小蜜蜂视觉】,回复【表情识别】即可获取下载方式

  若您想获得博文中涉及的实现完整全部程序文件(包括测试图片、测试视频、py文件,模型权重文件,调试说明等),代码获取与技术指导,具体见可参考博客与视频,已将所有涉及的文件同时打包到里面,软件安装调试有具体说明,我们有专业的调试技术人员,将远程协助客户调试,具体请看安装调试说明.txt,完整文件截图如下:

在这里插入图片描述

一、效果演示

  本文构建的AI人脸表情识别系统支持图像、视频以及摄像头三种图像输入。

1.1 图像识别

在这里插入图片描述

1.2 视频识别

在这里插入图片描述

1.3 摄像头识别

在这里插入图片描述

二、技术原理 2.1 整体技术流程

  人脸表情识别系统的整体流程通常可以分为以下步骤:人脸检测(定位)、特征提取、分类器构建和情感分类。下面是一个简要的流程:

人脸检测(定位): 这一步骤的目标是从图像中定位出人脸的位置。常用的人脸检测方法包括基于特征的方法(如Haar特征、HOG特征)和基于深度学习的方法(如卷积神经网络)。一旦检测到人脸位置,就可以将人脸区域提取出来进行后续处理。

特征提取: 从人脸图像中提取有关表情的特征,通常会使用各种图像处理和计算机视觉技术。常用的特征提取方法包括局部二值模式(LBP)、梯度直方图(HOG)、人脸关键点等。这些特征能够捕捉人脸的纹理和结构信息,有助于区分不同的表情。

分类器构建: 特征提取后,需要构建一个分类器来将提取到的特征映射到不同的表情类别。在这一步中,您提到了构建VGG分类器,VGG是一个经典的卷积神经网络结构,适用于图像分类任务。您可以将提取到的特征输入VGG网络中,经过训练后得到一个适用于表情分类的分类器。

情感分类: 在分类器构建完成后,将其应用于新的人脸图像。这一步骤涉及将新的图像数据输入到分类器中,然后分类器会输出预测的情感类别。一般来说,每个情感类别都与一种特定的面部表情相对应,如快乐、愤怒、悲伤等。

2.2 常见七种人脸表情

在这里插入图片描述   当涉及到人脸表情识别时,这些词语通常用于描述不同的情感类别,每个情感类别都对应着人脸上不同的表情特征。以下是对每个情感类别的简要介绍:

惊讶(Surprise): 惊讶是一种突然、意外的情感体验,通常由于出现了令人吃惊的事情而引发。人脸的惊讶表情通常表现为眼睛睁得大大的,眉毛上扬,嘴巴张开。

恐惧(Fear): 恐惧是一种对可能的威胁、危险或不安全情境的反应。人脸的恐惧表情可能包括紧闭的眼睛、皱起的眉毛、嘴巴微微张开。

厌恶(Disgust): 厌恶是一种对于令人讨厌、恶心的事物的强烈反感。人脸的厌恶表情通常表现为皱着的鼻子、紧闭的眼睛,嘴巴可能稍微撇嘴。

开心(Happy): 开心是一种愉悦和高兴的情感状态。人脸的开心表情通常包括眼睛眯成一条线,嘴巴向上弯曲,可能伴随着笑声。

悲伤(Sad): 悲伤是一种因失落、伤心或失望而引起的情感体验。人脸的悲伤表情通常表现为眼睛下垂、嘴角下弯,整个表情显得萎靡。

愤怒(Angry): 愤怒是一种对不公平、冲突或受到伤害的强烈情感反应。人脸的愤怒表情可能包括皱起的眉毛、紧闭的嘴唇,以及可能显露出的紧张感。

正常(Neutral): 正常情感状态指的是没有明显情感表达的状态,也被称为中性情感。在这种情况下,人脸通常表现出平静、不带有强烈情感的表情。

2.3 传统人脸定位 # encoding:utf-8 import cv2 import numpy as np # 通过numpy读取中文路径图像 def image_read_from_chinese_path(image_file_name): image_numpy_data = cv2.imdecode(np.fromfile(image_file_name, dtype=np.uint8), 1) #返回numpy的ndarray return image_numpy_data # 运行之前,检查cascade文件路径是否在相应的目录下 face_cascade = cv2.CascadeClassifier('model/haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('model/haarcascade_eye.xml') # 读取图像 img = image_read_from_chinese_path('./images/test2.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度图 # 检测脸部 faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(100, 100), flags=cv2.CASCADE_SCALE_IMAGE) # 标记位置 for (x, y, w, h) in faces: img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = gray[y: y + h, x: x + w] roi_color = img[y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 0, 255), 2) label = f'OpenCV Haar Detected {str(len(faces))} faces' cv2.putText(img, label, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 1) cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows()

  如果新同学不知道如何配置环境,可以参考博主写的【Anaconda3与PyCharm安装配置保姆教程】

  其中,函数image_read_from_chinese_path函数主要是解决cv2无法读取中文路径图像的解决方案,具体可以参考博主写的文章【opencv-python[cv2]读取中文路径图像】

2.4 深度学习人脸定位

  深度学习人脸定位算法的一般流程包括:首先对输入图像进行预处理,包括缩放、裁剪等操作,然后使用卷积神经网络(CNN)提取特征,接着使用回归器或分类器对得到的特征进行分析,最终输出人脸的位置和大小。

2.4.1 MTCNN

  MTCNN (Multi-task Cascaded Convolutional Networks)是由中国科学院提出的一种多任务级联卷积神经网络,它可以同时进行人脸检测、关键点定位和姿态估计等任务,具有精度高、速度快、能够处理多个尺度的人脸等优点。

  具体说明与代码实现可参考博主写的教程MTCNN人脸检测算法实现(python)

2.4.2 RetinaFace

  RetinaFace 是由中国香港城市大学提出的一种准确率更高的人脸检测与关键点定位算法,其使用了可变形卷积网络(Deformable Convolutional Network)来实现更加准确的定位,RetinaFace 特别适用于小尺度人脸的定位。

2.4.3 CenterFace

  CenterFace 是由华为提出的一种轻量级人脸检测与关键点定位算法,该算法只需要 1.5MB 的模型大小,可以在移动端实时运行,CenterFace 采用了 Hourglass 模型和特征金字塔网络(Feature Pyramid Network)来实现高精度的人脸定位。

2.4.4 BlazeFace

  BlazeFace 是由 Google 提出的一种极其轻量级的人脸检测算法,它的模型大小只有 2MB 左右,可以在移动端实时运行,BlazeFace 采用了创新的 anchor-free 检测方式,可以实现更快速度的人脸定位。

2.4.5 YOLO

  YOLO 是一种端到端的实时目标检测算法,可以同时对多个目标进行检测和定位。由于 YOLO 可以将整张图像划分为网格,并在每个网格上预测目标的类别和边界框,因此它通常比其他基于区域的目标检测算法更快。

2.4.6 SSD

  SSD 是一种基于卷积神经网络的单步目标检测算法,可以在一次前向传播中完成对多个目标的检测,相对于 Faster R-CNN 等基于区域的检测算法,SSD 更加简单与高效。

2.4.7 CascadeCNN

  CascadeCNN 是由微软亚洲研究院提出的级联卷积神经网络,能够在不牺牲性能的情况下大幅减小网络规模和计算量。CascadeCNN 的结构是由多个级联阶段组成,每个阶段包含多个级联卷积层和池化层,可以有效地提高人脸定位的精确度和稳定性。

2.5 人脸表情分类 2.5.1 RAF-DB数据集介绍

  RAF-DB 全称 Real-world Affective Faces,是一个大规模面部表情数据集。该数据集由 ​​29,672​​​ 张多样化的面部图像组成,由 40 名标记者对图像标注基本或复合表情。

  此外每张图像还包括 5 个精准 landmark location、37 个自动 landmark location、bounding box、race、age range 以及gender attribute 标注。

  该数据集中的图像人脸在年龄、性别和种族、头部姿势、照明条件、遮挡物(如眼镜、面部毛发或自我遮挡)、后期处理操作(如各种滤镜和特效)等方面具有极大差异。

2.5.2 FER2013数据集介绍

  FER2013 全称 Facial Expression Recognition 2013 Dataset,该数据集包含大约 30,000 张不同表情的面部 RGB 图像,图像的尺寸均为 48×48 像素。

  该数据集中的主要标注可分为 7 种类型:0 = 愤怒,1 = 厌恶,2 = 恐惧,3 = 快乐,4 = 悲伤,5 = 惊奇,6 = 中立。其中厌恶表情的图像数量最少,仅有 600 张,而其他每个类型都有近 5,000 个样本。 FER2013默认提供的csv格式文件,如下代码是csv转png图像的python脚本

import numpy as np import pandas as pd from PIL import Image from tqdm import tqdm import os # convert string to integer def atoi(s): n = 0 for i in s: n = n*10 + ord(i) - ord("0") return n # making folders outer_names = ['test','train'] inner_names = ['angry', 'disgusted', 'fearful', 'happy', 'sad', 'surprised', 'neutral'] os.makedirs('data', exist_ok=True) for outer_name in outer_names: os.makedirs(os.path.join('data',outer_name), exist_ok=True) for inner_name in inner_names: os.makedirs(os.path.join('data',outer_name,inner_name), exist_ok=True) # to keep count of each category angry = 0 disgusted = 0 fearful = 0 happy = 0 sad = 0 surprised = 0 neutral = 0 angry_test = 0 disgusted_test = 0 fearful_test = 0 happy_test = 0 sad_test = 0 surprised_test = 0 neutral_test = 0 df = pd.read_csv('./fer2013.csv') mat = np.zeros((48,48),dtype=np.uint8) print("Saving images...") # read the csv file line by line for i in tqdm(range(len(df))): txt = df['pixels'][i] words = txt.split() # the image size is 48x48 for j in range(2304): xind = j // 48 yind = j % 48 mat[xind][yind] = atoi(words[j]) img = Image.fromarray(mat) # train if i


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭