hololens开发手记——Unity之语音输入
来源:互联网 发布:汉王手写板软件 编辑:程序博客网 时间:2024/05/18 02:22
对于HoloLens,语音输入是三大基本输入方式之一,广泛地运用在各种交互中。HoloLens上语音输入有三种形式,分别是:
- 语音命令 Voice Command
- 听写 Diction
- 语法识别 Grammar Recognition
语音命令 Voice Command
对于做过Windows Phone或许Windows Store应用开发的人来说,语音命令是经常使用到的特性。开发者可以通过为应用设定关键词,和对应的行为,来为用户提供语音命令体验。当用户说出关键词时,预设的动作就会被调用。在HoloLens上,语音命令也是此模式。
KeywordRecognizer
命名空间: UnityEngine.Windows.Speech
类: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
使用方法很简单,通过注册<关键词>来初始化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
类: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus
在你创建好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
类: DictationRecognizer, SpeechError, SpeechSystemStatus
听写特性用于将用户语音转为文字输入,同时支持内容推断和事件注册特性。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(); }}
注意:以下情况中,听写识别会自动触发超时行为:
- 如果在听写开始后第一个5秒内没听到任何声音,将会超时
- 如果识别到了一个结果但是之后20秒没听到任何声音,也会超时
同时使用以上特性
如果你想同时使用语音命令、语法识别和听写特性,那么一定要在完全关闭当前语音识别行为后再开始另一个识别动作。如果有多个KeywordRecognizer在运行,你可以使用如下代码一次性关闭它们:
PhraseRecognitionSystem.Shutdown();
为了从先前状态恢复所有的识别器,可以在听写识别完成后调用如下代码:
PhraseRecognitionSystem.Restart();
当然你也可以重新开始一个 KeywordRecognizer,这将会重启PhraseRecognitionSystem,达到上面的效果。
总结
Windows平台上的语音识别特性从Windows 8以来一直都很强大,但是在HoloLens上会有更大的用武之地。这是最基本的交互方式,从系统层级上提供了强大的支持,甚至和Cortana结合到了一起,非常有用。
- hololens开发手记——Unity之语音输入
- Hololens输入——Unity语音输入
- Hololens开发手记--Unity之Persistence
- Hololens开发手记——Unity之World Anchor空间锚
- Hololens开发手记——Unity之Spatial Sounds空间声音
- HoloLens开发手记 - 语音识别(语音命令)
- HoloLens开发手记 - 语音识别(听写识别)
- Hololens开发之手势输入
- HoloLens开发手记
- HoloLens开发手记
- HoloLens开发手记
- HoloLens开发——Locatable camera in Unity
- HoloLens开发手记 - UI搭建
- Unity Hololens开发教程
- Hololens开发之HoloLens简介
- Hololens入门之语音识别(语音命令)
- Hololens入门之语音识别(语音听写)
- Hololens入门之使用Unity开发一个简单的应用
- Mina学习笔记(1) mina简介
- python3.5+selenium3.4自动化测试2_参数化
- Java web之一
- Android 高效调试神器 JRebel
- 判断101-200之间有多少个素数,并输出所有素数。
- hololens开发手记——Unity之语音输入
- JAVA中的static关键字
- 线程池
- JQuery 元素位置
- Service流程
- 在Node.js中实现文件复制的方法和实例
- contenteditable="true"的div事件处理
- 经典Prim算法题目及代码
- 机器学习深度学习基础笔记(4)——Backpropagation算法实现