Hololens 语音命令

作者:追风剑情 发布于:2023-1-30 17:37 分类:Unity3d

官方文档
UnityEngine.Windows.Speech.DictationRecognizer
UnityEngine.Windows.Speech.GrammarRecognizer
UnityEngine.Windows.Speech.KeywordRecognizer
UnityEngine.Windows.Speech.PhraseRecognitionSystem
UnityEngine.Windows.Speech.PhraseRecognizedEventArgs
UnityEngine.Windows.Speech.PhraseRecognizer
UnityEngine.Windows.Speech.SemanticMeaning

开启语音识别:【设置】->【隐私】->【语音】->开启“语音识别”。如果无法连网,务必关闭“在线语音识别”

1、在场景中选中MixedRealityToolkit

1111.png

2、点击Clone复制一份DefaultHoloLens2ConfigurationProfile

2222.png

3、选择Input

333.png

4、在Speech中配置语音命令

4444.png

Keyword: 语音命令关键词 (支持中文)
LocalizationKey: 本地化key
KeyCode: 与语音命令等效的键盘输入
Action: 要触发的行为。例如: Select相当于执行Click操作。

5、处理语音命令

在希望处理语音命令的GameObject上挂上SpeechInputHandler脚本。为语音命令设置回调函数。

6666.png

Is Focus Required: 勾选上后,只有当对象获得焦点后才会响应语音命令。
Persistent Keywords: 勾选上后,脚本会将GameObject设置为不销毁,即DontDestroyOnLoad(gameObject)。 勾上Persistent Keywords的GameObject必须位于场景层次结构的根级别。
Speech Confirmation Tooltip Prefab: 获得焦点后要显示的语音输入提示信息。

当GameObject处于隐藏状态时,SpeechInputHandler脚本是不会接受语音命令的。因为SpeechInputHandler在OnEnable事件回调中注册语音监听 ,在OnDisable事件回调中注销语音监听。

//关闭语音命令识别器
UnityEngine.Windows.Speech.PhraseRecognitionSystem.Shutdown();
//重启语音命令识别器
UnityEngine.Windows.Speech.PhraseRecognitionSystem.Restart();

【Bug】应用程序进入后台,再回到前台,语音识别器失效。
官方issues中已有人提交过此Bug
https://github.com/microsoft/MixedRealityToolkit-Unity/issues/10249
官方回复是Windows API Bug
https://fogbugz.unity3d.com/default.asp?1276443_feij5mjans4g1jds
解决方案:应用回到前台后重启语音识别器。

using UnityEngine;
using UnityEngine.Windows.Speech;

public class ApplicationBehaviour : MonoBehaviour
{
    private void Awake()
    {
        DontDestroyOnLoad(gameObject);
    }

    private void OnApplicationPause(bool pause)
    {
        if (!pause)
        {
            //官方给的解决方案是重启语音识别
            //经实际测试,应用程序回到前台后要延迟几秒重启语音识别才会生效。
            Invoke("RecongnitionRestart", 5);
        }
    }

    // 重启语音命令识别器
    private void RecongnitionRestart()
    {
        PhraseRecognitionSystem.Shutdown();
        PhraseRecognitionSystem.Restart();
    }
} 

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号