三、Windows10平台下Unity3d的语音识别——听写识别

一、Windows10平台下Unity3d的语音识别——关键字识别
二、Windows10平台下Unity3d的语音识别——语法识别

Dictation Recognizer(听写识别)

听写识别是用来听任何单词/语音,用户将发音。您可以将语音文本显示给用户。它是对语音的连续识别。

Windows Store构建的发布设置:

如果您想为windows store构建应用程序,那么可以启用Internet和麦克风功能来利用听写识别。

  • 在Unity编辑器player setting. (Edit -> Project Settings -> Player)
  • 选择 “Windows Store” 标签
  • 检查麦克风(Publishing Settings -> Capabilities)

听写识别

听写识别是用来将语音转换为文本的。在使用听写识别器前,请先联网,否则会出现网络故障错误。

让我们看看如何实现听写识别。

Step 1: 创建听写识别器对象

DictationRecognizer dictationRecognizer = new DictationRecognizer();

Step 2: 处理听写事件
听写识别提供了四种类型的注册事件

  • DictationResult
  • DictationComplete
  • DictationHypothesis
  • DictationError

DictationResult事件
该事件在用户说话时暂停时触发,通常是在句子的最后。将在这里返回完整的识别字符串。
您需要先订阅事件:

dictationRecognizer.DictationResult += onDictationResult;

然后处理事件:

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

DictationHypothesis事件
此事件在用户说话时连续触发。当识别器侦听时,它将为此提供文本。
您需要先订阅事件:

dictationRecognizer.DictationHypothesis += onDictationHypothesis;

然后处理事件:

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

DictationComplete事件
当听写识别器停止时触发此事件。识别程序可以通过调用stop()方法、超时或遇到任何错误来停止。

您需要先订阅事件:

dictationRecognizer.DictationComplete += onDictationComplete;

然后处理事件:

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

超时条件:

  • 如果识别器启动且5秒钟内没有侦听任何内容,它将超时。
  • 如果识别器给出了结果,然后它在20秒内不监听任何内容,它将超时。

DictationError事件
当发生错误时将触发此事件。

您需要先订阅事件:

dictationRecognizer.DictationError += onDictationError;

然后处理事件:

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

Step 3: 开始识别

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”.
听写识别输出

可能出现的错误: 当我运行上述代码时,我得到了错误——“ERROR: StartAsync on the continuous recognition session failed unexpectedly! [Operation has failed with error 0x80045509: (null)] "
在这里插入图片描述

如果您得到相同的错误,那么要修复这个问题,您需要更改机器中语音系统的策略设置。

  • 要更改策略设置,请导航到System settings -> Privacy
    在这里插入图片描述
  • 从左侧面板选择speech, ink and typing,点击Get to Know me按钮,更改语音听写的策略选项。
    在这里插入图片描述

如何在同一个应用程序中同时使用短语和听写识别?
如文章开头所述,你不能同时使用听写和短语识别。因此,如果您希望这两个特性都出现在您的应用程序中,那么在启动另一个之前先停止一个。

希望你对如何在unity3d软件中实现语音识别有所了解。请张贴您的意见,查询和反馈。感谢你的阅读。

猜你喜欢

转载自blog.csdn.net/weixin_41743629/article/details/85080794