Hololens Unity 开发之 语音识别

简介: 一、概述HoloToolKit Unity 包提供了三种 语音输入的方式 :· Phrase Recognition 短语识别* KeywordRecognizer 单一关键词识别* GrammarRecognizer 语法识别· · Dictation Recognition 听写识别* Dic...
一、概述
HoloToolKit Unity 包提供了三种 语音输入的方式 :
· 
Phrase Recognition 短语识别
* KeywordRecognizer 单一关键词识别
* GrammarRecognizer 语法识别
· 
· 
Dictation Recognition 听写识别
* DictationRecognizer 将声音识别转化为文字
· 
Note: KeywordRecognizer 和 GrammarRecognizer 是主动活跃识别的方式~ 也就是说调用开始识别的方法,那么久处于活跃状态开始识别,而DictationRecognizer只要注册了就就在默默的监听语音输入,一旦监听到关键词~那么久触发回调~
二、Unity开发打开Microphone权限
下面是官方文档 讲解 如何打开microphone权限
The Microphone capability must be declared for an app to leverage Voice input.
1. In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
2. Click on the "Windows Store" tab
3. In the "Publishing Settings > Capabilities" section, check the Microphone capability
三、Phrase Recognition 短语识别
To enable your app to listen for specific phrases spoken by the user then take some action, you need to:
1. Specify which phrases to listen for using a KeywordRecognizer or GrammarRecognizer
2. Handle the OnPhraseRecognized event and take action corresponding to the phrase recognized
使用短语识别嘞~需要做两个步骤:
1. 指定需要监听的 短语 或者 关键词
2. 处理识别到 短语 或者 关键词 之后的事件回调 ~ OnPhraseRecognized
1、 关键词识别 (直接Demo代码~)
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Windows.Speech;using System.Linq;
public class VoiceInputDemo : MonoBehaviour {

public Material yellow;
public Material red;
public Material blue;
public Material green;

/// <summary>
/// 关键词识别对象
/// </summary>
private KeywordRecognizer keywordRecognizer;

/// <summary>
/// 存放关键词的字典
/// </summary>
private Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();
// Use this for initialization
void Start () {

// 向字典中添加关键词,key为关键词, vallue为一个匿名action
keywords.Add("yellow", () =>
{
Debug.Log("听到了 yellow");
transform.GetComponent<MeshRenderer>().material = yellow;
});

keywords.Add("red", () =>
{
Debug.Log("听到了 red");
transform.GetComponent<MeshRenderer>().material = red;
});

keywords.Add("green", () =>
{
Debug.Log("听到了 green");
transform.GetComponent<MeshRenderer>().material = green;
});

keywords.Add("blue", () =>
{
Debug.Log("听到了 blue");
transform.GetComponent<MeshRenderer>().material = blue;
});

// 初始化关键词识别对象
keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

// 添加关键词代理事件
keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

// 注意: 这方法一定要写,开始执行监听
keywordRecognizer.Start();
}

private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{

System.Action keywordAction;
// if the keyword recognized is in our dictionary, call that Action.
// 如果关键字在我们的字典中被识别,调用该action。
if (keywords.TryGetValue(args.text, out keywordAction))
{
Debug.Log("听到了,进入了事件方法 关键词语 : " + args.text.ToString());

// 执行该action
keywordAction.Invoke();
}
}

// Update is called once per frame
void Update () {

}
}
## 2、 语法识别 GrammarRecognizer
按照官方文档上来说的 我得 创建一个 SRGS 的XML文件放在 StreamingAssets 文件夹下~不过我没有做到英文语法输入的需求 ~ 感兴趣的点击  https://msdn.microsoft.com/en-us/library/hh378349 (v=office.14).aspx 自己查看官方文段对SRGS的讲解~
下面贴的一段官方文档的代码
Once you have your SRGS grammar, and it is in your project in a StreamingAssets folder:
<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml
Create a GrammarRecognizer and pass it the path to your SRGS file:
private GrammarRecognizer grammarRecognizer;
grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");
Now register for the OnPhraseRecognized event
grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;
You will get a callback containing information specified in your SRGS grammar which you can handle appropriately. Most of the important information will be provided in the semanticMeanings array.
private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args){
SemanticMeaning[] meanings = args.semanticMeanings;
// do something
}
Finally, start recognizing!
grammarRecognizer.Start();
四、听写1、概述
DictationRecognizer 使用这个对象可以识别语音输入转化为文本,使用这个对象有三个步骤~
1. 创建一个DictationRecognizer对象
2. 注册Dictation 事件
3. 开始识别听写
2、开启网络客户端权限
The "Internet Client" capability, in addition to the "Microphone" capability mentioned above, must be declared for an app to leverage dictation.
1. In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player" page
2. Click on the "Windows Store" tab
3. In the "Publishing Settings > Capabilities" section, check the InternetClient capability
3、Demo代码示例~
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Windows.Speech;
public class VoiceDictationDemo : MonoBehaviour
{

private DictationRecognizer dictationRecognizer;

// Use this for initialization
void Start()
{

// 定义一个听写对象
dictationRecognizer = new DictationRecognizer();

// 注册一个 结果回调 事件
dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
// 注册一个 完成 事件
dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
// 注册一个 错误 事件
dictationRecognizer.DictationError += DictationRecognizer_DictationError;
// 注册一个 识别语句 的 事件
dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

dictationRecognizer.Start();
}

private void DictationRecognizer_DictationHypothesis(string text)
{
Debug.Log("进入了Hypothesis 的 事件 回调 ~ " + text);
dictationRecognizer.Start();
}

private void DictationRecognizer_DictationError(string error, int hresult)
{
Debug.Log("进入了Error 的 事件 回调 ~ " + error + " 状态码 " + hresult);
dictationRecognizer.Start();
}

private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{

Debug.Log("进入了Complete 的 事件 回调 ~ " + cause);
dictationRecognizer.Start();
}

private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
{
Debug.Log("进入了Result 的 事件 回调 ~ " + text + " 枚举 " + confidence);
dictationRecognizer.Start();
}

void OnDestroy()
{
// 销毁事件
dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete;
dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis;
dictationRecognizer.DictationError -= DictationRecognizer_DictationError;
dictationRecognizer.Dispose();
}

}
用有道 里面 的英语短视频 做了下测试~ 几乎能达到百分之九十八 以上的 识别率。。感叹微软做的挺不错的~
五、同时使用 语音识别 和 听写 (文档翻译)
If you want to use both phrase recognition and dictation in your app, you'll need to fully shut one down before you can start the other. If you have multiple KeywordRecognizers running, you can shut them all down at once with:
如果你想同时使用 语音识别 和 听写识别,那么你必须关闭一个再启动另外一个~ 如果你有多个语音识别的对象KeywordRecognizers,那么你可以通过下面的方法把他们全部关闭~
PhraseRecognitionSystem.Shutdown();
In order to restore all recognizers to their previous state, after the DictationRecognizer has stopped, you can call:
当然,你也可以恢复关闭前的所有状态,当在你的听写识别结束的时候,你可以调用下面的方法恢复之前的语音识别~
PhraseRecognitionSystem.Restart();
You could also just start a KeywordRecognizer, which will restart the PhraseRecognitionSystem as well.
当然,你也可以只启动一个KeywordRecognizer语音识别对象~同样的也是用PhraseRecognitionSystem来控制其暂停或者恢复~

更多unity2018的功能介绍请到paws3d学习中心查找。
相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
4月前
|
算法 vr&ar C#
使用Unity进行虚拟现实开发:深入探索与实践
【8月更文挑战第24天】使用Unity进行虚拟现实开发是一个充满挑战和机遇的过程。通过掌握Unity的VR开发技术,你可以创造出令人惊叹的VR体验,为用户带来前所未有的沉浸感和乐趣。随着技术的不断进步和应用场景的不断拓展,VR开发的未来充满了无限可能。希望本文能为你提供有用的指导和启发!
|
3月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
284 0
|
3月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
157 0
|
4月前
|
vr&ar 图形学 开发者
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
154 0
|
6月前
|
C# 图形学 C++
使用vscode开发C#+unity没有代码提示问题
使用vscode开发C#+unity没有代码提示问题
92 0
使用vscode开发C#+unity没有代码提示问题
|
6月前
|
图形学
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
93 0
|
6月前
|
图形学
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
104 0
|
6月前
|
图形学 索引
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)
150 0
|
7月前
|
JSON 自然语言处理 Java
Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)
Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)
350 0
|
7月前
|
图形学
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】