Подтвердить что ты не робот

С# Распознавание речи - это то, что сказал пользователь?

Мне нужно написать приложение, в котором используется механизм распознавания речи - либо встроенный, либо третий, который может отображать слово или фразу, и распознавать, когда пользователь его читает (или его приближение). Мне также нужно иметь возможность быстро переключаться между языками, не меняя язык операционной системы.

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

Было бы также замечательно, если бы это могло работать в Windows XP или в меньших версиях Windows Vista.

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

Кто-нибудь может что-то мне рекомендовать?

4b9b3361

Ответ 1

Аналогичный вопрос был задан на Joel on Software некоторое время назад. Вы можете использовать пространство имен System.Speech.Recognition, чтобы сделать это... с некоторыми ограничениями. Добавьте System.Speech(должен быть в GAC) в ваш проект. Вот пример кода для приложения WinForms:

public partial class Form1 : Form
{
  SpeechRecognizer rec = new SpeechRecognizer();

  public Form1()
  {
    InitializeComponent();
    rec.SpeechRecognized += rec_SpeechRecognized;
  }

  void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
  {
    lblLetter.Text = e.Result.Text;
  }

  void Form1_Load(object sender, EventArgs e)
  {
    var c = new Choices();
    for (var i = 0; i <= 100; i++)
      c.Add(i.ToString());
    var gb = new GrammarBuilder(c);
    var g = new Grammar(gb);
    rec.LoadGrammar(g);
    rec.Enabled = true;
  }

Это распознает числа от 1 до 100 и отображает итоговое число в форме. Вам понадобится форма с меткой lblLetter.

System.Speech работает только с заранее определенным списком слов или фраз; это не совсем NaturallySpeaking, либо в универсальности, либо в качестве признания. Но вам не нужно обучать его голосу пользователей, и если у вас есть только несколько разных вещей, которые пользователь может сказать, он работает достаточно хорошо. И это бесплатно! (если у вас есть Visual Studio)

Это не сработает, если вы используете очень короткие фразы; Я сделал программу для моего ребенка, чтобы сказать буквы алфавита и увидеть их на экране, но это не очень хорошо, так как многие буквы звучат одинаково (особенно из уст четырехлетнего ребенка).

Что касается более гибких вариантов... ну, то есть вышеупомянутое NaturallySpeaking, в котором есть SDK. Но вам нужно связаться с продавцами, чтобы получить какой-либо доступ к нему, и ни одна цена не указана, поэтому она встречается как одна из тех, "сколько это стоит?" Ну, сколько у вас есть? "Подобные вещи. Кажется, что нет опции" скачать и играть с ней".: (

Что касается текста в речь, System.Speech.Synthesis делает это. Это еще проще, чем распознавание речи. Я написал небольшую программу, чтобы разрешить мне вводить текст, нажать Enter и прочитать текст вслух. Мой четырехлетний ребенок загипнотизирован.:) ( "Папочка, я хочу поучаствовать в wobot".)

Ответ 2

[Примечание. Я был лидером разработки для управляемого API распознавания речи в .NET 3.0]

System.Speech является частью .NET 3.0, поэтому он доступен как для Vista, так и для XP. В Vista у вас есть дополнительное преимущество - наличие механизма распознавания речи, предварительно установленного ОС. В XP вы выбираете: используйте SAPI 5.1 SDK с очень старым движком (но может работать достаточно хорошо для вашего сценария управления и управления), установите Office 2003, который устанавливает более новую версию распознавателя. Есть также несколько доступных для SAPI 5 программ распознавания речи.

Если вам нужно переключить языки, вы захотите использовать класс System.Speech.Recognition.SpeechRecognitionEngine, который позволяет вам выбрать механизм SR для языка, который вам нужен для поддержки. Обратите внимание, что двигатели определяются набором поддерживаемых им языков (они могут использовать один и тот же двоичный файл, заменяя только файлы данных для поддержки дополнительных языков).

Комментарий, если вам нужно знать больше.

Philipp

Ответ 3

Перед этим добавьте ссылку "Речь"

System.Speech

Обнаружил, что пример кода, опубликованный Kyralessa 22 октября, не сработал у меня, но немного изменилась. При добавлении строк в объект "Выбор" используйте полные текстовые английские слова, а не цифры. Кажется, механизм распознавания речи MS не может распознавать числа самостоятельно.

Я отметил эти изменения с комментариями, добавленными в предыдущий пример.

public partial class Form1 : Form
{
  SpeechRecognizer rec = new SpeechRecognizer();

  public Form1()
  {
    InitializeComponent();
    rec.SpeechRecognized += rec_SpeechRecognized;
  }

  void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
  {
    lblLetter.Text = e.Result.Text;
  }

  void Form1_Load(object sender, EventArgs e)
  {
    var c = new Choices();

    // Doens't work must use English words to add to Choices and
    // populate grammar.
    //
    //for (var i = 0; i <= 100; i++)
    //  c.Add(i.ToString());

    c.Add("one");
    c.Add("two");
    c.Add("three");
    c.Add("four");
    // etc...

    var gb = new GrammarBuilder(c);
    var g = new Grammar(gb);
    rec.LoadGrammar(g);
    rec.Enabled = true;
  }

Ответ 4

Если двигатель - это то, о чем вы спрашиваете, то я нашел (остерегайтесь, я просто перечисляю, я не пробовал ни одного из них):

Lumenvox engine

у вас также есть SAPI SDK от самой Microsoft, я только пробовал его для текста в речь, но в соответствии с его определением:

В SDK также включены свободно распространяемые движки Text-to-speech (TTS) (на английском и упрощенном китайском языке) и механизмы распознавания речи (SR) (на английском, китайском и японском языках)).

Ответ 5

Будьте предупреждены, что вы не добьетесь хороших результатов, если сначала не потребуете обучения. Распознавание речи - это статистическое приложение фонетики, поле, которое довольно откровенно говорит о том, что существует так много вариаций в сигнале, что это почти чудо, которое любой может понять, что кто-то еще говорит. Встроенный механизм распознавания речи, скорее всего, будет иметь тенденцию к более общему акценту на английском языке, но будет терпеть неудачу для всего, что даже немного отличается.

Вот почему обучение так важно. Мы можем преуспеть, просто переопределив, особенно если мы уменьшим пространство проблем. Но создание расширяемого решения для машинного обучения? В ней всегда лежит руб.

Это говорит о Сфинксе-4. Это готовое решение, написанное на Java, доступно в http://cmusphinx.sourceforge.net/sphinx4/

Ответ 8

Текст в речь доступен с Speech API. Лично мне, вероятно, потребуется Vista и использовать управляемые интерфейсы для System.Speech.SpeechRecognition и System.Speech.Synthesis.TtsEngine, но P/Invoke должен быть доступен в неуправляемых API, если вам действительно нужна поддержка XP.

Ответ 9

Попробуйте Microsoft Speech Server, который, я думаю, теперь является частью Office Communication Server 2007. Он содержит механизмы SR/TTS, API С# и инструменты, которые интегрируются с Visual Studio.

Ответ 10

Это статья из журнала MSDN, которая впервые обсуждалась с использованием API System.Speech для Vista. Некоторые из них устарели, потому что API изменился между бета-версиями (когда статья была написана) и выпуском Vista, но это все еще один из лучших ресурсов, которые я нашел, и хорошо вписывается в пространство имен System.Speech, См. http://msdn.microsoft.com/en-us/magazine/cc163663.aspx

Ответ 11

Ну, у этого вопроса уже много хороших отзывов, но я думаю, что полезно обновить некоторую информацию из документации 2016 года от ответов Роба Сигала и Филиппа Шмида, указывающих на этот хороший пример кода:

https://msdn.microsoft.com/en-us/library/office/system.speech.recognition.speechrecognitionengine.aspx

Он не использовал общий распознаватель Windows (маленький Windows Mic, который отображается в середине экрана), он использует приятное приложение SpeechRecognitionEngine, которое не нуждается в визуальной подсказке. Пользовательский интерфейс полностью находится под вашим контролем.