介绍

本项目使用深度神经网络对人面进行特征提取,再通过SVM进行表情分类,先判断出人表现出的表情,再通过隐马尔科夫模型,判断人的情绪状态,进而根据人物的情绪来播放相应的音乐,使使用者能获得更好的音乐享受。

首先,在3s内通过摄像头采集人物面部图像10张,先分别进行人脸识别并裁剪出五官图像,然后通过深度卷积神经网络完成特征提取,再通过支持向量机对其进行分类,这里所使用的支持向量是由7500张带标签的训练表情图像得到的。这里采用了机器学习方法中的SVM(支持向量机),实验结果表明在此处采用SVM具有更高的正确识别率。将识别结果进行分类,分类标签为人类五大情绪,即:快乐、惊讶、平静、伤心、愤怒五种,通过分类结果获得一个人脸表情观测序列。

引入隐马尔科夫模型,可知此观测序列有与之相对应的隐藏情绪序列,通过维特比算法求得此隐藏情绪序列,然后取出现最多的情绪状态作为最终情绪输出状态。根据最终判断结果的情绪来播放相关音乐,让使用者听到符合心情的歌曲,从而达到心理舒适的状态。

实现方案

本作品开发使用的编程语言是python。

1.   获取数据集:

(1)网上大部分是以愤怒,恐惧,快乐,伤心,厌恶,惊讶,平静七种类别为标准的。但是,通过分析和验证,发现恐惧和惊讶, 厌恶和平静,相似程度很高,而且分类效果比较差,所以最终把面部表情确定为快乐、惊讶、平静、伤心、愤怒五种。

(2)网上公开的面部表情数据集,大部分是黑白的,用于比赛或者研究使用的。而这个作品,需要能识别用户的彩色照片,所以这些公开数据集并不能满足。我们的数据集初始图片是用各大搜索引擎搜索得到的,并且有意选择了东方面孔,不同年龄段,不同性别且表情的程度分布均匀的数据集一千多张。

(3)使用了python中的face_recognition库,用来进行人脸检测,识别图像中的人脸并剪切下来,大小统一保存为224X224。淘汰了一部分识别不出人脸的图片。

(4)对这些剩下的人脸图片进行人工标注。

(5)因为数据集太小,且各类别数量差别大,我们使用了数据增强方法,左右翻转;亮度、饱和度、锐度的变换;加高斯噪声。

2.   用深度神经网络来提取特征:

采用了tensorflow的深度学习框架,由于算力很强大的服务器,所以只能用迁移学习的方法来实现特征提取。在网络结构的选择上,比较了很多种,发现VGG16在特征提取上效果很好,但是它的网络参数太多,在我的渣电脑上,每次建立模型都要一分钟以上的时间,大大地影响了使用体验,退而求其次,选择了特征提取效果一般,但参数较少的inceptionV3模型。经过inceptionV3深度卷积神经网络处理的表情图片得到其特征向量。关于迁移学习的实现方法和模型获取,网上有很多资料......。

3.   选择图片特征的分类方法:

SVM是一种有监督的学习模型,对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心,支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量,SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。相对于全连接网络来说,SVM基于结构风险最小化原则,这样就避免了过学习问题,泛化能力强。所以我们使用了SVM的分类模型来对已经经过深度卷积神经网络提取特征的面部表情图片进行分类。

这里使用了sklearn库中的svm.LinearSVC()来分类。但因为目标是多分类,所以就有两种实现方法:

1.第一种是求取5个一对多的支持向量,分别将每一种情绪与其它4种情绪分开来,使用时将图片特征分别与这5个支持向量做乘积,有且只有一个结果是整数,此分类即为最准确的分类。

2.第二种方法是两两情绪之间进行分类,求取10个支持向量。使用时将图片特征分别与这10个支持向量做乘积,再统计10个乘积结果为正数的所对应的情绪,对应正数最多的情绪即为最准确分类,若正数个数相同,则比较乘积结果,最小的即为最大可能属于的情绪分类。

4.   用隐马尔科夫模型确定情绪:

人类的情感是十分复杂的,根据对人脸面部表情图像提取特征,SVM分类确定了五种基本表情。为提高音乐播放器对使用者情绪判断的准确性,引入马尔科夫人工情感计算模型。通过建立情绪状态自发转移过程的马尔科夫链,确定分类后的五种人脸表情所隐含的情绪。首先提出以下基本假设。

假设1:我们所获取的五种人脸表情可确定N种基本情绪状态,N=5,设定1=快乐,2=惊讶,3=平静,4=伤心,5=愤怒。

假设2:使用者的任意两种情绪状态之间可以相互转换。

假设3:各种情绪基本状态之间互相排斥。即当情绪状态i(i=1,2,3,4,5)的强度增强时,其他情绪状态j的强度减弱。

假设4:情绪状态自发转移趋势总是向着平静状态转移。

假设情绪初始概率分布:每种表情概率相等,这个假设是符合最大熵原理的,因为这样做保留了最大的不确定性,即让熵达到了最大......。

由于条件限制,没有进行相应的实验来获得隐马尔可夫模型的参数,目前的模型参数只是根据经验主观假设所得。由深度卷积神经网络和SVM分类之后得到一个观测到的人脸表情序列,根据此序列及A,B可以由维特比算法得到概率最大的隐藏情绪状态序列。最后通过判断哪个情绪出现次数最多,来决定这一过程中使用者的情绪真实情况......。

5.   根据情绪识别结果来推荐合适音乐:

我们的设计很简单,力求不与使用者的情绪相冲突,又不能让使用者长时间处于过于不好的状态。经过查阅资料,并分析各个流行的播放器的音乐情感类别得到结果......。

6.   跨平台GUI界面开发:

选择了tkinter进行GUI开发,tkinter是Python的一个模块,一个功能强大的跨平台的脚本图形界面接口。Python的GUI开发有许多选择,包括标准GUI库tkinter,wxPython, PyQT,Jython,MFC。鉴于我们的音乐播放器界面要实现的功能比较简单,tkinter是Python配备的标准GUI库,操作简单,可以良好适用于windows操作系统,而且显示风格是本地化的,所以最终选择了tkinter。

我们的音乐播放器主要实现两大功能:情绪识别和音乐播放。窗口顶层设置菜单栏,分为四栏:识别情绪、推荐音乐、本地音乐、我的收藏(暂未实现)。主界面(如图1)添加一个button,点击可开始进行情绪识别,一个label用于显示识别结果。音乐播放器界面(如图2)可实现选择音乐,播放音乐,上一曲下一曲选择及音量调节功能

拓展:

我们使用了树莓派3B+,系统为官方支持的操作系统Raspbian,它是基于Linux的Debian发行版。这里我们参考了一个开源的树莓派中文智能音箱项目:叮当。他能接入百度语音识别、语音合成、图灵机器人等。可以实现智能语音控制,而且我们可以自由地编写自己的插件。所以我们就写了一个面部表情识别智能播放音乐的插件,实现了功能。

总结:

作品完成后我们对其让不同的人进行了测试,发现识别准确率不太高,有时候会误识别,原因应该是训练选取不够随机,而且数量太少只有一千多张,尽管经过了数据增强,但还是无法得到泛化性很强的SVM模型。所以提高识别率的方法也很明显:1、增加优质的样本,2、修改更好的模型参数,3、改进算法。

inceptionV3(TensorFlow)+SVM+迁移学习 实现基于人脸表情识别的音乐播放器相关推荐

  1. 智慧教室—基于人脸表情识别的考试防作弊系统

    需要源码的朋友请私信我!!!! 智慧教室-基于人脸表情识别的考试防作弊系统 课堂专注度分析 作弊检测 关键点计算方法 逻辑回归关键点 下载权重 使用 部分源码 课堂专注度及考试作弊系统.课堂动态点名, ...

  2. [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】

    [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计[2018年给力项目]是[创科之龙]团队aiku嵌入式视频教程系列制作的现有的音乐播放器. 主要功能实现: 1.新建工程,基类选 ...

  3. 基于RT-Thread+STM32F407的蜂鸣器音乐播放器

    本项目为RT-Thread学习项目,参考于RT-Thread官网Demo示例 硬件基于STM32F407ZGT6正点原子探索者开发板+无源蜂鸣器模块 RTOS软件基于RT-Thread 4.0.5版本 ...

  4. 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目 ...

  5. Linux下基于Libmad库的MP3音乐播放器编写

    linux下基于Libmad库的MP3音乐播放器编写 libmad是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好,很多播放器如mplayer.xmms等都是使用这个开源库进行解码的: ...

  6. 基于Android的MediaPlayer的音乐播放器的封装

    基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...

  7. 基于嵌入式linux的音乐播放器设计,基于嵌入式Linux的多媒体音乐播放器的设计与实现...

    中图分类号:TP316.5 文献标识码:A 文章编号:1009-2552(2009)06-0102-03 基于嵌入式Linux的多媒体音乐播放器的设计与实现 王 奇 (黑龙江八一农垦大学信息技术学院, ...

  8. 【041】基于51单片机的自动音乐播放器Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的自动音乐播放器系统proteus仿真设计一份: (2).基于51单片机的自动音乐播放器系统proteus仿真设计keli源代码一份: (3).基于51单片机 ...

  9. 【Inception-v3模型】迁移学习 实战训练 花朵种类识别

    参考博客:[TensorFlow]迁移学习(使用Inception-v3),非常感谢这个博主的这篇博客,我这篇博客的框架来自于这位博主,然后我针对评论区的问题以及自己的实践增加了一些内容以及解答. g ...

最新文章

  1. IOS - IOS之同步请求、异步请求、GET请求、POST请求
  2. 英语四级比计算机等级难多少,英语四级难考吗?学长:掌握方法,过“425”分不困难...
  3. nodejs+express整合kindEditor实现图片上传 - 木子丰咪咕晶 - 开源中国
  4. 推荐:Flowchart 一种通过文本方式描述的流程图
  5. NoSQLUnit 0.3.0发布
  6. python合并单元格 索引_python笔记:纵向合并表格
  7. 华为鸿蒙安全认证,手机系统哪家强,华为鸿蒙系统获得国际安全标准最高等级认证,强不强?...
  8. JavaScript—从数组的indexOf方法深入——Object的Property机制。
  9. 【CarMaker学习笔记】CarMaker Python API 接口使用方法
  10. linux网络随机ip发包工具,三款常用IP发包工具介绍
  11. koreader下载_kindle koreader
  12. 电视机计算机无法退出,怎么强制退出恢复模式-各大主流智能电视强制恢复出厂汇总!轻松解决疑难杂症...
  13. 怎样用ipad使用python_如何用iPad运行Python代码?
  14. IP地址-子网划分详解
  15. Photoshop技巧:[2]如何抠头发?
  16. c1报考驾驶证网站php删除,c1驾驶证有违章,c1驾驶证免三种违章
  17. 用bat批量重命名不同文件夹下的同名文件
  18. OSPF基本工作原理(上)
  19. 使用Qt绘图制作一个钟表
  20. 2015-2016-1 《信息安全系统设计基础》学生博客列表

热门文章

  1. WMI获取硬盘型号和对应逻辑分区
  2. 从贝叶斯理论到图像马尔科夫随机场
  3. 2020-01-17
  4. 【FJWC】day1简要题解
  5. rpm package.http://rpmfind.net/
  6. 轻轻松松学习SpringBoot2:第九篇: Spring Boot 日志
  7. hua图软件 mac_绘图大师Pro Paint for Mac-绘图大师Pro Paint Mac版下载 V3.5.1-PC6苹果网...
  8. Redis 报内存不足怎么处理?
  9. 分享111个助理类简历模板,总有一款适合您
  10. 什么是SOA架构?SOA架构有什么作用?