FER 人脸情绪识别系统
一、主要的流程
二、主要步骤:
1.我们可以通过调用dlib这个库 使用特征提取器get_frontal_face_detector
以及使用训练好的特征预测器 从而得到dlib 的68点模型,为我们的情绪识别提供了很大帮助
# 使用特征提取器get_frontal_face_detector
self.detector = dlib.get_frontal_face_detector()
# dlib 的68点模型,使用训练好的特征预测器
self.predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
2.
首先 建cv2摄像头对象 之后进行分帧及灰度处理
之所以进行灰度处理是为了减小图像原始数据量,便于后续处理时计算量更少,因为情绪识别的图像处理一般不需要对彩色图像的RGB三个分量都进行处理
之后利用dlib进行检测人脸 并通过预测器得到68点数据的坐标
# 建cv2摄像头对象,这里使用电脑自带摄像头,如果接了外部摄像头,则自动切换到外部摄像头
self.cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
# 设置视频参数,propId设置的视频参数,value设置的参数值
self.cap.set(3, 480)
# cap.isOpened() 返回true/false 检查初始化是否成功
while (True):
# cap.read()
# 返回两个值:
# 一个布尔值true/false,用来判断读取视频是否成功/是否到视频末尾
# 图像对象,图像的三维矩阵
flag, im_rd = self.cap.read()
# 每帧数据延时1ms,延时为0读取的是静态帧
k = cv2.waitKey(30)
# 取灰度
img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY)
# 使用人脸检测器检测每一帧图像中的人脸。并返回人脸数rects
faces = self.detector(img_gray, 0)
# 待会要显示在屏幕上的字体
font = cv2.FONT_HERSHEY_SIMPLEX
# 如果检测到人脸
if (len(faces) != 0):
# 对每个人脸都标出68个特征点
# enumerate方法同时返回数据对象的索引和数据,k为索引,d为faces中的对象
for k, d in enumerate(faces):
# 用红色矩形框出人脸
cv2.rectangle(im_rd, (d.left(), d.top()), (d.right(), d.bottom()), (0, 0, 255))
# print(d.top())
# 计算人脸热别框边长
self.face_width = d.right() - d.left()
# 使用预测器得到68点数据的坐标
shape = self.predictor(im_rd, d)
3.到1971年,这两个人研究了 6 种基本表情 (即高兴、悲伤、惊讶、恐惧、愤怒和厌恶 ) ,并系统地建立了上千幅不同的人脸表情图象库。
通过这个表格 我们可以看到 不同的表情对应了脸部不同的运动特征。如惊讶时 一般嘴巴张开 眉毛抬高 眼睛睁大
4.
首先来看一下对于眼睛睁开程度的测定,通过41 37 40 38 等坐标的运算 我们可以得到 眼睛睁开距离与识别框高度之比,我们也可以得到以下参数
mouse_width # 嘴巴宽度与识别框宽度之比
mouse_height # 嘴巴高度与识别框高度之比
k # 眉毛的倾斜方向
eyebrow_height # 眉毛高度与识别框高度之比
eyebrow_spacing # 眉毛间距与识别框高度之比
eye # 眼睛睁开距离与识别框高度之比
eye_long # 眼睛长度
mouth_higth # 嘴巴外圈张开
mouth_xia # 嘴巴下
我们计算了CK+这个人脸表情的数据集里 开心表情的嘴巴张开比例、嘴巴宽度、眉毛倾斜程度等特征,并导入excel表格生成折线图:
通过折线图可以很明显的看出什么参数可以使用,什么参数的可信度不高,什么参数在那个范围内可以作为一个指标。
我们分析了并结合平均值 极值 方差 稳定性等各个方面以及不同表情之间主要突出特征的主成分分析,通过对多个不同表情数据的分析,得出每个指标的参考值,可以写出简单的表情分类标准。
得到了以下代码
if (eye_long <= 0.02 and 0.13 0.21 and mouth_higth< 0.04
and 0 <= mouth_xia_ <= 0.1 and 0.350.43 and
eye_hight <= 0.08):
cv2.putText(im_rd, "angry", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2, 4)
elif 0.03 <= mouth_higth <= 0.3 and (0.3 <= mouth_width <= 0.55)
and (0.08 <= mouth_xia_ <= 0.2 and 0.20.3 and 0.10.22):
cv2.putText(im_rd, "happy", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2, 4)
elif 0.04 0.11 and 0.15 <= mouth_higth_w and 0.20.4
and 00.2 and 0.040.2 and 0.1 # or ((mouth_higth <= 0.1) and (0.12 < eye_hight)):
cv2.putText(im_rd, "surprise", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0, 0, 255), 2, 4)
elif ((0.03 <= eye_hight <= 0.08) and 0.27 <= brow_k <= 0.35 and
mouth_xia_ < 0.1 and 0.050.15 and 0.240.41):
# or (0.3 <= mouth_width and eye_hight <= 0.03):
cv2.putText(im_rd, "sadness", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0, 0, 255), 2, 4)
elif mouth_xia_<0 and 0.250.4 and 0.040.1 and 0.3
cv2.putText(im_rd, "nature", (d.left(), d.bottom() + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
(0, 0, 255), 2, 4)
虽然简单的表情可以识别出来,但是一些复杂的表情识别准确率较低,所以我们决定暂时放弃了对这种方法的探索
于是我们又寻求了另一种分类方式Knn
KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,从这个名字我们就能看出一些KNN算法的蛛丝马迹。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。那么最近的邻居又是怎么回事呢?其实,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。听起来有点迷,我们还是来看看图吧。
图中绿色的点就是我们要预测的那个点,假设K=3。那么KNN算法就会找到与它距离最近的三个点(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个例子中是蓝色三角形多一些,新来的绿色点就归类到蓝三角了。
但是,当K=5的时候,判定就变成不一样了。这次变成红圆多一些,所以新来的绿点被归类成红圆。从这个例子中,我们就能看得出K的取值是很重要的。
就先介绍到这了
这是我们的一个课程设计
我们一步一步探索 表情识别部分由sklearn knn模型识别
我们也制作了交互页面gui 包括 摄像头实时识别及图片表情识别
完整代码:GitHub - Vincent-HL/HL: python
FER 人脸情绪识别系统相关推荐
- 人脸情绪识别系统第一次迭代总结
设想和目标: 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 问题定义:目前有一种情感维度理论,我们要用机器学习的方式给出人脸的维度值. 典型场景1:用户通过 ...
- android人脸情绪识别器,基于Android平台的人脸表情识别系统的设计与实现
摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...
- 毕业设计-人脸表情识别系统、人工智能
人脸表情识别系统 1. 前言 在这个人工智能成为超级大热门的时代,人脸表情识别已成为其中的一项研究热点,而卷积神经网络.深度信念网络和多层感知器等相关算法在人脸面部表情识别领域的运用最为广泛.面部的表 ...
- android 表情识别,基于Android平台的人脸表情识别系统的设计与实现
摘要: 随着目前移动设备硬件技术的不断发展,其性能与PC的差距越来越小,这使得在嵌入式平台上进行图像处理成为了可能.目前使用最广泛的是基于Android系统的嵌入式平台,与之相关的图像类应用需求也渐渐 ...
- Python基于OpenCV的人脸表情识别系统[源码&部署教程]
1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...
- 【实战】深度学习构建人脸面部表情识别系统
实战:深度学习构建人脸面部表情识别系统 一.表情数据集 数据集采用了kaggle面部表情识竞赛的人脸表情识别数据集. https://www.kaggle.com/c/challenges-in-re ...
- 基于MTCNN和FaceNet的实时人脸检测识别系统
文章目录 模型介绍 MTCNN FaceNet 基于MTCNN和FaceNet的实时人脸检测识别系统 在LFW数据集上测试 参考文献 GitHub项目地址:https://github.com/Har ...
- 基于MATLAB的人脸考勤识别系统
基于MATLAB的人脸考勤识别系统 摘 要 人脸识别是模式识别和图像处理等学科的一个研究热点,它广泛应用在身份验证.刑侦破案.视频监视.机器人智能化和医学等领域,具有广阔的应用价值和商用价值.人脸特征 ...
- 基于深度学习的人脸性别识别系统(含UI界面,Python代码)
摘要:人脸性别识别是人脸识别领域的一个热门方向,本文详细介绍基于深度学习的人脸性别识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择人脸图片.视频进行检 ...
- 基于cnn的人脸识别_基于卷积神经网络(CNN)的人脸在线识别系统
微信搜索"AI大道理",选择"置顶"公众号 重磅干货,深入讲解AI大道理 ------ 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统, ...
最新文章
- 国内IT图书出版的未来之路
- 异常详细信息: System.Web.HttpException: 请求在此上下文中不可用
- MS SQL SERVER导出表结构到Excel
- 睢县第三届芦笋文化节开幕 对话中国农民丰收节交易会
- LeetCode177 第N高的薪水
- mysql 执行计划 代价_mysql explain执行计划详解
- codeforces 939C Convenient For Everybody 简直羞耻
- matlab 中 Transform,变换数据存储 - MATLAB transform
- MathWorks 中国
- 《Tomcat权威指南》读书笔记
- 计算机的摄像功能,电脑摄像头怎么开 几款推荐值得看【图文】
- python之scipy库简单操作
- yaml 格式错误 did not find expected key
- 全网首发C++ OBS源码分析与屏幕录制软件开发视频教程
- 香蕉树上第六根芭蕉——PCA算法python实现和思考-站在巨人肩膀上
- xp打开html页面不正常显示不出来,xp打开网页图片加载不出来如何解决
- python中的开根、取整、求对数
- 各个框架原理总结归纳
- 已知鸡和兔的总数量n,总脚数为m。输入n和m,依次输出鸡和兔的数目。如果无解,输出“no answer”。 将下面的代码填写完整。
- php推荐笔记本,笔记本电脑分几种类型
- pos机限额是什么意思_POS机跳码、落地商户、T+1