人脸表情识别 实战项目

news2024/11/17 23:45:52

一个不知名大学生,江湖人称菜狗
original author: jacky Li
Email : 3435673055@qq.com

Time of completion:2022.12.12
Last edited: 2022.12.12

目录

​编辑

人脸表情识别 实战项目

简介

环境部署

数据准备

项目说明

传统方法

深度方法

网络设计

模型训练

模型应用

GUI界面

实时检测

作者有言


人脸表情识别 实战项目

简介

使用卷积神经网络构建整个系统,在尝试了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

数据准备

数据集和预训练模型均已经上传到CSDN资源https://download.csdn.net/download/weixin_62075168/87270790https://download.csdn.net/download/weixin_62075168/87270790,下载后将model.zip移动到根目录下的models文件夹下并解压得到一个*.h5的模型参数文件,将data.zip移动到根目录下的dataset文件夹下并解压得到包含多个数据集压缩文件,均解压即可得到包含图像的数据集(其中rar后缀的为原始jaffe数据集,这里建议使用我处理好的)。

项目说明

传统方法

  • 数据预处理
    • 图片降噪
    • 人脸检测(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

实时检测

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

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

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

作者有言

如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……

如果需要源码请找博主私聊一下叭

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

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

相关文章

LeetCode 剑指 Offer 二叉树的最近公共祖先 | 解题思路分享

剑指 Offer 618 - II. 二叉树的最近公共祖先 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且…

基于Android的车位共享系统的设计

一、课题任务与目的 1. 课题背景 随着车辆越来越多,车位紧缺成为当前生活中最严重并且着急去解决的问题之一。本项目制作一款基于Android的车位共享系统用于缓解车位紧缺造成的压力。本次所开发的停车App是基于北京当前的交通状况为出发点的,让用…

Unity人工智能初学者指南

Unity人工智能初学者指南 使用 C# 在 Unity 游戏引擎中为游戏编写非玩家角色的实用指南 课程英文名:The Beginners Guide to Artificial Intelligence Unity 2022 此视频教程共13.5小时,中英双语字幕,画质清晰无水印,源码附件全…

Qt实现全局键盘事件监听器-Windows

Qt实现全局键盘事件监听器-Windows版🍇 文章目录Qt实现全局键盘事件监听器-Windows版🍇1、概述🍈2、实现效果🍉3、实现方式🍊4、关键代码🍋5、源代码🍌更多精彩内容👉个人内容分类汇…

分布式文件存储-FastDFS环境搭建

FastDFS简介 FastDFS是什么?我们这里可以看一下度娘的解释。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了…

grid布局 笔记

这次给大家带来的是grid布局,之前听说过但没接触过,一起来学一下吧,提升一下css认知。 1、开启方式 给父级盒子开启grid布局 display: grid2、gap 间隙 所有盒子的行列间隙为10px gap: 10px行/列 colomn-gap: 20px;row-gap: 15px注意&#…

java计算机毕业设计ssm迎新系统pv83c(附源码、数据库)

java计算机毕业设计ssm迎新系统pv83c(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

[MySQL]-压力测试之性能监测指标

[MySQL]-压力测试之性能监测指标 森格 | 2022年12月 本文主要是介绍在数据库的压测过程中,要时刻的一些指标,尤其是当数据库的性能达到瓶颈时,要注意哪个指标已经打满。 一、前文回顾 在前面量两篇文章中,分别介绍了两款压测数据…

数据标注过程中会遇到哪些难题 | 景联文科技

“近年来,⼈⼯智能发展迅速,影响着我们⽣活中的方方面面。随着⼈⼯智能应⽤场景不断增加,作为⼈⼯智能的上游基础⾏业,数据标注行业也快速发展,但许多不成熟的标注团队组织由于管理水平有限,且没有系统的标…

【C++笔试强训】第五天

文章目录选择题编程题选择题 在上下文和头文件均正常情况下,以下程序的输出结果是() int x 1; do{printf("%2d\n",x) }while(x--);A 1 B 无任何输出 C 2 D 陷入死循环 x1,x是后置,先使用,在加…

Python之路200个小例子网页版,真诚奉献,从一而终!

前言 历史两个月,利用所有业余时间,与朋友一起搜集、创作Python小例子,截止目前已超过200个例子: Python之路 1 简洁之美 2 Python绘图 3 Python动画 4 Python数据分析 5 Python机器学习 6 Python-GUI 一、Python基础 1…

Acrel-EIOT免调试抄表系统

安科瑞 华楠 一、远程抄表系统应用场景-互联网用户(能源参与者) 二、远程抄表系统互联网用户的痛点 2.1 数据系统价格偏高 一套系统需要前期勘察、画图、出方案、报价,建设投入服务器、网络布线、交换机,网关、人工施工及调试&…

Vue中使用vxe-table组件分页查询,多页选择数据回显,分页记录保存选中的数据

官方示例:vxe-table v3https://vxetable.cn/v3/#/table/advanced/page 当表格中需要渲染的数据量比较大,有几万几十万条数据时,在前端分页将会非常慢,建议将当前页码和每页数量传递个后端,后端分好后给前端渲染。 后端…

电脑重装小白系统没内存怎该如何解决

很多网友想要重装系统,但是在用小白系统安装的时候提示没内存怎么办呢?我们可以卸载自己的电脑软件,或者是扩充一下自己电脑内存。不知道如何处理相关问题的小伙伴可以直接看看下面小编分享的文章小白系统没内存怎么办。 工具/原料: 系统版…

MySQL主从复制-----读写分离

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台Mysql数据库(slave从库)从另一台mysql数据库(master,主库)进行日志的复制然后再解析日志并应用到自身,最终…

nacos--基础--2.5--部署--集群--传统

nacos–基础–2.5–部署–集群–传统 前提 使用hd用户登陆 完成基础环境搭建https://blog.csdn.net/zhou920786312/article/details/1182123021、机器 IP端口备注192.168.187.1718848xx192.168.187.1728848xx192.168.187.1738848xx 2、tar.gz安装 2.1、安装 参考 nacos–基…

javaee之黑马旅游网4

下面来做旅游线路的查询功能 1.查询参数传递 在header.html 我们先找到这部分的位置 上面就加了两个id 引入这个js文件 控制搜索框 那我们现在来说一下,cid怎么来获取,换句话说cid是从什么地方传过来的? 首先header.html页面是被包含在r…

人力资源杂志人力资源杂志社人力资源编辑部2022年第20期目录

专题研究《人力资源》投稿:cnqikantg126.com 破解高端人才引聚难 林翠玲; 1-3 如何凸显集团企业人力资源管理价值 刘鹏飞; 4-5 中长期激励,激活科研人员创新力 刘灿;汪思源; 6-7 改革人才评价体系,助推“双一流”建设 杨帆; …

STM32CUBEMX_配置stm32f103c8t6的bootloader_USB升级

STM32CUBEMX_配置stm32f103c8t6的bootloader_USB升级 1、使用stm32cubemx配置好工程(版本6.3.0),生成keil工程 2、移植必须要的一些函数 3、使用dfusedemo工具软件测试 ①配时钟外设 ②配ST-Link调试接口(防止无法二次烧录程序&a…

理解Python的协程(Coroutine)

生成器(Generator) yield表达式的使用生产者和消费者模型yield from表达式协程(Coroutine) asyncio.coroutineasync/await总结参考链接 由于GIL的存在,导致Python多线程性能甚至比单线程更糟。 GIL: 全局解释器锁(英语:Global Interpreter Lo…