我正在尝试统一创建语音识别游戏。我不明白的是,当我使用“左”或“前进”之类的单词时,它很容易检测到它。但是就字母而言,即使我遵循相同的检测方法,它也根本无法检测到。游戏只需要使用单个字母,有人知道如何通过语音识别来统一检测字母吗?
以下是我使用的代码:
private KeywordRecognizer keywordRecognizer;
private Dictionary<string, Action> actions = newDictionary<string,Action>();
void Update{
actions.Add("Left", Left);//this works
actions.Add("A", Alpha);//this doesn't
keywordRecognizer = new KeywordRecognizer(actions.Keys.ToArray());
keywordRecognizer.OnPhraseRecognized += RecognizedSpeech;
keywordRecognizer.Start();
}
private void RecognizedSpeech(PhraseRecognizedEventArgs speech){
Debug.Log(speech.text);
actions[speech.text].Invoke();
word = speech.text;
results.text = "You said: <b>" + word + "</b>";
}
private void Left(){
transform.Translate(-1, 0, 0);
}
private void Alpha(){
transform.Translate(1, 0, 0);
}
答案 0 :(得分:1)
简而言之:单字母识别真的很难。 试想一下b,p和d之间的区别。
您可以做的一件事是将KeywordRecognizer设置为低置信度
keywordRecognizer = new KeywordRecognizer(actions.Keys.Array(), ConfidenceLevel.low);
但是,这将无济于事,因为之后您很可能会获得更多错误的认识。此外,如果您想说出背靠背的命令,则KeywordRecognizer仍将使您失败,因为他处理第一个关键字并忽略了在处理延迟期间所说的内容。
替代方法是DictationRecognizer,它不侦听特定的关键字,但是将用户语音转换为文本,然后可以扫描您的关键字/字母。显然,这也有很大的延迟。
因此,如果您不能延迟,那么我想唯一有效的解决方案是重新考虑为什么需要字母识别功能,而不是像“ alpha”而不是“ a”这样的完整关键字。