Работает ли "PhraseListGrammar Class" из Azure "Speech Service" только при использовании английского языка США в качестве языка распознавания речи? - PullRequest
2 голосов
/ 17 мая 2019

Я настраиваю приложение для Android с использованием Unity, в котором я хочу применить речь к текстовым функциям, для этого я использую SDK речевого сервиса Azure . Проблема в том, что, когда я говорю слово, распознаватель пытается угадать слово, а не даже учитывать то, что я говорил, например, когда произносил псевдословы.

Вот почему я хотел реализовать Phrase List , который, как предполагается, поможет вам повысить точность распознавания речи.

Итак, я использовал PhraseListGrammar Class , и он работал хорошо при использовании «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;
        }
    }

Я ожидал, что это улучшит распознавание добавленных ключевых слов, но это не работает.

...