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

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

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

  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.mzph.cn/web/41776.shtml

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

相关文章

端到端自动驾驶新突破:Nvidia提出全并行PARA-Drive,斩获CVPR挑战赛冠军

论文标题: PARA-Drive: Parallelized Architecture for Real-time Autonomous Driving 论文作者: Xinshuo Weng, Boris Ivanovic, Yan Wang, Yue Wang, Marco Pavone 导读: 本文系统分析了自动驾驶高级架构的设计空间,提出了关…

提升内容分享类营销效果的秘籍大公开

今天有丰富实战经验的“蚓链数字化营销平台”来给大家分享一些能有效提高内容分享类数字化营销方案中用户的参与度和转化率的方法。 创造有价值且引人入胜的内容 一定要让分享的内容实用、有趣或者独特,满足大家的需求和兴趣。多运用生动的故事、案例和数据来支持观…

深入分析 Android BroadcastReceiver (十)(完)

文章目录 深入分析 Android BroadcastReceiver (十)1. 深入理解 Android 广播机制的高级应用与实践1.1 高级应用1.1.1 示例:广播启动服务1.1.2 示例:数据变化通知1.1.3 示例:下载完成通知 1.2 实践建议1.2.1 设置权限1.2.2 动态注册和注销广播…

探索企业信用巅峰:3A企业认证的魅力与价值

在现代商业环境中,企业的信用和信誉是其发展的核心要素之一。3A企业认证作为信用评级的最高等级,正在吸引越来越多企业的关注。究竟什么是3A企业认证?它为什么对企业如此重要?本文将深入探讨3A企业认证的独特魅力和巨大价值。 3A企…

0Day漏洞防御篇:GeoServer CVE-2024-36401远程代码执行漏洞

GeoServer是一个用Java编写的开源软件服务器,允许用户共享和编辑地理空间数据。它为提供交互操作性而设计,使用开放标准发布来自任何主要空间数据源的数据。GeoServer存在远程代码执行漏洞(CVE-2024-36401),未经身份认…

Aigtek高压放大器指标有哪些要求和标准

高压放大器是一类关键的电子设备,用于放大电信号并提供强大的输出。在不同的应用领域,高压放大器可能有不同的要求和标准。以下是一些常见的高压放大器指标要求和标准,以确保其性能和可靠性: 1.幅度增益和频率响应 高压放大器的主…

人大金仓携手中国一汽引领国产数据库行业新浪潮

在国产化政策的推动下,人大金仓携手中国一汽联合开发更贴近汽车产业特定需求的数据库功能和组件。从2023年2月至今,人大金仓已累计部署690套数据库,适配应用系统170个,支撑中国一汽20多个核心系统和重要系统。目前,中国一汽在国内企业数据库国产化替换率遥遥领先。此次合作为国…

猫咪健康新选择!福派斯鲜肉猫粮里的果蔬纤维大揭秘

你们是不是对福派斯鲜肉猫粮中那些丰富的果蔬粗纤维特别好奇呢?🤔 其实,这些看似简单的粗纤维,对猫咪的健康可是大有裨益的! 粗纤维在猫粮中起到多种重要作用,并且对猫咪的健康和消化系统有着显著的影响。以…

乡村振兴指数与其30个原始变量数据(Shp/Dta/Excel格式,2000-2022年)

数据简介:这份数据是我国各地级市乡村振兴指数与其30各原始变量数据并对其进行地图可视化表达。城镇化是当今中国社会经济发展的必由之路。当前我国城镇化处于发展的关键时期,但城镇化发展的加快却是一把双刃剑,为何要如此形容呢?因为当前城…

职升网:一级注册计量师就业方向如何?

首先我们要知道,一级注册计量师可以聘为工程师,可以负责计量基准和标准的量值传递工作。它可以从事一下7个方面的工作: 1.负责制定计量管理制度、工作计划、并组织实施; 2.建设期参与设计工程等计量方面的工作,编制计…

红黑树模拟实现

目录 概念 性质 节点定义 红黑树的插入 完整代码 概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条…

充电桩开源平台,开发流程有图有工具

慧哥充电桩开源平台产品研发流程是确保产品从概念阶段到市场推广阶段的有序进行的关键。以下是对您给出的步骤的详细解释和建议: 设计业务流程: 在这一步,团队需要确定产品的核心功能、目标用户以及如何满足用户需求。进行市场调研,了解竞争…

PostMan Error:Maximum response size reached

一、问题描述 用postman本地测试,restful api接口导出文件,文件大小为190M,服务没问题,总是在导出时,抛出:Error:Maximum response size reached。开始以为是服务相应文件过大或者相应时间超时导致的。其实…

双向链表 -- 详细理解和实现

欢迎光顾我的homepage 前言 双向链表是一种带头双向循环的链表。在双向链表中,首先存在着一个头结点;其次每个节点有指向下一个节点的指针next 和指向上一个节点的指针prev &#xff1b…

Trimble realworks 2024.02 中文激活版获取License下载软件

Trimble realworks 2024 是领先的3D点云和2D图像处理解决方案,使用可您提供了一组用于处理的工具,以便为您的应用程序(或项目)获取必要的信息。此处理可以分为三种模式,在注册中,您可以注册相对于其他扫描和…

通信协议_Modbus协议简介

概念介绍 Modbus协议:一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De f…

大舍传媒:如何在海外新闻媒体发稿报道摩洛哥?

引言 作为媒体行业的专家,我将分享一些关于在海外新闻媒体发稿报道摩洛哥的干货教程。本教程将带您深入了解三个重要的新闻媒体平台:Mediterranean News、Morocco News和North African News。 地中海Mediterranean News Mediterranean News是一个知名…

合合信息大模型“加速器”重磅上线

大模型技术的发展和应用,预示着更加智能化、个性化未来的到来。如果将大模型比喻为正在疾驰的科技列车,语料便是珍贵的“燃料”。本次世界人工智能大会期间,合合信息为大模型打造的“加速器”解决方案备受关注。 在大模型训练的上游阶段&…

【计算机毕业设计】021基于weixin小程序微信点餐

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Python学习中使用循环(for, while)

在Python编程语言中,循环是一个非常重要的概念,可以帮助我们在代码中重复执行某些操作。Python支持两种主要的循环结构:for 循环和 while 循环。 1. for 循环 for 循环用于遍历一个序列(如列表、元组、字符串)或其他…