Работает ли класс PhraseListGrammar из Azure "Речевой сервис" только при использовании американского английского в качестве языка распознавания речи?
Я настраиваю приложение для Android с использованием Unity, где я хочу применить речь к текстовым функциям, для этого я использую SDK Speech-Service Azure. Проблема в том, что, когда я говорю слово, распознаватель пытается угадать слово, а не даже учитывать то, что я говорил, например, когда произносил псевдословы.
Вот почему я хотел реализовать список фраз, который, как предполагается, поможет вам улучшить точность распознавания речи.
Поэтому я использовал класс 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;
}
}
Я ожидал, что это улучшит распознавание добавленных ключевых слов, но это не работает.