人脸表情识别Facial Expression Recognition基于Python3和Keras2(TensorFlow后端)

news2024/10/8 22:59:45

人脸表情识别项目是一个结合了计算机视觉和深度学习技术的高级应用,主要用于分析和理解人类面部表情所传达的情感状态。这样的系统可以用于多种场景,比如情绪分析、用户交互、市场调研、医疗诊断以及人机接口等领域。

一个典型的人脸表情识别项目可以分为以下几个步骤:

  1. 数据收集: 首先需要一个包含各种表情的大型数据集。这些数据集通常包含成千上万张标注了不同表情类别的面部图像。一些常用的公开数据集有FER2013、JAFFE和CK+等。

  2. 数据预处理: 对收集到的数据进行清洗、标准化和增强。这可能包括调整图像大小、灰度化、归一化像素值、数据扩增等步骤。

  3. 人脸检测: 在实时视频流或静态图像中检测出人脸的位置。这通常使用如SSD(Single Shot MultiBox Detector)、MTCNN(Multi-task Cascaded Convolutional Networks)或其他人脸检测算法来完成。

  4. 特征提取: 从检测到的人脸区域中提取有助于表情识别的特征。早期的方法可能使用手工设计的特征,如LBP(Local Binary Patterns)或HOG(Histogram of Oriented Gradients),但现代方法更倾向于使用深度学习模型直接从原始图像中学习特征。

  5. 模型训练: 使用深度学习框架(如TensorFlow或PyTorch)训练一个神经网络模型。模型架构可能包括卷积神经网络(CNNs),如VGG、ResNet或MobileNet等。训练过程中,模型会学习到如何将输入的面部图像映射到特定的表情类别。

  6. 模型评估: 在独立的测试集上评估模型的性能,确保它能够准确地识别未见过的面部表情。

  7. 部署和优化: 将训练好的模型部署到实际应用中,可能是在移动设备、服务器或嵌入式系统上。此外,可能还需要进行性能优化,以确保实时性或低功耗需求。

  8. UI/UX设计: 如果项目包含用户界面,则需要设计直观的UI来展示识别结果,使用户能够轻松理解和使用系统。

  9. 持续监控和更新: 部署后,系统应持续监测其性能,必要时进行重新训练或参数调优,以适应新的数据或环境变化。

以上步骤构成了一个完整的人脸表情识别项目的生命周期,从概念验证到产品化,每一阶段都需要细致的技术考虑和工程实践。

本项目简介:

简介

使用卷积神经网络构建整个系统,在尝试了Gabor、LBP等传统人脸特征提取方式基础上,深度模型效果显著。在FER2013、JAFFE和CK+三个表情识别数据集上进行模型评估。

环境部署

基于Python3和Keras2(TensorFlow后端),具体依赖安装如下(推荐使用conda虚拟环境)。

git clone https://github.com/luanshiyinyang/FacialExpressionRecognition.git
cd FacialExpressionRecognition
conda create -n FER python=3.6 -y
conda activate FER
conda install cudatoolkit=10.1 -y
conda install cudnn=7.6.5 -y
pip install -r requirements.txt

数据准备

数据集和预训练模型均已经上传到百度网盘。下载后将model.zip移动到根目录下的models文件夹下并解压得到一个*.h5的模型参数文件,将data.zip移动到根目录下的dataset文件夹下并解压得到包含多个数据集压缩文件,均解压即可得到包含图像的数据集。

项目说明

传统方法

  • 数据预处理
    • 图片降噪
    • 人脸检测(HAAR分类器检测(opencv))
  • 特征工程
    • 人脸特征提取
      • LBP
      • Gabor
  • 分类器
    • SVM

深度方法

  • 人脸检测
    • HAAR分类器
    • MTCNN(效果更好)
  • 卷积神经网络
    • 用于特征提取+分类

网络设计

使用经典的卷积神经网络,模型的构建主要参考2018年CVPR几篇论文以及谷歌的Going Deeper设计如下网络结构,输入层后加入(1,1)卷积层增加非线性表示且模型层次较浅,参数较少(大量参数集中在全连接层)。

模型训练

主要在FER2013、JAFFE、CK+上进行训练,JAFFE给出的是半身图因此做了人脸检测。最后在FER2013上Pub Test和Pri Test均达到67%左右准确率(该数据集爬虫采集存在标签错误、水印、动画图片等问题),JAFFE和CK+5折交叉验证均达到99%左右准确率(这两个数据集为实验室采集,较为准确标准)。

执行下面的命令将在指定的数据集(fer2013或jaffe或ck+)上按照指定的batch_size训练指定的轮次。训练会生成对应的可视化训练过程,下图为在三个数据集上训练过程的共同绘图。

python src/train.py --dataset fer2013 --epochs 300 --batch_size 32

模型应用

与传统方法相比,卷积神经网络表现更好,使用该模型构建识别系统,提供GUI界面和摄像头实时检测(摄像必须保证补光足够)。预测时对一张图片进行水平翻转、偏转15度、平移等增广得到多个概率分布,将这些概率分布加权求和得到最后的概率分布,此时概率最大的作为标签(也就是使用了推理数据增强)。

GUI界面

注意,GUI界面预测只显示最可能是人脸的那个脸表情,但是对所有检测到的人脸都会框定预测结果并在图片上标记,标记后的图片在output目录下。

执行下面的命令即可打开GUI程序,该程序依赖PyQT设计,在一个测试图片(来源于网络)上进行测试效果如下图。

python src/gui.py

 

上图的GUI反馈的同时,会对图片上每个人脸进行检测并表情识别,处理后如下图。

 

实时检测

实时检测基于Opencv进行设计,旨在用摄像头对实时视频流进行预测,同时考虑到有些人的反馈,当没有摄像头想通过视频进行测试则修改命令行参数即可。

使用下面的命令会打开摄像头进行实时检测(ESC键退出),若要指定视频进行进行检测,则使用下面的第二个命令。

python src/recognition_camera.py

 

python src/recognition_camera.py --source 1 --video_path 视频绝对路径或者相对于该项目的根目录的相对路径

下图是动态演示的在某个视频的识别结果。 

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

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

相关文章

开源项目的发展趋势之托管平台

引言 回溯至十五年前的求学时光,当我们初涉编程的浩瀚海洋,面对程序设计这一崭新挑战,曾渴望能有一份现成的源码作为启航的灯塔。然而,在那个时代,除了有限的SDK资源外,寻觅到高质量、可借鉴的源代码并非易…

如何给CAD文件加密丨五种超级简单的CAD图纸加密方法

CAD图纸作为企业核心竞争力的体现,其安全性直接关系到企业的生产效率和市场竞争力。一旦图纸被泄露,竞争对手可能会迅速模仿或改进产品,从而抢占市场份额。此外,图纸的非法获取还可能涉及知识产权纠纷,给企业带来法律风…

MES 功能模块

MES系统(Manufacturing Execution System,生产执行系统)是制造业企业的关键管理系统之一,它通过集成生产计划、工艺流程、物料管理和生产过程数据等,实现了对生产和制造过程的全面管理和监控。MES系统的功能模块主要包…

FPGA-Verilog-Vivado-软件使用

这里写目录标题 1 软件配置2 FPGA-7000使用2.1 运行启动方式 1 软件配置 编辑器绑定为Vscode,粘贴VS code运行文件的目录,后缀参数保持不变: 如: D:/Users/xdwu/AppData/Local/Programs/Microsoft VS Code/Code.exe [file name]…

vscode远程调试python代码

第一步: vscode设置 vscode也支持通过remote的方法连接我们在命令行中发起的debug server。首先我们要配置一下debug的config。 还是点击VSCode侧边栏的“Run and Debug”(运行和调试),单击"create a lauch.json file" 第二步&a…

Java--static详解

1.static静态的意义,加在属性面前就为静态属性;加在方法面前就为静态方法 2.如图,定义了一个静态属性age,一个非静态属性score; 输出语句一共四句,其中第三句报错,由于静态和非静态的区别&…

软考:软件设计师 — 2.操作系统

二. 操作系统 1. 操作系统概念 (1)操作系统的作用 操作系统是计算机硬件之上的第一层软件系统。 操作系统通常用来: 管理系统的硬件、软件、数据资源。控制程序运行。人机之间的接口。应用软件与硬件之间的接口。 可概括为: …

7.11 cf div3 C

Problem - C - Codeforces 操作 根据给定的索引数组ind和字符串c,按照一定的顺序修改字符串s中对应位置的字符。具体来说,第i次操作会修改s中索引为indi的位置的字符,将其设置为ci。 将c字符串按照从小到大排序,替换ind数组所表…

迅为RK3588S开发板广泛用于边缘技术,人工智能,智能家居,智慧零售,智能网关等

性能强 iTOP-3588S开发板采用瑞芯微RK3588S处理器,是全新一代AloT高端应用芯片,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构主频高达2.4GHZ,8GB内存,32GBEMMC。 四核心架构GPU内置GPU可以完全兼容0penGLES1.1…

vscode c++可以找到声明却无法自动补全

这个问题折磨了我将近一个月,今天终于被解决了,特此记录 情景再现 事情的起因是我在学习华为的Ascend C算子,需要编写C代码。关于怎么下载库文件怎么编译之类的不是本文的重点,重点是自动补全。 我已经拿到库文件了&#xff0c…

动漫3d模型设计需要注意什么?---模大狮模型网

设计动漫3D模型时,有几个方面需要注意: 保持角色风格一致性: 动漫通常有独特的风格和美学,设计时要确保模型与所代表的角色或作品的整体风格相符。注意保持线条和比例的一致性,使模型能够忠实地呈现原作的特点。 注重…

论文降痕降重全攻略:从技巧到工具,助你轻松应对学术挑战

AIGC降重工具:快速降低论文查重率 高查重率是许多毕业生的困扰。通常,高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法,如修改文本和增添原创内容,虽必要但耗时且成效不一。 鉴于此,应用AI工具进…

VMWare桥接模式上网

1. 前提条件: 1) 宿主机 可以上网 2)虚拟机网卡配置桥接模式 3)虚拟机设置ip和宿主机在同一网段,配置网关和宿主机一致 4)虚拟机网卡配置DNS 具体如下: 5)虚拟机和宿主机可以相互ping 通2. 记录问题解决步骤

@RequiredArgsConstructor实现构造器注入

RequiredArgsConstructor实现构造器注入 1. Autowired 和 Resource 注解 Autowired Autowired 是 Spring 框架提供的注解,用于自动装配依赖。可以用于字段、构造函数和 setter 方法。 Autowired private ISysUserService userService;Resource Resource 是 Jav…

Python-PLAXIS自动化建模技术与典型岩土工程

原文链接:Python-PLAXIS自动化建模技术与典型岩土工程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608744&idx3&sn41d9fd9ab6e792850000c4990b3f8c65&chksmfa82684fcdf5e15990e4681f032ce9b295a9e2071051218f550a7e63e4ebedee29559d56…

Linux下vim工具应用

1.简介 Vim(Vi IMproved)是一种高度可配置的文本编辑器,用于有效地创建和更改任何类型的文本。它是从vi发展而来,vi是Unix和类Unix系统上最初的文本编辑器之一。Vim被设计为程序员和文本编辑的爱好者使用,它以其强大的…

广度优先(BFS)

先看一道简单的题&#xff0c;迷宫问题&#xff1a; 洛谷P1746 离开中山路&#xff1a;P1746 离开中山路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include<cstring> #include<queue> #include <utility> #define N 1002 …

Jenkins设置开机自启(以war包方式启动jenkins)

配置环境&#xff1a;Centos7.6/Jenkins 2.452.2/jdk-21.0.3 jenkins启动命令&#xff1a; nohup java -jar jenkins.war > /dev/null 2>&1 & 1、创建sh脚本文件 # jenkins.war包&#xff0c;放在了/root/software目录 cd /root/software vim jenkins-start.sh …

Matter Open Day:全球生态首秀,中国力量引领智能家居新纪元

▲ 会场全景 7月8日下午&#xff0c;广州南丰朗豪大酒店内人声鼎沸&#xff0c;由连接标准联盟和连接标准联盟‍中国成员组(CMGC)共同主办的首届 Matter Open Day 活动圆满落下帷幕。 此次盛会不仅标志着智能家居领域的一次重要聚首&#xff0c;更见证了连接标准联盟(原Zigbee…

用Python编写一个模拟usb摄像头的程序

昨天有个朋友找我要刷点政府的再就业的视频课&#xff0c;说是就是用浏览器打开固定的网站&#xff0c;然后用身份证号码登录&#xff0c;然后播放里面的视频&#xff0c;不定时的网页会通过usb摄像头拍照做人脸识别&#xff0c;就是这么一个简单的要求&#xff0c;叫我给想想办…