Hololens入门之语音识别(语音听写)

听写即语音转文字,此前我们称之为Speech to Text,同样是Windows Store应用特性之一。在HoloLens上,发挥了比其他平台更大的作用。因为HoloLens的操作特性,使用键盘操作起来十分不方便,语音则无此问题,能大大提高输入效率

听写特性用于将用户语音转为文字输入,同时支持内容推断和事件注册特性。Start()和Stop()方法用于启用和禁用听写功能,在听写结束后需要调用Dispose()方法来关闭听写页面。GC会自动回收它的资源,如果不Dispose会带来额外的性能开销

本文示例在 Hololens入门之空间锚与场景保持 示例的基础上进行修改开发,实现语音听写的功能,并用Text显示识别结果。

1、新建UI Text,用于显示识别结果



2、在Manager上新增脚本组件DictionManager.cs

新增脚本并将 Text 拖拽到Dictation Display上


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

public class DictionManager : MonoBehaviour {

    [Tooltip("A text area for the recognizer to display the recognized strings.")]
    public Text DictationDisplay;
    private DictationRecognizer dictationRecognizer;

    // Use this for initialization
    void Start () {
        dictationRecognizer = new DictationRecognizer();
        //订阅事件
        dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;
        dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
        dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;
        dictationRecognizer.DictationError += DictationRecognizer_DictationError;
        
        dictationRecognizer.Start();
    }

    private void DictationRecognizer_DictationError(string error, int hresult)
    {
        DictationDisplay.text = "error";
    }

    private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
    {
        DictationDisplay.text = "complete:";
        //如果在听写开始后第一个5秒内没听到任何声音,将会超时
        //如果识别到了一个结果但是之后20秒没听到任何声音,也会超时
        if (cause == DictationCompletionCause.TimeoutExceeded)
        {
            //超时后本例重新启动听写识别器
            DictationDisplay.text += "Dictation has timed out.";
            dictationRecognizer.Stop();
            DictationDisplay.text += "Dictation restart.";
            dictationRecognizer.Start();
        }
    }

    private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
    {
        DictationDisplay.text = "result:";
        DictationDisplay.text += text;
    }

    private void DictationRecognizer_DictationHypothesis(string text)
    {
        DictationDisplay.text = "Hypothesis:";
        DictationDisplay.text += text;
    }

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

    void OnDestroy()
    {
        dictationRecognizer.Stop();
        dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis;
        dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
        dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete;
        dictationRecognizer.DictationError -= DictationRecognizer_DictationError;
        dictationRecognizer.Dispose();
    }
}
3、编译设置

由于语音听写功能需要用到microphone和网络,所以编译生成工程时添加microphone和网络选项


4、运行测试

当说出"what can i do for you"时,在屏幕上打印相应的文字信息



如果在听写开始后第一个5秒内没听到任何声音,将会超时
如果识别到了一个结果但是之后20秒没听到任何声音,也会超时

本文中超时后立马再次启动听写功能


5、遗留问题

未找到语言设置,不知道是不是还不支持听写中文,如果有读者发现可以进行语言设置,希望能够给出答复


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐