Ответ 1
Я думаю, что распознавание рабочего стола начинается, потому что вы используете общий распознаватель рабочего стола. Вы должны использовать распознаватель inproc только для своего приложения. вы делаете это, создавая экземпляр SpeechRecognitionEngine() в своем приложении.
Поскольку вы используете грамматику диктовки и распознаватель окон для рабочего стола, я считаю, что ее можно обучить говорящему, чтобы повысить его точность. Пройдите через обучение распознавателей Windows 7 и посмотрите, улучшается ли точность.
Чтобы начать работу с .NET-речью, есть очень хорошая статья, которая была опубликована несколько лет назад в http://msdn.microsoft.com/en-us/magazine/cc163663.aspx. Это, вероятно, лучшая вступительная статья, которую я нашел до сих пор. Это немного устарело, но очень helfpul. (Метод AppendResultKeyValue был удален после бета-версии.)
Вот пример, который показывает одно из простейших приложений форм Windows.NET, чтобы использовать грамматику диктовки, о которой я мог думать. Это должно работать в Windows Vista или Windows 7. Я создал форму. Бросил на него кнопку и сделал кнопку большой. Добавлена ссылка на System.Speech и строку:
using System.Speech.Recognition;
Затем я добавил следующий обработчик события в button1:
private void button1_Click(object sender, EventArgs e)
{
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
Grammar dictationGrammar = new DictationGrammar();
recognizer.LoadGrammar(dictationGrammar);
try
{
button1.Text = "Speak Now";
recognizer.SetInputToDefaultAudioDevice();
RecognitionResult result = recognizer.Recognize();
button1.Text = result.Text;
}
catch (InvalidOperationException exception)
{
button1.Text = String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message);
}
finally
{
recognizer.UnloadAllGrammars();
}
}
Немного больше информации, сравнивающей различные вкусы речевых движков и API, поставляемых Microsoft, можно найти в В чем разница между System.Speech.Recognition и Microsoft.Speech.Recognition??