(一张最原始的Unity3D中音乐可视化粒子海的图,想象一下,如果这幅场景出现在虚拟设备中,辅以根据音乐频谱变化的色彩与悦动频率,会是怎样的效果呢?)

Unity3D有着非常完备的虚拟三维场景交互开发功能,以Oculus为代表的虚拟现实设备又有着极强的视觉感染力,一副不错的耳机可以产生身临其境的听觉效果(在这里我使用的是森海塞尔头戴式耳机),我认为结合这三者进行开发可以对人的情绪产生非常显著的影响效果,“机器情绪安抚师”系统的开发就是基于这个比较理想化的想法,这套系统经过实验证明可以在一定程度上让人的情绪趋于缓和,从而更专注于需要做的事。我与几位小伙伴曾经基于这套系统撰写论文并投稿给人机交互领域顶级会议SIGCHI,最终并没有被接收,但我依然相信这种思路是可行的,并且会随着硬件的进步以及人类情绪识别技术的发展变得更加吸引人。

总框架设计

总体上说,我们是通过移动端来识别用户情绪,然后通过情绪模型获知用户情绪的反向情绪,再通过反向情绪精准地匹配服务器中的音乐,然后将音乐传至虚拟现实设备端,再通过音乐可视化算法输出音乐可视化内容。细节内容在下面这张系统架构图中有所展现。

情绪识别

为了完成情绪识别方面的工作,我开发了一款安卓端的手机应用,其中主要采用的是Emokit情绪检测接口(http://www.emokit.com/),实现了用户可以利用智能手机随时随地对情绪进行多通道的检测与记录,客户端的几张截图如下所示。

情绪模型

在获知了用户情绪后,需要将情绪在某个权威的情绪模型中进行精准的定位以及数字化存储,这里采用的是心理学领域具有权威性的普拉奇克情绪三维模型。

普拉奇克(Plutchik)认为情绪是多维的,它包括强度、相似性和两极性三个维度。即(1)所有的情绪都能表现出不同的强度,如不同程度的愉快或悲伤;(2)不同的情绪在感受上的相似性,如快乐和期待、厌恶与惧怕等;(3)两极性是指感受完全不同的两种情绪,如悲痛与狂喜等。普拉奇克采用一个橘瓣体来形象的描述三个维度之间的关系(类似于八色相环),每个橘瓣体代表一类基本情绪,即狂喜、接受、惊奇、恐惧、悲痛、憎恨、狂怒和警惕。在这个橘瓣体中最强烈的情绪位于上部,越往下情绪强度越弱;对角位置的情绪表现出两极性;相邻的情绪具有相似性。

这个模型非常适合用于数字化地表示与存储用户情绪,原因主要是它可以很好地映射在二维坐标系中,并可以利用情绪点距离清楚地表现情绪激烈程度。在实际运用过程中,我们发现这个模型的效果确实是卓越的。

音乐可视化

(系统实际使用照片)

音乐可视化是本项目中非常重要的一环,从某种程度上说,音乐可视化效果的优劣直接影响用户沉浸感的好坏。由于本项目的音乐可视化内容是展现在Oculus端,所以有关音乐可视化的开发主要是基于Unity3D平台进行的。所运用到的原理主要是在Unity场景中构建粒子系统,然后根据音乐的频谱去改变光影粒子系统中各粒子的高度与颜色进而产生音乐可视化效果。

注:我乐意将这里的音乐可视化代码进行开源,需要的可以在博客下评论告诉我。

最终,通过两种方式进行了系统有效性的实验,一种是依靠高性能中心中的沉浸式旋转座椅与心电设备做了专业级别的测试与比对,另一种是找到了40位志愿者进行测试,我们通过情绪刺激、情绪检测、情绪调节、二次情绪检测的方式对每一位志愿者进行测试,最终结果表明,这套系统确实对于帮助用户情绪趋于稳定具有显著的效果。其中在消除负面情绪方面的作用效果要优于在舒缓激烈情绪方面的作用效果。

备注:本人非常乐意分享我的文章,转载请注明我的博客地址:http://www.cnblogs.com/matthewli/与原文地址:http://www.cnblogs.com/matthewli/p/7247622.html,谢谢!

利用Unity3D与Oculus实现机器情绪安抚师的一种方案的更多相关文章

  1. 利用Unity3D实现多平台增强现实网络游戏的一种方案

    这几天去厦门参加了VALSE2017会议,对于其中某个环节展示的有关增强现实游戏的部分印象深刻.因为前两年一度沉迷于利用各类引擎开发游戏,所以也曾经以Pokemon GO为模板开发过一款多平台增强现实 ...

  2. [20171221]利用rman实现2台机器文件拷贝.txt

    [20171221]利用rman实现2台机器文件拷贝.txt --//昨天使用rman duplicate建立dg,我看到执行如下代码: RMAN> duplicate target datab ...

  3. 利用Unity3D制作简易2D计算器

    利用Unity3D制作简易2D计算器 标签(空格分隔): uiniy3D 1. 操作流程 在unity3DD中创建一个新项目 注意选择是2D的(因为默认3D) 在Assets框右键新建C#脚本 在新建 ...

  4. 利用Powershell获取公司内部机器的资源信息,作为企业兴许资产管理的基本途径!

    今天一个哥们问我是否用Powershell 实现.我好久没有写脚本,脚本的协作和调试还是费了一些时间,兴许调试了下.运作没有问题,大家能够參考以下的脚本来丰富您企业须要做的一些事情,脚本代码例如以下: ...

  5. 【Unity3D游戏开发】之全局管理类的几种方式 (十六)

    如何在Unity中实现全局管理类?由于Unity脚本的运行机制和面向组件编程(COP)的思想,实现起来和普通的方式略有差别. 第一种方式是使用静态类.适合存储一些全局的变量,如游戏当前关卡.玩家得分等 ...

  6. 利用Telnet来模拟Http请求 有GET和POST两种

    利用Telnet来模拟Http请求---访问百度.       1.打开"运行"->cmd进入命令环境:       2.输入"telnet www.baidu.c ...

  7. 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨)  ...

  8. 在Scrapy中如何利用Xpath选择器从HTML中提取目标信息(两种方式)

    前一阵子我们介绍了如何启动Scrapy项目以及关于Scrapy爬虫的一些小技巧介绍,没来得及上车的小伙伴可以戳这些文章: 手把手教你如何新建scrapy爬虫框架的第一个项目(上) 手把手教你如何新建s ...

  9. 利用adb查看手机设备ip和连接手机的两种方式

    电脑安装adb(查看菜鸟adb教程) [cmd]->输入adb devices (设置了path,否则需要 ./路径/adb devices)如图: 查看ip两种方法(可能有更多,目前我还没看到 ...

随机推荐

  1. python str转dict

    两种方法 捷径 eval(str) >>> user = "{'name' : 'jim', 'sex' : 'male', 'age': 18}" >&g ...

  2. .net 4.0 中的特性总结(三):垃圾回收

    1.内存基础知识 每个进程都有其自己单独的虚拟地址空间. 同一台计算机上的所有进程共享相同的物理内存,如果有页文件,则也共享页文件. 默认情况下,32 位计算机上的每个进程都具有 2 GB 的用户模式 ...

  3. R语言包翻译

    Shiny-cheatsheet 作者:周彦通 1.安装 install.packages("shinydashboard")  2.基础知识 仪表盘有三个部分:标题.侧边栏,身体 ...

  4. 【转载】QT QTableView用法小结

    原始日期: 2016-08-16 09:28 来源:http://blog.csdn.net/wang_lichun/article/details/7805253 QTableView常用于实现数据 ...

  5. 【分享】我们用了不到200行代码实现的文件日志系统,极佳的IO性能和高并发支持,附压力测试数据

    很多项目都配置了日志记录的功能,但是,却只有很少的项目组会经常去看日志.原因就是日志文件生成规则设置不合理,将严重的错误日志跟普通的错误日志混在一起,分析起来很麻烦. 其实,我们想要的一个日志系统核心 ...

  6. ubuntu 16.04.2 源码安装gitlab并且利用runner持续集成

    参考原档:https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md#using-https 本章只 ...

  7. 导出CSV表格数据

    <?php class Csv{ //导出csv文件 public function put_csv($list,$title){ $file_name="CSV".date ...

  8. 【Android Developers Training】 17. 停止和重启一个Activity

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. 如何为一个eclipse安装android环境

    据说android已经不再支持android adt-bundle的开发环境了,所以如果继续使用的话,会不再更新 使用eclipse来安装android环境或者使用android studio 但是以 ...

  10. Python系列教程(三):输入和输出

    1.1 raw_input() 在Python中,获取键盘输入的数据的方法是采用 raw_input 函数(至于什么是函数,咱们以后的章节中讲解),那么这个 raw_input 怎么用呢? 看如下示例 ...