Почему распознавание голоса Unity не работает для отдельных букв? - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь создать игру по распознаванию голоса в единстве.Чего я не понимаю, так это того, что когда я использую такие слова, как «влево» или «вперед», это легко обнаруживается.Но когда речь идет просто об использовании буквы, она вообще не обнаруживает ее, хотя я следовал тому же методу для обнаружения. В игре требуется использовать только одну букву. Кто-нибудь знает, как обнаружить буквы с помощью распознавания голоса в единстве?

Ниже приведен код, который я использовал:

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

1 Ответ

1 голос
/ 25 июня 2019

Короче говоря: распознавание одной буквы действительно сложно.Просто представьте разницу между b, p и d.

Одна вещь, которую вы можете сделать, это установить для вашего KeywordRecognizer низкую достоверность

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

Но это не поможет вам, поскольку вы, скорее всего, будете иметьгораздо больше неправильных признаний потом.Кроме того, если вы хотите передать команды подряд, KeywordRecognizer все равно не даст вам результата, поскольку он обрабатывает первое ключевое слово и игнорирует те, которые произносятся во время задержки обработки.

Альтернативой может быть DictationRecognizer, который не прослушиваетконкретные ключевые слова, но переводит голос пользователя в текст, который вы могли бы затем сканировать на наличие ваших ключевых слов / букв.Очевидно, что это также имеет огромную задержку.

Итак, если у вас не может быть задержки, то я полагаю, что единственное правильное решение - переосмыслить, почему вам нужно распознавание букв, а не полные ключевые слова, такие как "альфа" вместоиз "а".

...