【问题标题】:Why doesn't Unity voice recognition work for single letters?为什么 Unity 语音识别不适用于单个字母?
【发布时间】:2021-04-11 05:43:49
【问题描述】:

我正在尝试统一创建一个语音识别游戏。我不明白的是,当我使用诸如“左”或“前进”之类的词时,它很容易检测到它。但是当只使用一个字母时,即使我按照相同的方法进行检测,它也根本没有检测到它。游戏只需要使用单个字母。有人知道如何通过统一的语音识别来检测字母吗?

以下是我使用的代码:

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);
}

【问题讨论】:

  • 这可能需要训练语音识别系统,对此不确定。
  • 在任务栏中搜索 Windows 语音识别

标签: c# unity3d voice-recognition


【解决方案1】:

简而言之:单个字母识别真的很难。 想象一下 b、p 和 d 之间的区别。

您可以做的一件事是将您的 KeywordRecognizer 设置为低置信度

keywordRecognizer = new KeywordRecognizer(actions.Keys.Array(), ConfidenceLevel.low);

但是,这对您没有帮助,因为之后您很可能会有更多错误的认识。此外,如果您想背靠背说出命令,KeywordRecognizer 无论如何都会让您失败,因为他会处理第一个关键字并忽略在处理延迟期间说出的那些。

另一种选择是 DictationRecognizer,它不听特定的关键词,而是将用户的声音翻译成文本,然后你可以扫描你的关键词/字母。显然,这也有很大的延迟。

因此,如果您不能延迟,那么我认为唯一有效的解决方案是重新考虑为什么您需要字母识别而不是完整的关键字,例如“alpha”而不是“a”。

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多