设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

SSI—开源的人类行为分析解决方案

2015-2-3 00:28| 发布者: joejoe0332| 查看: 5855| 评论: 0|原作者: BreakingBad, 无若|来自: OSchina

摘要: 随着直观而自然的人机交互的崛起, 声音, 手势, 模仿(mimics) 等人类行为的自动检测和分析, 将在下一代接口中扮演重要角色. 本文介绍的人类行为分析(SSI), 是一个时实分析人类行为的框架. SSI 支持各种传感器, 过滤器 ...


  下面的C++代码片段给出一个效果,使用SSI的机器学习库是怎样完成学习的。首先,原始音频文件(“user1.wav”)和一个注释文件(“user1.anno”)被加载。下一步,音频流被转换成一个样本列表,提取特征值并应用。最终,使用那些样本的模型被训练。 在训练数据之外,添加一个额外的评价步骤,可以看到模型是如何被执行的。

1
2
3
4
5
6
7
8
9
10
// read audiossi_stream_t stream;
WavTools::ReadWavFile ("user1.wav", stream);// read annotationAnnotation anno;
ModelTools::LoadAnnotation (anno, "user1.anno");// create samplesSampleList samples;
ModelTools::LoadSampleList (samples, stream, anno, "user1");// extract featuresSampleList samples_t;
EmoVoiceFeat *ev = ssi_create (EmoVoiceFeat, "ev"true);
ModelTools::TransformSampleList (samples, samples_t, *ev);// create modelIModel *svm = ssi_create (SVM, "svm", true);
Trainer trainer (svm);// train and savetrainer.train (samples_t);
trainer.save (model);// evaluationEvaluation eval;
eval.evalKFold (trainer, samples_t, 10);
eval.print ();


  在经过训练阶段后, 我们就可以将预训练分类模型加入管道中. 要完成管道余下的工作, 还需要训练两个已连接到特征提取组件的模型: 一是检测声音中的笑声, 二是视频中的笑脸. 活动检测则用来判断某个帧包含的信息量是否够用来进行分类处理. 例如, 如果一个帧的图像没有检测到脸部, 或是音频信号的音量太低, 这个帧就会被丢弃. 否则, 就对它进行分类处理, 然后把结果传给 fusion 组件. 管道的头几个步骤基于数据流, 如, 信号持续不断的传给长度固定的窗口处理. 而后面那些负责检测和 fusion 的组件则基于事件, 只有在信号包含相关信息的时候才会触发. 将这两种处理结果结合在一起, 才能得到最终的决策数据.


  这个管道是在之前那个记录管道的基础上扩充的, 包含了其他处理步骤. 要处理音频数据流, 需要把下列代码加上:

1
2
3
4
5
6
<!-- VOCAL ACTIVITY DETECTION --><transformer create="ssi_feature_AudioActivity" threshold="0.025">
        <input pin="audio" frame="19200" delta="28800"/>
        <output pin="voice_activity"/></transformer>      <!-- VOCAL FEATURE EXTRACTION --><transformer create="ssi_feature_EmoVoiceFeat">
        <input pin="audio" frame="19200" delta="28800"/>
        <output pin="audio_feat"/></transformer><!-- VOCAL LAUGTHER CLASSIFICATION --><consumer create="ssi_consumer_Classifier" trainer="models\voice" sname="laughter" ename="voice">
        <input pin="audio_feat" frame="1" delta="0" trigger="voice_activity"></input></consumer>


  这部分是视频的代码:

1
2
3
4
5
6
<!-- FACIAL ACTIVITY DETECTION --><transformer create="ssi_feature_MicrosoftKinectFAD" minfaceframes="10">
        <input pin="kinect_face" frame="10" delta="15"/>
        <output pin="face_activity"/></transformer>      <!-- FACIAL FEATURE EXTRACTION --><transformer create="ssi_feature_MicrosoftKinectAUFeat">
        <input pin="kinect_au" frame="10" delta="15"/>
        <output pin="kinect_au_feat"/></transformer><!-- FACIAL LAUGHTER CLASSIFICATION --><consumer create="ssi_consumer_Classifier" trainer="models\face" sname="laughter" ename="face">
        <input pin="kinect_au_feat" frame="1" delta="0" trigger="face_activity"></input>         </consumer>


  由于加载的组件不同, frame/delta 的值需要调整, 才能适应相同的采样率, 但是这两部分的代码在结构上差不多. 注意, 这回我们把触发器 (voice_activity/face_activity) 放在 <input> 的 trigger 中. 给预训练模型检测声音和面部特征用的数据流, 是通过选项 trainer 从指定的文件加载的. 最后再由向量 fusion 将概率值合并起来 :

1
2
3
<object create="ssi_listener_VectorFusionModality" ename="enjoyment" sname="fusion"
        update_ms="400" fusionspeed="1.0f" gradient="0.5f" threshold="0.1f" >
        <listen address="laughter@voice,face"/></object>


  在单个或多维事件空间中作为独立向量的 fusion 的核心思想是处理检测到的事件(比如:笑容), 以及根据临时关系汇聚向量推导出最终决策(事件的影响力会随着时间减弱) [2]. 跟标准的基于分段的, 每一步都强制所有的模式做出决策的 fusion 方法对比, 基于向量的 fusion 只在需要的时候为某个模式做出决策. 在下面的动画中, 绿点表示检测到有用的线索, 红点表示什么都没检测到. 注意这里的最终 fusion 决策 – 动画中右边的绿色条形– 检测到有用线索的时候会变高, 随着检测的线索变少, 它会降低:

图 12: 预训练模型用来实时检测喜悦表情(绿色的点). 交叉模式能检测出更多的线索. 最后是 fusion 算法的输出的结果(绿色条形).

  下面的视频教我们如何使用检测管道. 输入流显示在左边 (顶部: 包含脸部跟踪信息的视频流, 底部: 原始音频数据流和活动图表). 两种不同模式的笑容检测分别用条形图显示在各自的顶部. 最终的多模式笑容检测结果显示在右边的条形图中.


总结

  本文介绍的 SSI, 是一个多模式信号处理框架. 除了 SSI 的基本概念之外, 我们还用两个例子讲解如何用 XML 快速搭建管道. 虽然本文的例子用的是现有的组件, 但是, 作为一个支持插件的系统, 当然也允许开发者使用新的组件. 欢迎大家到多媒体社区分享自己的组件, 为扩充 SSI 的功能添砖加瓦. 如果你想查看更多的 SSI 资料或源代码, 请访问 http://openssi.net.


未来的工作

  目前, SSI 应用主要面对桌面电脑, 或者是分布在某个网络中的几台桌面电脑. 虽然, 现在的无线传感器越来越流行, 具备一定的便携性,  但是, 如果不给它们配上桌面电脑, 那只能在有限的范围内使用. 智能手机, 或类似的移动设备没有这种限制. 有个试点项目, 已经开发出一个能实时将音频, 视频和其他数据, 从 Android 设备通过无线网络传到 SSI 服务的组件. 服务器会即时对这些数据, 并将结果回传给移动设备. 这个例子告诉我们, 新的应用能在更广阔的空间中使用, 因为它能跟着用户到处走. CARE 项目 (一个给老年人用的情景感知推荐系统) 目前正在开发的一个推荐系统, 该系统根据生理, 心理以及社交情况, 给孤寡老人的居家生活提供实时帮助. 他们的目标是帮助老年人重拾生活的信心.


鸣谢

  本文提及的工作由 European Union under research grant CEEDs (FP7-ICT-2009-5) 和 TARDIS (FP7-ICT-2011-7), 和 ILHAIRE, a Seventh Framework Programme (FP7/2007-2013) under grant agreement n°270780 赞助.


文献

[1] Johannes Wagner, Florian Lingenfelser, Tobias Baur, Ionut Damian, Felix Kistler, and Elisabeth André. 2013. 人类行为分析(SSI) 框架: 多模式信号实时处理与识别.  第 21 届 ACM 多媒体国际会议(MM ’13) 报刊. ACM, New York, NY, USA, 831-834. DOI=10.1145/2502081.2502223 http://doi.acm.org/10.1145/2502081.2502223. PDF

[2] Florian Lingenfelser, Johannes Wagner, Elisabeth André, Gary McKeown, and Will Curran. 2014. 喜悦心情实时识别, 一个事件驱动  Fusion 方法. 第 22 届 ACM 多媒体国际会议报刊(MM ’14). ACM, Orlando, Florida, USA, to appear.


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部