C# 使用Micorosft语音识别引擎进行音频比较
我有一个应用程序,用户可以说话和一个单词,他将得到他所说单词的准确率百分比。i、 e发动机对这个词的识别有多清楚 这一切都很好,但我有一个两难的问题,那就是哪些单词需要添加到字典中,我将作为字典提供给识别引擎 如果我给case pen以“p”开头的单词,那么像pendant、pent等所有单词都会被添加到字典中。在这种情况下,我不会得到被识别为“pen”的单词 相反,我总是用其他词,如“吊坠”等 但是,如果我只在字典中添加有限的单词,比如“pe”、“pen”,那么对于同一个录制的文件,我得到的识别单词仅为“pen” 意思是它显然取决于我们给字典的单词 我已经向我的客户传达了同样的信息。但是他们想要的是,他们也可以对给定的输入词说错误的词,所以在那个时候他们不需要获得准确性,也不需要获得可识别的文本 我已经为这个问题做了我本可以做的。但我的客户需要的是宇宙之外的东西 代码:C# 使用Micorosft语音识别引擎进行音频比较,c#,asp.net,speech-recognition,microsoft-speech-platform,C#,Asp.net,Speech Recognition,Microsoft Speech Platform,我有一个应用程序,用户可以说话和一个单词,他将得到他所说单词的准确率百分比。i、 e发动机对这个词的识别有多清楚 这一切都很好,但我有一个两难的问题,那就是哪些单词需要添加到字典中,我将作为字典提供给识别引擎 如果我给case pen以“p”开头的单词,那么像pendant、pent等所有单词都会被添加到字典中。在这种情况下,我不会得到被识别为“pen”的单词 相反,我总是用其他词,如“吊坠”等 但是,如果我只在字典中添加有限的单词,比如“pe”、“pen”,那么对于同一个录制的文件,我得到的识
public OdllSpeechProcessor(string culture, string speechContent , string filePath)
{
try
{
int counter = 0;
string line;
cultureInfo = new CultureInfo(culture);
recognitionEngine = new SpeechRecognitionEngine(cultureInfo);
words = new Choices();
gb = new GrammarBuilder();
gb.Culture = cultureInfo;
rndAccuracy = new Random();
System.IO.StreamReader file = new System.IO.StreamReader(filePath);
while ((line = file.ReadLine()) != null)
{
if (line != "")
{
for (int i = 0; i < srcContent.Length; i++)
{
if (line.StartsWith(subsetWords, true, cultureInfo))
{
if (count >= line.Length)
{
words.Add(line);
counter++;
}
}
}
}
}
file.Close();
// Adding words to the grammar builder.
gb.Append(words);
// Create the actual Grammar instance, with the words from the source audio.
g = new Grammar(gb);
// Load the created grammar onto the speech recognition engine.
recognitionEngine.LoadGrammarAsync(g);
公共OdllSpeechProcessor(字符串区域性、字符串speechContent、字符串文件路径)
{
尝试
{
int计数器=0;
弦线;
cultureInfo=新的cultureInfo(文化);
识别引擎=新的语音识别引擎(cultureInfo);
单词=新的选择();
gb=新的GrammarBuilder();
gb.Culture=cultureInfo;
rndAccuracy=新随机数();
System.IO.StreamReader file=新的System.IO.StreamReader(文件路径);
而((line=file.ReadLine())!=null)
{
如果(行!=“”)
{
for(int i=0;i感谢您使用的是命令语法(即一组选项)。使用命令语法,引擎会尽最大努力找到匹配项,这很容易导致误报(如您所见)。您可能需要研究听写语法,特别是发音语法,正如我在对的回答中所述。请注意,我所述的解决方案使用了一些C#中不可用的接口(或至少通过
System.Speech.Recognition
公开).查看一些代码会很有帮助。此外,我怀疑您正在使用引擎置信度来估计参考词与识别的匹配程度;情况并非总是如此(很容易得到正确的低置信度匹配和不正确的高置信度匹配)@Eric:是的,我在使用引擎信心。你是在使用听写语法还是命令语法?听起来你在使用命令语法,这在这里不是正确的选择。使用命令语法,引擎会尽力找到匹配项,这很容易导致误判。@Eric:我已经编辑了我的问题并添加了编辑代码。