为什么 Unity 语音识别对单个字母不起作用?
Why doesn't Unity voice recognition work for single letters?
我正在尝试统一创建一个语音识别游戏。我不明白的是,当我使用诸如 "left" 或 "forward" 之类的词时,它很容易检测到它。但是当涉及到只使用一个字母时,即使我按照与 detect.The 相同的方法进行游戏,它也根本检测不到它只需要使用单个 letter.Does 任何人都知道如何通过语音识别来检测字母统一?
以下是我使用的代码:
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);
}
简而言之:单个字母识别真的很难。
想象一下 b、p 和 d 之间的差异。
您可以做的一件事是将 KeywordRecognizer 设置为低置信度
keywordRecognizer = new KeywordRecognizer(actions.Keys.Array(), ConfidenceLevel.low);
但是,这对您没有帮助,因为之后您很可能会有更多的错误识别。此外,如果您想背靠背说出命令,KeywordRecognizer 无论如何都会让您失败,因为他处理第一个关键字并忽略在处理延迟期间说出的关键字。
另一种选择是 DictationRecognizer,它不侦听特定的关键词,而是将用户语音翻译成文本,然后您可以在其中扫描关键词/字母。显然,这也有很大的延迟。
所以,如果你不能延迟,那么我认为唯一有效的解决方案是重新考虑为什么你需要字母识别而不是像 "alpha" 这样的完整关键字而不是 "a"。
我正在尝试统一创建一个语音识别游戏。我不明白的是,当我使用诸如 "left" 或 "forward" 之类的词时,它很容易检测到它。但是当涉及到只使用一个字母时,即使我按照与 detect.The 相同的方法进行游戏,它也根本检测不到它只需要使用单个 letter.Does 任何人都知道如何通过语音识别来检测字母统一?
以下是我使用的代码:
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);
}
简而言之:单个字母识别真的很难。 想象一下 b、p 和 d 之间的差异。
您可以做的一件事是将 KeywordRecognizer 设置为低置信度
keywordRecognizer = new KeywordRecognizer(actions.Keys.Array(), ConfidenceLevel.low);
但是,这对您没有帮助,因为之后您很可能会有更多的错误识别。此外,如果您想背靠背说出命令,KeywordRecognizer 无论如何都会让您失败,因为他处理第一个关键字并忽略在处理延迟期间说出的关键字。
另一种选择是 DictationRecognizer,它不侦听特定的关键词,而是将用户语音翻译成文本,然后您可以在其中扫描关键词/字母。显然,这也有很大的延迟。
所以,如果你不能延迟,那么我认为唯一有效的解决方案是重新考虑为什么你需要字母识别而不是像 "alpha" 这样的完整关键字而不是 "a"。