Справка по SAPI v5.1 SpeechRecognitionEngine всегда дает один и тот же неправильный результат с C # - PullRequest
3 голосов
/ 01 июня 2011

Я играл с этой библиотекой SAPI v5.1. Итак, я тестировал образец файла WAV, который у меня есть. ( Загрузите его отсюда ). В любом случае, звук в этом файле чистый и легкий. Он содержит только одно слово номер три. Теперь, когда я запускаю следующий код, я получаю номер 8 или «восемь». Если я удаляю его, я получаю 7. Если я пытаюсь рандомизировать список, я получаю разные результаты и так далее. Я действительно запутался и начал думать, что SpeachRecognition в библиотеке SAPI вообще не работает ...

В любом случае, вот что я делаю,

    private void button1_Click(object sender, EventArgs e)
    {
        //Add choices to grammar.
        Choices mychoices = new Choices();
        mychoices.Add("one");
        mychoices.Add("two");
        mychoices.Add("three");
        mychoices.Add("four");
        mychoices.Add("five");
        mychoices.Add("six");
        mychoices.Add("seven");
        mychoices.Add("eight");
        mychoices.Add("nine");
        mychoices.Add("zero");
        mychoices.Add("1");
        mychoices.Add("2");
        mychoices.Add("3");
        mychoices.Add("4");
        mychoices.Add("5");
        mychoices.Add("6");
        mychoices.Add("7");
        mychoices.Add("8");
        mychoices.Add("9");
        mychoices.Add("0");

        Grammar myGrammar = new Grammar(new GrammarBuilder(mychoices));

        //Create the engine.
        SpeechRecognitionEngine reco = new SpeechRecognitionEngine();

        //Read audio stream from wav file.
        reco.SetInputToWaveFile("3.wav");
        reco.LoadGrammar(myGrammar);

        //Get the recognized value.
        reco.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(reco_SpeechRecognized);

        reco.RecognizeAsync(RecognizeMode.Multiple);
    }

    void reco_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        MessageBox.Show(e.Result.Text);
    }

1 Ответ

5 голосов
/ 01 июня 2011

Как вы создали свой WAV-файл? Похоже, у него высокий битрейт. Есть только определенные форматы, поддерживаемые распознавателем. Попробуйте:

  • 8 бит на выборку
  • одноканальный моно
  • 22 050 выборок в секунду
  • PCM кодировка

У вас есть около 3 секунд звука, а размер файла составляет 520 КБ. Это кажется слишком большим для поддерживаемых форматов.

Вы можете использовать класс RecognizerInfo, чтобы найти поддерживаемые форматы аудио (SupportedAudioFormats) для вашего распознавателя - Свойство RecognizerInfo.SupportedAudioFormats .

Обновление:

Ваш аудиофайл - беспорядок. Это очень шумно. Это также в неподдерживаемом формате. Audacity сообщает о стереозвучании, 44,1 кГц и 32-битном режиме с плавающей запятой. Я заглушил шум в начале и в конце, передискретизировал до 22,050 кГц, удалил стерео трек, а затем экспортировал как несжатый 8-битный неподписанный WAV. Затем он работает нормально.

На моем компьютере с Windows 7 распознаватель по умолчанию поддерживает только следующие аудиоформаты:

  0:
  Encodingformat = Pcm
  BitsPerSample = 8
  BlockAlign = 1
  ChannelCount = 1
  SamplesPerSecond  = 16000

  1:
  Encodingformat = Pcm
  BitsPerSample = 16
  BlockAlign = 2
  ChannelCount = 1
  SamplesPerSecond  = 16000

  2:
  Encodingformat = Pcm
  BitsPerSample = 8
  BlockAlign = 1
  ChannelCount = 1
  SamplesPerSecond  = 22050

  3:
  Encodingformat = Pcm
  BitsPerSample = 16
  BlockAlign = 2
  ChannelCount = 1
  SamplesPerSecond  = 22050

  4:
  Encodingformat = ALaw
  BitsPerSample = 8
  BlockAlign = 1
  ChannelCount = 1
  SamplesPerSecond  = 22050

  5:
  Encodingformat = ULaw
  BitsPerSample = 8
  BlockAlign = 1
  ChannelCount = 1
  SamplesPerSecond  = 22050

Вы также должны удалить числовые варианты из грамматики. Прямо сейчас распознаватель возвращает две альтернативы: «три» и «3». Это, вероятно, не то, что вы хотите. Вы можете использовать семантическое значение результата в своей грамматике, чтобы вернуть число 3 для слова «три».

...