Распознавание речи C # - это то, что сказал пользователь? - PullRequest
53 голосов
/ 22 октября 2008

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

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

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

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

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

Ответы [ 11 ]

58 голосов
/ 22 октября 2008

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

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

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

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

16 голосов
/ 05 ноября 2008

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

10 голосов
/ 25 ноября 2008

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

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;
  }
7 голосов
/ 22 октября 2008

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

Двигатель Lumenvox

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

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

3 голосов
/ 22 октября 2008

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

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

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

1 голос
/ 22 октября 2008

Ознакомьтесь с новыми библиотеками классов речи в .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

0 голосов
/ 20 июля 2016

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

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

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

0 голосов
/ 09 июня 2010

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

0 голосов
/ 05 ноября 2008

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

0 голосов
/ 22 октября 2008

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

...