对于HoloLens,语音输入是三大基本输入方式之一,广泛地运用在各种交互中。HoloLens上语音输入有三种形式,分别是:

  • 语音命令 Voice Command
  • 听写 Diction
  • 语法识别 Grammar Recognition

语音命令 Voice Command


对于做过Windows Phone或许Windows Store应用开发的人来说,语音命令是经常使用到的特性。开发者可以通过为应用设定关键词,和对应的行为,来为用户提供语音命令体验。当用户说出关键词时,预设的动作就会被调用。在HoloLens上,语音命令也是此模式。

KeywordRecognizer

命名空间UnityEngine.Windows.Speech

KeywordRecognizerPhraseRecognizedEventArgsSpeechErrorSpeechSystemStatus

使用方法很简单,通过注册<关键词>来初始化KeywordRecognizer实例,同时注册语音命令事件来做后续处理。

  1. using UnityEngine.Windows.Speech;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class KeywordManager : MonoBehavior
  6. {
  7.  
  8. KeywordRecognizer keywordRecognizer;
  9. Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();
  10.  
  11. void Start()
  12. {
  13. //初始化关键词
  14. keywords.Add("activate", () =>
  15. {
  16. // 想执行的行为
  17. });
  18.  
  19. keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());
  20. keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
  21. //开始识别
  22. keywordRecognizer.Start();
  23. }
  24.  
  25. private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
  26. {
  27. System.Action keywordAction;
  28. // 如果识别到关键词就调用
  29. if (keywords.TryGetValue(args.text, out keywordAction))
  30. {
  31. keywordAction.Invoke();
  32. }
  33. }
  34. }

语法识别 Grammar Recognition


语法识别同Windows Store应用类似,依赖于实现设定好的SRGS文件,文件中定义了一系列语法规则用于语音识别。更多信息请阅读:https://msdn.microsoft.com/zh-cn/library/hh378349(v=office.14).aspx

GrammarRecognizer

命名空间:UnityEngine.Windows.Speech

类: GrammarRecognizerPhraseRecognizedEventArgsSpeechErrorSpeechSystemStatus

在你创建好SRGS文件后,将它放进StreamingAessets文件夹

  1. <PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml

使用起来也很简单,代码如下:

  1. public class GrammarManager : MonoBehavior
  2. {
  3. private GrammarRecognizer grammarRecognizer;
  4.  
  5. void Start()
  6. {
  7. //初始化
  8. grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");
  9. grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;
  10. //开始识别
  11. grammarRecognizer.Start();
  12. }
  13.  
  14. private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
  15. {
  16. SemanticMeaning[] meanings = args.semanticMeanings;
  17. // 执行动作
  18. }
  19. }

听写 Diction


听写即语音转文字,此前我们称之为Speech to Text,同样是Windows Store应用特性之一。在HoloLens上,发挥了比其他平台更大的作用。因为HoloLens的操作特性,使用键盘操作起来十分不方便,语音则无此问题,能大大提高输入效率。

DictationRecognizer

命名空间: UnityEngine.Windows.Speech

: DictationRecognizerSpeechErrorSpeechSystemStatus

听写特性用于将用户语音转为文字输入,同时支持内容推断和事件注册特性。Start()和Stop()方法用于启用和禁用听写功能,在听写结束后需要调用Dispose()方法来关闭听写页面。GC会自动回收它的资源,如果不Dispose会带来额外的性能开销。

完整的使用方法如下:

  1. public class DictionManager : MonoBehavior
  2. {
  3. private DictationRecognizer dictationRecognizer;
  4.  
  5. void Start()
  6. {
  7. dictationRecognizer = new DictationRecognizer();
  8. //注册事件
  9. dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
  10.  
  11. dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
  12.  
  13. dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
  14.  
  15. dictationRecognizer.DictationError += DictationRecognizer_DictationError;
  16.  
  17. //开始听写识别
  18. dictationRecognizer.Start();
  19. }
  20.  
  21. private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
  22. {
  23. // 自定义行为
  24. }
  25.  
  26. private void DictationRecognizer_DictationHypothesis(string text)
  27. {
  28. // 自定义行为
  29. }
  30.  
  31. private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
  32. {
  33. // 自定义行为
  34. }
  35.  
  36. private void DictationRecognizer_DictationError(string error, int hresult)
  37. {
  38. // 自定义行为
  39. }
  40.  
  41. void OnDestroy()
  42. {
  43. //释放资源
  44. dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
  45. dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete;
  46. dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis;
  47. dictationRecognizer.DictationError -= DictationRecognizer_DictationError;
  48. dictationRecognizer.Dispose();
  49. }
  50. }

注意:以下情况中,听写识别会自动触发超时行为:

  1. 如果在听写开始后第一个5秒内没听到任何声音,将会超时
  2. 如果识别到了一个结果但是之后20秒没听到任何声音,也会超时

同时使用以上特性


如果你想同时使用语音命令、语法识别和听写特性,那么一定要在完全关闭当前语音识别行为后再开始另一个识别动作。如果有多个KeywordRecognizer在运行,你可以使用如下代码一次性关闭它们:

  1. PhraseRecognitionSystem.Shutdown();

为了从先前状态恢复所有的识别器,可以在听写识别完成后调用如下代码:

  1. PhraseRecognitionSystem.Restart();

当然你也可以重新开始一个 KeywordRecognizer,这将会重启PhraseRecognitionSystem,达到上面的效果。

总结


Windows平台上的语音识别特性从Windows 8以来一直都很强大,但是在HoloLens上会有更大的用武之地。这是最基本的交互方式,从系统层级上提供了强大的支持,甚至和Cortana结合到了一起,非常有用。

HoloLens开发手记 - Unity之语音输入的更多相关文章

  1. HoloLens开发手记 - Unity development overview 使用Unity开发概述

    Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...

  2. HoloLens开发手记 - Unity之摄像头篇

    当你穿戴好HoloLens后,你就会处在全息应用世界的中心.当你的项目开启了"Virtual Reality Support"选项并选中了"Windows Hologra ...

  3. HoloLens开发手记 - Unity之Keyboard input 键盘输入

    虽然HoloLens支持很多种输入方式,包括蓝牙键盘在内.但是大部分应用还是不能断定用户有物理键盘可以输入,所以虚拟键盘输入还是必须要提供的. Unity提供了一个TouchScreenKeyboar ...

  4. HoloLens开发手记 - Unity之Gaze凝视射线

    凝视是HoloLens首要输入方式,形式功能类似于桌面系统的光标,用于选择操作全息对象.然而在Unity中并没有明确的Gaze API或者组件. 实现Gaze Implementing Gaze 概念 ...

  5. HoloLens开发手记 - Unity之Gestures手势识别

    手势识别是HoloLens交互的重要输入方法之一.HoloLens提供了底层API和高层API,可以满足不同的手势定制需求.底层API能够获取手的位置和速度信息,高层API则借助手势识别器来识别预设的 ...

  6. HoloLens开发手记 - Unity之Spatial mapping 空间映射

    本文主要讨论如何在Unity项目中集成空间映射功能.Unity内置了对空间映射功能的支持,通过以下两种方式提供给开发者: HoloToolkit项目中你可以找到空间映射组件,这可以让你便捷快速地开始使 ...

  7. HoloLens开发手记 - Unity之Tracking loss

    当HoloLens设备不能识别到自己在世界中的位置时,应用就会发生tracking loss.默认情况下,Unity会暂停Update更新循环并显示一张闪屏图片给用户.当设备重新能追踪到位置时,闪屏图 ...

  8. HoloLens开发手记 - Unity之Recommended settings 推荐设置

    Unity提供了大量的设置选项来满足全平台的配置,对于HoloLens,Unity可以通过切换一些特定的设置来启用HoloLens特定的行为. Holographic splash screen 闪屏 ...

  9. HoloLens开发手记 - Unity之Persistence 场景保持

    Persistence 场景保持是HoloLens全息体验的一个关键特性,当用户离开原场景中时,原场景中全息对象会保持在特定位置,当用户回到原场景时,能够准确还原原场景的全息内容.WorldAncho ...

随机推荐

  1. Sql server存储过程中常见游标循环用法

    用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE ), ), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELE ...

  2. LightSpeed使用指南

    LightSpeed 是一个最高性能的 .NET 领域建模和 O/R 映射框架,第一级别的 LINQ 支持.Visual Studio 2008/2010 设计器集成,是一个著名的高性能框架.[注:收 ...

  3. C# listview 拖动节点

    /// <summary> /// 当拖动某项时触发 /// </summary> /// <param name="sender"></ ...

  4. ok,今天讲讲linux的部分指令吧

    Linux布置服务  cd 进入   ../      上一层目录    sh shutdown.sh   -------tomcat的关闭指令  sh startup.sh       ------ ...

  5. fullpage.js 结合固定导航栏—实现定位导航栏

    开始制作自己的个人简历啦,决定要使用固定导航栏,又打算使用fullpage.js做全屏滚动. 仔细看了fullpage文档之后,发现不用额外写js代码就可以实现以下效果: 1.当滚动翻页时,导航栏也自 ...

  6. python中的深拷贝和潜拷贝

    >>> a = ['ace',['age',10]] >>> b = a[:] >>> c = list(a) >>> for ...

  7. Beaufort密码

    博福特密码,是一种类似于维吉尼亚密码的替代密码,由弗朗西斯·蒲福(Francis Beaufort)发明.它最知名的应用是M-209密码机.博福特密码属于对等加密,即加密演算法与解密演算法相同 博福特 ...

  8. Android 手势识别类 ( 二 ) GestureDetector 源码浅析

    前言:Android 关于手势的操作提供两种形式:一种是针对用户手指在屏幕上划出的动作而进行移动的检测,这些手势的检测通过android提供的监听器来实现:另一种是用 户手指在屏幕上滑动而形成一定的不 ...

  9. iOS9 判断微信qq是否安装

    iOS 9检测QQ.微信是否安装无效的解决方法 在info.plist里面添加LSApplicationQueriesSchemes(Array类型),然后插入weixin, wechat, mqq的 ...

  10. onresize方法

    resize()方法可以写在当前页面包含的所有js里