ue3dUnity中的语音识别

Unity中的语音识别

分类:
ue3d - Unity中的语音识别

在本文中3D天堂将介绍如何使用Windows语音API在unity中实现语音识别,示例中给出的实现也可用于虚拟现实 (VR) 应用程序。

Unity5.4.0开始,Unity引擎添加了Windows语音识别API(UnityEngine.Windows.Speech)用于识别语音输入,所有类型的Windows平台都支持这些API,但仅适用于Windows 10及以上操作系统。

关键信息

  • 命名空间:UnityEngine.Windows.Speech
  • Unity3d支持:Unity 5.4.0或更高版本
  • 操作系统支持:Windows 10及以上

语音识别

语音识别API可以分为两类

  1. 词组识别、关键字识别器、语法识别器
  2. 听写识别、听写识别器

3D天堂网提示不能同时使用词组识别听写识别,在单个时间实例中,只有一个识别应该在应用程序中处于活动状态。

词组识别

短语识别用于识别用户说出的特定短语,如果想为Windows Store构建应用程序,则启用麦克风功能以利用应用程序的语音输入。

  • 在Unity软件中转到播放器设置。
    • 编辑 → 项目设置 → 播放器
  • 选择Windows Store选项卡。
  • 检查发布设置中的麦克风功能。
    • 发布设置 → 功能

短语识别器可分为两种类型:关键字识别器和语法识别器。

关键字识别器

关键字识别器用于侦听给定字符串的数组,让看看如何实现关键字识别器。

  1. 定义字符串数组。
  2. 订阅和处理OnPhraseRecognized事件,当给定的短语被识别时,将调用此事件。
  3. 启动关键字识别器。

下面给出了实现关键字识别器的完整脚本,将此脚本复制到项目中并附加到任何游戏对象。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Windows.Speech;

public class KeyWordRecognizerBehaviour : MonoBehaviour {
	
	KeywordRecognizer keywordRecognizer;
	// keyword array
	public string[] Keywords_array;

	// Use this for initialization
	void Start () {
		// Change size of array for your requirement
		Keywords_array = new string[2];
		Keywords_array [0] = "hello";
		Keywords_array [1] = "I am from Zhejiang";

		// instantiate keyword recognizer, pass keyword array in the constructor
		keywordRecognizer = new KeywordRecognizer(Keywords_array);
		keywordRecognizer.OnPhraseRecognized += OnKeywordsRecognized;
		// start keyword recognizer
		keywordRecognizer.Start ();
	}

	void OnKeywordsRecognized(PhraseRecognizedEventArgs args)
	{
		Debug.Log ("Keyword: " + args.text + "; Confidence: " + args.confidence + "; Start Time: " + args.phraseStartTime + "; Duration: "  + args.phraseDuration);
		// write your own logic
	}
}

最终结果:

ue3d - Unity中的语音识别

可以同时有多个关键字识别器,但它们不应该监听共同的关键字。

如果在项目中使用多个关键字识别器,那么可以使用PhraseRecognitionSystem类通过单行代码停止并重新启动所有关键字识别器。

如下所示:

// shut down phrase recognition system. All keyword recognizer will be stopped
PhraseRecognitionSystem.Shutdown();
// restore all recognizer in the previous state
PhraseRecognitionSystem.Restart();

语法识别器

如果使用定义要侦听的特定语法的SRGS XML文件,则使用语法识别器,可以在这里找到有关SRGS XML文件格式的详细信息。

获得SRGS XML语法后,将其放入项目的流文件夹中,如果与关键字识别器相同,则语法识别器的实现。

  1. 加载SRGS语法
  2. 处理OnPhraseRecognized事件
  3. 启动语法识别器
using UnityEngine;
using UnityEngine.Windows.Speech;
using System;

public class GrammerRecognizerBehaviour : MonoBehaviour {

	GrammarRecognizer grammerRecognizer;

	// Use this for initialization
	void Start () {
		// pass path of your grammar XML in the constructor
		grammerRecognizer = new GrammarRecognizer ("Grammer path from streaming asset folder");
		grammerRecognizer.OnPhraseRecognized += OnGrammerRecognized;
		grammerRecognizer.Start ();
	}

	void OnGrammerRecognized(PhraseRecognizedEventArgs args)
	{
		// write your own logic
	}
}

听写识别

听写识别用于收听用户将发音的任何单词或语音,可以向用户显示正在说的内容的语音文本,它是对语音的连续识别。

Windows商店构建的发布设置:

如果想要为Windows商店构建的应用程序,则启用互联网麦克风功能以利用听写识别。

  1. 在Unity软件中转到播放器设置。
    • 编辑 → 项目设置 → 播放器
  2. 选择Windows Store选项卡。
  3. 在发布设置中检查麦克风、互联网功能。
    • 发布设置 → 功能

听写识别器

听写识别器用于将语音转换为文本,在使用听写识别器之前,需要连接到互联网,否则将收到网络故障错误。

现在来看看如何实现听写识别器,首先创建听写识别器对象

DictationRecognizer dictationRecognizer = new DictationRecognizer();

接着处理听写事件

听写识别器提供四种类型的事件来注册。

  1. 听写结果
  2. 听写完成
  3. 听写假说
  4. 听写错误

听写结果

当用户在说话时停顿时会触发此事件,完整的识别字符串将在此处返回。

需要先订阅听写结果事件

dictationRecognizer.DictationResult += onDictationResult;

然后处理事件:

void onDictationResult(string text, ConfidenceLevel confidence)
	{
		// write your logic here
	}

听写假说

用户说话时会连续触发此事件,当识别器收听时,它将为此提供文本,因此需要先订阅听写结果事件:

dictationRecognizer.DictationHypothesis += onDictationHypothesis;

然后处理事件:

void onDictationHypothesis(string text)
	{
		// write your logic here
	}

听写完成

当听写识别器停止时会触发此事件,识别器可能会通过调用Stop()方法、超时或遇到的任何错误而停止。

需要先订阅听写结果事件:

dictationRecognizer.DictationComplete += onDictationComplete;

然后处理事件:

void onDictationComplete(DictationCompletionCause cause)
	{
		// write your logic here
	}

超时条件:

  • 如果识别器启动但五秒钟内没有收听任何内容,它将超时。
  • 如果识别器给出结果,然后在二十秒内没有收听任何内容,它将超时。

听写错误

出现任何错误时都会触发此事件,则需要先订阅听写结果事件:

ictationRecognizer.DictationError += onDictationError;

然后处理事件:

void onDictationError(string error, int hresult)
	{
		// write your logic here
	}

启动识别器

dictationRecognizer.Start();

下面给出了实现听写识别器的完整脚本,将此脚本复制到项目中并附加到任何游戏对象。

using UnityEngine;
using System.Collections;
using UnityEngine.Windows.Speech;

public class DictationRecognizerBehaviour : MonoBehaviour {

	DictationRecognizer dictationRecognizer;


	// Use this for initialization
	void Start () {
		dictationRecognizer = new DictationRecognizer();

		dictationRecognizer.DictationResult += onDictationResult;
		dictationRecognizer.DictationHypothesis += onDictationHypothesis;
		dictationRecognizer.DictationComplete += onDictationComplete;
		dictationRecognizer.DictationError += onDictationError;

		dictationRecognizer.Start();
	}

	void onDictationResult(string text, ConfidenceLevel confidence)
	{
		// write your logic here
		Debug.LogFormat("Dictation result: " + text);
	}

	void onDictationHypothesis(string text)
	{
		// write your logic here
		Debug.LogFormat("Dictation hypothesis: {0}", text);
	}

	void onDictationComplete(DictationCompletionCause cause)
	{
		// write your logic here
		if (cause != DictationCompletionCause.Complete)
			Debug.LogErrorFormat ("Dictation completed unsuccessfully: {0}.", cause);
	}

	void onDictationError(string error, int hresult)
	{
		// write your logic here
		Debug.LogErrorFormat("Dictation error: {0}; HResult = {1}.", error, hresult);
	}
}

当运行上面的脚本时,可以对着麦克风说“Hello, how are you”。

输出结果:

ue3d - Unity中的语音识别

可能的错误:

当运行上面的代码时,出现错误 ERROR:  StartAsync on the continuous recognition session failed unexpectedly! [Operation has failed with error 0x80045509: (null)]。

ue3d - Unity中的语音识别

如果遇到同样的错误,那么要解决此问题,需要更改机器中语音系统的策略设置。

请导航至系统设置 → 隐私

ue3d - Unity中的语音识别

从左侧面板中选择墨迹书写和键入个性化,然后单击开始了解你选项,开启语音听写的策略选项。

如果打开,则Windows可以了解你的声音和文字,从而提供更好的建议。

ue3d - Unity中的语音识别

如何同时使用短语和听写识别?

在语音识别处3D天堂做了标注,在同一应用程序中是不能同时使用听写和短语识别的。

因此,如果希望这两个功能都出现在应用程序中,那么在启动另一个之前先停止一个就行啦。

以上是3D天堂关于Unity的语音识别教程的全部内容,如果你有任何反馈,请随时在本页面下方留言。

相关信息

  • 类型:知识
  • 字数:1482
  • 字符:7707
  • 适用软件:Unity
  • 说明:无
  • 编号:155589

热门内容

提示:3D天堂作为服务提供者,尊重网络版权及知识产权,对某些行为的发生不具备充分的监控能力,若无意间侵犯到您的权利,请 联系我们,我们会在收到信息后尽快给予处理。

本站文章版权归本站自创作者所有,未经允许不得转载!