Сравнение аудио с использованием механизма распознавания речи Micorosft

У меня есть приложение, в котором пользователь может произнести слово и ему будет дана процентная точность слова, которое он произнес. то есть насколько четко двигатель распознал это слово.

Все это прекрасно работает, но у меня есть дилемма, какие слова нужно добавить в словарь, который я передам механизму распознавания в качестве словаря.

Если я даю слова, начинающиеся с "p", для case pen, то такие слова, как pendant, pent и т. Д., Все будут добавлены в словарь. В этом случае я не получаю распознанное слово как "pen".

Вместо этого я всегда получаю другие слова, такие как "подвеска" и т. Д.

Но если я добавляю в словарь только ограниченные слова, такие как "pe", "pen", то для того же записанного файла я получаю распознанные слова только как "Pen".

Значит, это явно зависит от слов, которые мы даем в словарь.

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

Я сделал то, что мог сделать для этой проблемы. Но моему клиенту нужно что-то помимо вселенной.

Код:

public OdllSpeechProcessor(string culture, string speechContent , string filePath)
        {
            try
            {
                int counter = 0;
                string line;
                cultureInfo         = new CultureInfo(culture);
                recognitionEngine   = new SpeechRecognitionEngine(cultureInfo);
                words               = new Choices();
                gb                  = new GrammarBuilder();
                gb.Culture          = cultureInfo;
                rndAccuracy         = new Random();

                System.IO.StreamReader file = new System.IO.StreamReader(filePath);
                while ((line = file.ReadLine()) != null)
                {
                    if (line != "")
                    {
                        for (int i = 0; i < srcContent.Length; i++)
                        {
                            if (line.StartsWith(subsetWords, true, cultureInfo))
                            {
                                if (count >= line.Length)
                                {
                                    words.Add(line);
                                    counter++;
                                }
                            }
                        }
                    }
                }


                file.Close(); 

                // Adding words to the grammar builder.              
                gb.Append(words);

                // Create the actual Grammar instance, with the words from the source audio.
                g = new Grammar(gb);

                // Load the created grammar onto the speech recognition engine.
                recognitionEngine.LoadGrammarAsync(g);

У каких-нибудь экспертов есть решение для этого здесь? Любая помощь будет оценена.

Спасибо

1 ответ

Вы используете командную грамматику (то есть набор вариантов). Используя командную грамматику, движок старается найти соответствие, которое может легко привести к ложным срабатываниям (как вы видели). Возможно, вы захотите исследовать грамматику диктовки, в частности грамматику произношения, как я изложил в своем ответе на этот вопрос. Обратите внимание, что решение, которое я описал, использует некоторые интерфейсы, которые недоступны в C# (или, по крайней мере, доступны через System.Speech.Recognition).

Другие вопросы по тегам