简单的机器学习程序_自闭症应用场景下利用机器学习和深度学习方法进行情绪识别,并在小程序中查询识别结果...

本文介绍了在自闭症应用场景下,如何利用图像特征提取和传统机器学习算法(如Gabor变换+HOG)进行情绪识别,并结合深度学习(CNN和ResNet)方法,实现情绪检测。在JAFFE数据集上,Gabor+HOG特征提取的准确率达到了89.4%,而基于ResNet的情绪识别在大型数据集上表现出更好的泛化能力。最终,这些方法可以应用于小程序中查询识别结果。
摘要由CSDN通过智能技术生成
  • 注:实现本文Python代码需要的包:opencv、numpy、matplotlib、sklearn、os,Python版本为Python3.7
  • 为了使每段代码效果更直观,本文将会以类似jupyter notebook的形式,在部分代码后展示运行结果。
人脸情绪识别在日常生活中有着极其广泛的用途,例如智慧课堂应用场景中识别学生的面部表情从而给予老师关于课程的反馈、家用监控系统中识别儿童的异常情绪等等。
本文中的情绪识别技术基于JAFFE数据集实现,可以监测识别开心、悲伤、愤怒、厌恶、害怕、惊讶、中性这7种情绪,应用目标则是通过家用监控设备采集到的视频,实现自闭症儿童异常负面情绪的监测。

首先调用需要的包:

import 

一、 基于图像特征提取和传统机器学习算法的情绪识别

0.人脸位置的检测

在进行人脸情绪识别时,首要任务就是抓取到图片中的目标人脸区域,再对人脸进行特征提取。在特征提取前,我们采用opencv包中自带的人脸检测文件进行目标区域的检测。将opencv包安装路径的cascades文件夹置于项目目录下,即可调用其中现有的模型。(cascades文件夹也会在本文末尾的GitHub中给出)

下面的detect函数展示了如何调用人脸检测的xml文件。

import 

d8f9229c63b4c5b69d029c5de12a7a61.png
opencv检测人脸所在目标区域

目标区域提取完毕,下面是重头戏——特征提取。

1.1 利用Gabor变换进行图像特征提取

数字图像处理中最常用的方法无疑是傅立叶变换,它将任意信号分解为许多不同频率正弦波的组合,可以实现信号在时域和频域的相互转换,但它最大的缺陷就是无法用于变化的非确定、非稳定信号。对于人脸图像这种非确定、非稳定信号,常用的一种特征提取方法是Gabor变换,它也被称为“窗口Fourier变换”。
Gabor变换的本质就是把信号划分成许多个小的间隔,再对每个小间隔进行傅立叶变换,从而兼顾信号在时域和频域的特性。对于二维情况下的图像,将小波变换与Gabor变换结合,得到的二维Gabor变换能够抓取图像中不同位置、不同频率、不同方向上的特征。换言之,二维Gabor变换在人脸图像中,可以较好地提取出人脸的眉毛、鼻子、嘴等面部关键区域的信息。
总而言之,Gabor滤波器是一种在图像处理领域极为优越的特征提取方法。

下面介绍Gabor变换的表达式。

二维Gabor变换的表达式如下所示:

其中各个参数的意义如下:

是波长;
是角度;
是高斯分布标准差;
是椭圆率(横纵比),一般取0.5;
是相位偏移。

公式的后半部分用欧拉公式展开是一个正弦函数的形式,因此该公式实质上是一个高斯分布和一个正弦函数的乘积。

先从

处入手看公式:

如果

,那么Gabor滤波器的内核是一个圆形。

当椭圆率

变动时,Gabor滤波器的内核随之变为不同的椭圆。

话不多说,直接上代码,利用opencv包实现基于Gabor滤波器的特征提取。

首先是一个滤波器的图像展示:

#参数初始化

479b0ed19986c95f1838e2bb696948d3.png

下面依次尝试增加ksize和

的值:

(注意,当

过大时,可能会错过小图像中的一些特征)
ksize

b577c632e1824d6e88bdc535b3fcf427.png

改变滤波器角度

ksize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值