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

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

语音命令 Voice Command


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

KeywordRecognizer

命名空间UnityEngine.Windows.Speech

KeywordRecognizerPhraseRecognizedEventArgsSpeechErrorSpeechSystemStatus

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

using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;public class KeywordManager : MonoBehavior
{KeywordRecognizer keywordRecognizer;Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();void Start(){//初始化关键词keywords.Add("activate", () =>{// 想执行的行为
        });keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;//开始识别
        keywordRecognizer.Start();}private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args){System.Action keywordAction;// 如果识别到关键词就调用if (keywords.TryGetValue(args.text, out keywordAction)){keywordAction.Invoke();}}
}

语法识别 Grammar Recognition


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

GrammarRecognizer

命名空间:UnityEngine.Windows.Speech

类: GrammarRecognizerPhraseRecognizedEventArgsSpeechErrorSpeechSystemStatus

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

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

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

public class GrammarManager : MonoBehavior
{private GrammarRecognizer grammarRecognizer;void Start(){//初始化grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;//开始识别
        grammarRecognizer.Start();}private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args){SemanticMeaning[] meanings = args.semanticMeanings;// 执行动作
    }
}

听写 Diction


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

DictationRecognizer

命名空间: UnityEngine.Windows.Speech

: DictationRecognizerSpeechErrorSpeechSystemStatus

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

完整的使用方法如下:

public class DictionManager : MonoBehavior
{private DictationRecognizer dictationRecognizer;void Start(){dictationRecognizer = new DictationRecognizer();//注册事件dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;dictationRecognizer.DictationError += DictationRecognizer_DictationError;//开始听写识别
        dictationRecognizer.Start();}private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence){// 自定义行为
    }private void DictationRecognizer_DictationHypothesis(string text){// 自定义行为
    }private void DictationRecognizer_DictationComplete(DictationCompletionCause cause){// 自定义行为
    }private void DictationRecognizer_DictationError(string error, int hresult){// 自定义行为
    }void OnDestroy(){//释放资源dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete;dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis;dictationRecognizer.DictationError -= DictationRecognizer_DictationError;dictationRecognizer.Dispose();}
}

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

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

同时使用以上特性


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

PhraseRecognitionSystem.Shutdown();

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

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之Spatial Sounds 空间声音

    本文主要讲述如何在项目中使用空间声音特性.我们主要讲述必须的插件组件和Unity声音组件和属性的设置来确保空间声音的实现. Enabling Spatial Sound in Unity 在Unity ...

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

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

  4. HoloLens开发手记-硬件细节 Hardware Detail

    微软HoloLens是世界第一款完全无线缆的全息计算机.通过在新方式上赋予用户的全息体验,HoloLens重新定义了个人计算(Personal Computing).为了将3D全息图形固定到你周围的真 ...

  5. HoloLens开发手记-配置开发环境 Install the tools

    随着Build 2016开发者大会的结束,HoloLens开发包也正式开放下载.Hololens没有独立的SDK,开发特性被集成到最新的Visual Studio Update 2中.如果你没有Hol ...

  6. HoloLens开发手记-全息Hologram

    全息 Hologram HoloLens使我们可以通过周边世界的光线和声音来创建全息场景和物体,使得它们像真实物体那样.全息场景能够响应你的凝视.手势和语音指令,同时还会和你周边世界的表面交互.借助全 ...

  7. HoloLens开发手记 - HoloLens shell概述 HoloLens shell overview

    使用HoloLens时,shell是由你周围的世界和来自系统的全息图像构成.我们将这种空间成为混合世界(mixed world). shell包含了一个可以让你将全息图像和应用放置在世界中的开始菜单( ...

  8. HoloLens开发手记 - 语音输入 Voice input

    语音是HoloLens三大重要输入形式之一.它允许你直接通过语言控制全息图像,而不用借助手势.你只要凝视全息图像然后说出语音命令即可.语音输入是自然的交互方式,它能够很好的改善复杂的交互,因为通过一条 ...

  9. HoloLens开发手记 - 手势输入 Gesture input

    手势是HoloLens三个首要输入形式之一.一旦你使用凝视定位了一个全息图像,手势允许你与它交互.手势输入允许你使用手或者点击器原生地与全息图像交互. 手势之外,你也可以在应用中使用语音输入来交互. ...

  10. HoloLens开发手记 - 使用HoloLens模拟器 Using HoloLens emulator

    首先下载HoloLens模拟器 HoloLens模拟器运行在没有真机的情况下在你的PC上测试应用,属于HoloLens开发工具系列.模拟器使用了Hyper-V虚拟机.通常通过传感器获取的人体和环境输入 ...

最新文章

  1. 修改了n次效率还是不可接受
  2. vscode 如何实时显示html文件?
  3. mint ui datetimepicker 手机端jquery datetimepicker 总结应用
  4. 小度智能音箱维修点_会投屏电视的智能音箱——小度智能音箱PLAY青春版轻体验...
  5. C语言试题四之计算并输出3到n之间所有素数的平方根之和
  6. 【操作系统】进程调度(4):I/O、不可预测的运行时间
  7. 点击按钮弹出iframe_WEB安全(四) :CSRF与点击劫持
  8. [Android官方API阅读]___System Permissions
  9. python账户密码_python02 用户名密码
  10. Geohash介绍及针对具体需求的改良
  11. pythonopencv项目_Opencv python之车辆识别项目
  12. 关于原生ajax的那些事
  13. java半角英数check_java - 关于全角半角介绍以及处理方式
  14. xp计算机用户名和密码忘记了怎么办,电脑的XP系统密码被不小心忘记了怎么办?...
  15. 华为鸿蒙新平板,华为鸿蒙Beta 3.0 版本推送更新 预装鸿蒙新平板获入网许可
  16. 集合框架·List集合简介
  17. Pygame中的两种键盘按键捕获方式
  18. Hadoop学习笔记(一)
  19. Spring JDBC 访问数据库
  20. 视频教程-人工智能-数学基础视频课程-机器学习

热门文章

  1. PKU 3468 A Simple Problem with Integers
  2. matlab状态转空间,matlab - 如何在Matlab中使用状态空间模型避免tf()命令 - 堆栈内存溢出...
  3. unity newtonsoft 反序列化报空_基于Unity3D的大地形研究(2):资源序列化与材质加载...
  4. golang语言的类型
  5. Python 多线程基本步骤
  6. 帆软高级函数应用之文本函数
  7. gff3转mysql_GBrowse的安装和使用
  8. python中的request库_Python中的Requests库简要总结
  9. sql语句mysql_MySQL基本的Sql语句
  10. pytorch tensor_Pytorch之Tensor操作