人脸表情识别系统的设计与实现(含UI界面,有完整代码)

这是之前本科做的毕设,当时使用的是keras搭建了一个简单的神经网络作为入门实现了在fer2013人脸表情数据集上的表情分类,并移植到了树莓派上,但是当时的分类准确率并不高。后来研究生深度学习课程使用pytorch框架又重新做了一下该小项目,使用的数据集是北邮团队的RAF-DB(Real-world Affective Faces Database)中的单一表情数据集,模型使用的是RepVGG,最终在验证集上的准确率是77%左右,仍然有待提高。

代码已经放在我的github,若帮助到大家,希望大家点个星星。

文章目录

  • 人脸表情识别系统的设计与实现(含UI界面,有完整代码)
    • 1 简介
    • 2 数据集
    • 3 人脸表情特征提取网络
    • 4 人脸识别网络
    • 5 结果
      • 5.1 打开图片:
      • 5.2 打开相机:
      • 5.3 绘制曲线:
      • 5.4 混淆矩阵:
    • 6 总结

1 简介

整个流程大概分为两步:
第一步训练模型阶段,即直接使用人脸表情去训练数据集,然后将训练好的模型保存下来。
第二步是推理阶段,也就是对真实世界的图像中的人脸进行表情的分类,那么这就需要我们先检测出图像中的人脸,然后再对该人脸进行表情的分类,所以推理阶段涉及到两个深度学习小领域:目标检测和物体分类
整个项目的流程大概如下图所示:

2 数据集

RAF-DB(Real-world Affective Faces Database),该数据集是由北邮的团队在网络上爬取得到,网址link,有单一表情类数据和复合表情数据集,这里我使用的数据集为单一表情数据集。分为7类,包括Surprised、Fear、Disgust、Happy、Sad、Angry、Neutral,图片形状大小为100×100×3,我自己设置的训练集是12271张,验证集是3086张,测试集是直接使用的现实世界的图片。其中训练集和测试集的样本大概如下。



3 人脸表情特征提取网络

本文使用的是发在CVPR2021年的网络RepVGG,github网址link,该网络模型借鉴了ResNet的残差结构,以一系列的下采样模块构成。与之前大多数CNN网络不同的是在推理阶段,作者采用结构重参数化技术将短路连接和1×1卷积全部转换成3×3的卷积核以加快推理速度,如下图所示。

4 人脸识别网络

在将人脸表情分类网络训练好并转换成推理阶段的网络后,就可以进行在真实图片上的人脸表情识别了。但是在进行表情识别之前,需要我们先将图片中的人脸识别出来,并将其reshape成100×100的图片大小然后输入到推理阶段的RepVGG。因此涉及到目标检测算法,这里我使用的是SSD算法,原因是因为该算法相比其他目标检测算法快速又不失精准。这里是直接调用opencv库中训练好的人脸识别SSD算法实现。

5 结果

最后我使用PyQT5设计了一个GUI界面,如下图所示。

分别有以下几个功能:

5.1 打开图片:

即打开电脑本地上的图片,对图片中的人脸进行表情分类,下面跑一下余文乐和我的合照图(doge),对其进行表情分类,如下:

可以看到表情的分类在这张图片上还是不错的。

5.2 打开相机:

即打开电脑上自带的摄像头,对视频流中的人脸进行表情的分类,调用摄像头为使用opencv库实现,示例如下

本人就不出镜了,找一张霉霉小时候的照片跑了一下,红色数字代表该表情是happy的概率。在调用摄像头对其中的人脸进行表情识别时,可以实时跟踪视频流中的人脸并实时做出表情的分类,此处就不再演示了。

5.3 绘制曲线:

这里主要是绘制的模型训练过程中检测的各个指标,这里我是在训练模型的时候就直接保存了,此处是直接打开该图片,如下图只显示我调好的模型的损失与精度曲线:

5.4 混淆矩阵:

混淆矩阵是衡量分类任务在各类样本上的准确率情况,横向为预测的表情,纵向为表情的真值,横向概率相加为1,本文只显示模型在验证集上的混淆矩阵情况。

分析该概率矩阵可以看到,模型在Fear和 Disgust类表情上准确率不高,原因可能是这两类表情与其他类表情差距不大,比较难分类,还有可能是这两类图片的个数不多,模型未完全学到该两类表情的特征。

6 总结

使用比较新的网络RepVGG对人脸表情进行了分类,人脸表情数据集使用的是RAF-DB,在验证集上的准确率为77%左右,仍然有所改进。

由于我使用的是RepVGG官方给出的源码(当然也可以采用VGG/ResNet这种比较传统的网络,当时采用RepVGG的原因是觉得作为研究生深度学习课设得有一些新颖的网络,所以用了个比较新的网络),然后跟我的其他的本项目的程序放在一个项目中了,所以代码搞得有点乱,如果有小伙伴想要本项目的源码,可以私信我,我看到后会积极回复的。

tips:
本项目有一个小bug,就是在调用摄像头时,如果人脸贴的摄像头太近,程序会卡住,不知道是哪里出问题了0.0。以后有时间再改吧,欢迎大家私信与我交流!

人脸表情识别系统的设计与实现(含UI界面,有完整代码)相关推荐

  1. android人脸情绪识别器,基于Android平台的人脸表情识别系统的设计与实现

    摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...

  2. android 表情识别,基于Android平台的人脸表情识别系统的设计与实现

    摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...

  3. 人脸表情识别系统介绍——上篇(python实现,含UI界面及完整代码)

    人脸表情识别介绍与演示视频 博客及代码详细介绍:https://www.bilibili.com/video/BV18C4y1H7mH/(欢迎关注博主B站视频) 摘要:这篇博文介绍基于深度卷积神经网络 ...

  4. 毕业设计-人脸表情识别系统、人工智能

    人脸表情识别系统 1. 前言 在这个人工智能成为超级大热门的时代,人脸表情识别已成为其中的一项研究热点,而卷积神经网络.深度信念网络和多层感知器等相关算法在人脸面部表情识别领域的运用最为广泛.面部的表 ...

  5. 基于MobileNet的人脸表情识别系统(MATLAB GUI版+原理详解)

    摘要:本篇博客介绍了基于MobileNet的人脸表情识别系统,支持图片识别.视频识别.摄像头识别等多种形式,通过GUI界面实现表情识别可视化展示.首先介绍了表情识别任务的背景与意义,总结近年来利用深度 ...

  6. Python基于OpenCV的人脸表情识别系统[源码&部署教程]

    1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...

  7. Keras|基于深度学习的人脸表情识别系统

    更新内容(2019-4-12) 已将Keras版本模型权重压缩之后上传至GItHub,可以自取 更新内容(2018-12-9) 正好在学习tensorflow,使用tensorflow重构了一下这个系 ...

  8. 基于CNN的人脸表情识别系统

    基于CNN的人脸表情识别系统 主要功能: 1)图片识别,可以通过上传本地图片,进行表情识别 2)拍照识别,点击拍照识别按钮,可以调用摄像头实现拍照,并进 行表情识别 实现原理: 1.表情库的建立 fe ...

  9. 人脸表情识别系统(VGG_16和Xception模型)配置GPU加速,Fer2013数据集和CK+数据集,tensorboard

    编译器 python3.8 开发平台 Pycharm PyQT5 系统界面 (可视化开发工具designer ) 模型训练基于深度学习tensorflow框架 opencv haar cascade ...

最新文章

  1. 【技术贴】火狐的悬停激活标签扩展插件下载。Tab Focus
  2. 跨时钟域电路设计——多bit信号FIFO
  3. oracle 11g 创建 job 20
  4. 以当天日期时间,打包目录
  5. host 和TNS设置
  6. java map 多个值_java 一个函数EnumMap返回多个值
  7. 26.课时26.【Django模版】if标签使用详解(Av61533158,P26)
  8. innovus停止当前命令_从命令行停止node.js程序
  9. 109.虚函数与析构构造
  10. 【硬币识别】基于matlab形态学硬币计数【含Matlab源码 683期】
  11. linux_shell/windows_powershell_变量/环境变量Path的分行/换行查看/关键字搜索环境变量是否已经存在相关的变量的一些函数(cmdlet)表达式
  12. 计算机自动关机原理,电脑自动关机什么原因 电脑自动关机是怎么回事
  13. 万能的小镇市场能否成为悟空问答的救命良药?
  14. win系统C++的udp通信(接收并发送)详细教程、win下inet_pton和inet_ntop无法使用解决方法
  15. HP打印机显示状态出错
  16. 分享按钮--百度分享
  17. 计算机网络(一)网络分层及协议
  18. https://www.bilibili.com/video/BV1rP4y1X7HR/?spm_id_from=333.999.0.0vd_source=0d70ce6ab7081e676bd0
  19. 海信研发前端工程师面试经验总结
  20. Blender全新开源动画短片官方灯光渲染教程,文末附高清参数截图+专家级灯光渲染建议

热门文章

  1. 如果经验有用 读书干嘛
  2. php钉钉企业微应用免登demo,钉钉微应用免登实现
  3. MWC厂商爆料:5G手机明年面世
  4. 搭建手游联运平台都需要具备什么功能呢?
  5. 使用python爬取BOSS直聘岗位数据并做可视化(Boss直聘对网页做了一些修改,现在的代码已经不能用了)
  6. 基于imx6ul平台移植ohos3.0.3LTS小型系统之添加产品编译框架
  7. python中config什么意思,使用Python中的config配置
  8. 对基金投资的进一步思考
  9. 编程过程中,减少bug的一个诀窍
  10. Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)