Хороший API распознавания речи
Я работаю над проектом колледжа, в котором я использую распознавание речи. В настоящее время я разрабатываю его на Windows 7 и использую пакет system.speech API, который поставляется вместе с.net, и делаю это на C#.
Проблема, с которой я сталкиваюсь, заключается в том, что распознавание диктовки недостаточно точно. Затем, когда я запускаю свое приложение, распознавание речи на рабочем столе запускается автоматически. Это большая неприятность для меня. Поскольку уже слова, которые я говорю, недостаточно ясны, а конфликтующее распознавание интерпретируется как команды, и выполняются такие действия, как сведение к минимуму переключения приложений.
Это важная часть моего приложения, и я прошу вас предложить для меня любой хороший речевой API, кроме этой ошибки Microsoft. Будет хорошо, даже если он сможет понять только простую грамматику диктовки.
2 ответа
Я думаю, что распознавание рабочего стола начинается, потому что вы используете общий распознаватель рабочего стола. Вы должны использовать распознаватель inproc только для вашего приложения. Вы делаете это, создавая SpeechRecognitionEngine() в своем приложении.
Поскольку вы используете грамматику диктовки и распознаватель окон рабочего стола, я полагаю, что говорящий может обучить ее повышению точности. Пройдите обучение по распознавателю Windows 7 и посмотрите, улучшится ли точность.
Чтобы начать работу с речью.NET, есть очень хорошая статья, которая была опубликована несколько лет назад на http://msdn.microsoft.com/en-us/magazine/cc163663.aspx. Это, пожалуй, лучшая вступительная статья, которую я нашел до сих пор. Это немного устарело, но очень полезно. (Метод AppendResultKeyValue был удален после бета-тестирования.)
Вот краткий пример, демонстрирующий одно из самых простых приложений Windows. Для форм форм, использующее грамматику диктовки, о которой я только мог подумать. Это должно работать на 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??
Если всем нужно использовать механизм распознавания речи с точностью 90% Cortana, он должен выполнить следующие шаги.
Шаг 1) Загрузите пакет Nugget Microsoft.Windows.SDK.Contracts
Шаг 2) Перейдите к ссылке на пакет SDK --> https://devblogs.microsoft.com/nuget/migrate-packages-config-to-package-reference/
Вышеупомянутый SDK предоставит вам систему распознавания речи Windows 10 в приложениях Win32. Это необходимо сделать, потому что единственный способ использовать этот механизм распознавания речи — создать приложение для универсальных платформ Windows. Я не рекомендую создавать приложение ИИ на универсальной платформе Windows, потому что там есть песочница. Функция песочницы изолирует приложение в контейнере и не позволяет ему взаимодействовать с каким-либо оборудованием, а также делает доступ к файлам абсолютно болезненным, а управление потоками невозможно, только асинхронные функции.
Шаг 3) Добавьте это пространство имен в раздел пространства имен. Это пространство имен имеет все функции, связанные с онлайн-распознаванием речи.
using Windows.Media.SpeechRecognition;
Шаг 4) Добавьте реализацию распознавания речи.
Task.Run(async()=>
{
try
{
var speech = new SpeechRecognizer();
await speech.CompileConstraintsAsync();
SpeechRecognitionResult result = await speech.RecognizeAsync();
TextBox1.Text = result.Text;
}
catch{}
});
Большинство методов в классе SpeechRecognizer Windows 10 требуют асинхронного вызова, а это означает, что вы должны запускать их в лямбда-функции Task.Run(async()=>{}) с асинхронным параметром, асинхронным методом или асинхронный метод задачи.
Чтобы это работало, перейдите в «Настройки» -> «Конфиденциальность» -> «Речь» в ОС и проверьте, разрешено ли онлайн-распознавание речи.