允许使用语音识别引擎拼写字母

时间:2013-06-13 15:57:48

标签: c# speech-recognition speech-to-text

我目前正在开发语音识别应用程序。为此,我要求允许用户拼写特定单词的字母,例如名称。我尝试使用语法构建器将字母添加为选项,但它只识别一个特定的字母。

以下是我的代码

    public static class GrammarManager{
            public static GrammarBuilder getAlphabet()
            {
                Settings.CultureInfo = "en-GB";

                GrammarBuilder dictaphoneGB = new GrammarBuilder();
                dictaphoneGB.Culture = new System.Globalization.CultureInfo(Settings.CultureInfo);
                dictaphoneGB.Append(new Choices("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"));

                return dictaphoneGB;
            }
    }

public class SpeechEngine{
        static System.Speech.Recognition.SpeechRecognitionEngine recognizer = null;
        private void initializeEmulator()
        {
            GrammarBuilder builder = new GrammarBuilder();
            builder.AppendDictation();

            recognizer = new System.Speech.Recognition.SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-GB"));
            recognizer.RequestRecognizerUpdate();
            recognizer.LoadGrammar(new Grammar(GrammarManager.getAlphabet()));
            recognizer.SpeechRecognized += recognizer_SpeechRecognized;
        }

        public void startEmulatorRecognition(string word)
        {
            recognizer.EmulateRecognizeAsync(word);
        }
}

我通过启动特定的字符串参数来调用startEmulateRecognition()方法。现在,当我将“A”,“G”或“B”等值传递给该特定方法时,它就会得到识别。但是当我通过“A B C”或“ABC”或诸如“G O O G L E”之类的单词时,它们不会被识别。

我真的很感激,如果有人可以建议我实现这一目标的方法,以便识别正在拼写的单词,例如“G O O G L E”等?

提前致谢!

1 个答案:

答案 0 :(得分:0)

你需要使用另一个GrammarBuilder和构造函数来重复构造一个匹配重复序列的语法:

private void lettterGrammar() {
    GrammarBuilder letterGb = new GrammarBuilder();
    Choices letterChoices = new Choices("A", "B", "C", "D);
    GrammarBuilder speellingGb = new GrammarBuilder(
                 (GrammarBuilder)letterChoices, 1, 50);
    Grammar grammar = new Grammar(spellingGb);
}

请参阅documentation on MSDN for details