Помощь с SAPI v5.1 SpeechRecognitionEngine всегда дает один и тот же неправильный результат с C#
Я играл с этой библиотекой 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 ответ
Как вы создали свой файл 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 для слова "три".