我有以下代码来识别西班牙语语音,问题是有几个单词无法正确识别。
using System;
using System.Speech.Recognition;
namespace SpeechRecognitionApp
{
class Program
{
static void Main(string[] args)
{
using (
SpeechRecognitionEngine recognizer =
new SpeechRecognitionEngine(
new System.Globalization.CultureInfo("es-ES")))
{
recognizer.LoadGrammar(new DictationGrammar());
recognizer.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
recognizer.SetInputToDefaultAudioDevice();
recognizer.RecognizeAsync(RecognizeMode.Multiple);
while (true)
{
Console.ReadLine();
}
}
}
static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
Console.WriteLine("Recognized text: " + e.Result.Text);
}
}
}
我也试过定义它可以识别的单词,这样永远不会出错,缺点是它识别的单词数量仅限于我定义的单词数量。
Choices colors = new Choices();
colors.Add(new string[] { "azul", "rojo", "verde" });
// Create a GrammarBuilder object and append the Choices object.
GrammarBuilder gb = new GrammarBuilder();
gb.Append(colors);
// Create the Grammar instance and load it into the speech recognition engine.
Grammar g = new Grammar(gb);
// Create and load a dictation grammar.
recognizer.LoadGrammar(g);
有没有办法识别多个单词而不会出错并且不受定义的单词的限制?
抱歉,如果这不符合作为答案的条件,但是评论太长了。
过去很长一段时间我都不得不处理同样的问题,我可以报告如下:
您无法以编程方式做任何事情来提高语音识别引擎的性能,选项通常看起来仅限于:
- 1 训练他更好地识别你的声音。
- 2 有一个麦克风可以减少它接收到的噪音量,以便获得更好的读数。
无论如何,性能永远不会提高到 80% 以上,对于sphinx等不同的语音识别系统也是如此。它们适用于有限的命令列表,但不适用于转录整个演讲。
另一种方法是使用一些利用神经网络的在线语音识别,作为用户,我可以说它们效率更高,但我从未真正用它们开发过应用程序:
- https://azure.microsoft.com/ en-us /services/cognitive-services/speech/
- https://cloud.google.com/speech-to-text/
缺点很明显,他们需要互联网访问,而且谷歌和微软都是付费的。
还有使用神经网络的mozilla deepSpeech项目 ,不需要连接到互联网。