使用美国英语作为语音识别语言时,Azure“语音服务”中的“ PhraseListGrammar类”是否可以正常工作?

时间:2019-05-17 13:32:31

标签: c# android unity3d azure-cognitive-services azure-speech

我正在使用Unity设置适用于Android的应用程序,我想在其中将语音应用于文本功能,为此,我正在使用 Azure语音服务的SDK 。问题在于,当我说一个单词时,识别器会尝试猜测单词,而不是考虑我在说什么,例如说假单词时。

这就是为什么我要实现词组列表的原因,它旨在帮助您提高语音识别的准确性。

因此,我使用了 PhraseListGrammar类,当使用“ en-US”作为 SpeechRecognitionLanguage 时,它运行良好,但是当我尝试使用“ en-ES”,只是省略了所有添加的短语,其他所有语言的问题仍然存在,也许是我做错了。

昨天我正在尝试这种方法,使用“ en-US”时它像一种魅力一样工作,现在它不起作用了,因此一定缺少一些东西。

    var config = SpeechConfig.FromSubscription("mysubscriptionkey", "westus2");
    // config.SpeechRecognitionLanguage = "en-US";
    config.SpeechRecognitionLanguage = "es-ES";
    config.OutputFormat = OutputFormat.Detailed;

    using (var recognizer = new SpeechRecognizer(config))
    {
        lock (threadLocker)
        {
            waitingForReco = true;
        }
        PhraseListGrammar phraseList = PhraseListGrammar.FromRecognizer(recognizer);
        phraseList.AddPhrase("Mover un badodo");
        phraseList.AddPhrase("lolololalala");
        phraseList.AddPhrase("badodo");


        var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);

        if (result.Reason == ResultReason.RecognizedSpeech)
        {
            consoleMessage = JsonConvert.SerializeObject(result.Best());
            newMessage = JsonConvert.SerializeObject(result);
        }
        else if (result.Reason == ResultReason.NoMatch)
        {
            newMessage = "NOMATCH: Speech could not be recognized.";
        }
        else if (result.Reason == ResultReason.Canceled)
        {
            var cancellation = CancellationDetails.FromResult(result);
            newMessage = $"CANCELED: Reason={cancellation.Reason} ErrorDetails={cancellation.ErrorDetails}";
        }

        lock (threadLocker)
        {
            cmessage = consoleMessage;
            message = newMessage;
            waitingForReco = false;
        }
    }

我希望它可以改善对添加的关键字的识别,但是不起作用。

0 个答案:

没有答案
相关问题