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

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

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

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

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

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

11 ответов

Подобный вопрос был задан на Джоэла на 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 и читать текст вслух. Мой четырехлетний загипнотизирован этим.:) ("Папа, я хочу поговорить с да воботом".)

[Примечание: я был руководителем разработки 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

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

System.Speech

Обнаружил, что пример кода, опубликованный Kyralessa 22 октября, не работает для меня, но немного пересмотренная версия сработала. При добавлении строк в объект Choices используйте полнотекстовые английские слова, а не цифры. Кажется, что механизм распознавания речи 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;
  }

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

Двигатель Lumenvox

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

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

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

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

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

Ознакомьтесь с новыми библиотеками классов речи в.NET 3.5

http://msdn.microsoft.com/en-us/library/system.speech.recognition.speechrecognizer.aspx

общая документация для SR и TTS

http://msdn.microsoft.com/en-us/library/system.speech.recognition.aspx http://msdn.microsoft.com/en-us/library/system.speech.synthesis.aspx

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

На Dragon Naturally Speaking SDK стоит обратить внимание. Этот проект выглядел интересно.

Не надо играть ни с одним из них.

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

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

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

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

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

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