我正在使用 Unity 为 Android 设置一个应用程序,我想在其中将语音应用于文本功能,为此我正在使用Azure 的 Speech-Service 的 SDK。问题是当我说一个词时,识别器会尝试猜测这个词,而不是考虑我在说什么,例如在说伪词时。
这就是我想要实现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;
}
}
我希望它能够提高对添加的关键字的识别度,但它不起作用。