语音识别将背景噪音识别为语音。

6

我在我的程序中使用MSDN的SpeechRecognitionEngine。问题是它将背景噪音识别为语音。

例如,如果我弹指头、敲桌子或移动椅子,它会将这些声音识别为语音。

为什么它会将背景噪音识别为语音呢?

我弹指头的声音和我说“记事本”的声音不一样啊!

以下是代码:

using System;
using System.Threading;
using System.Speech;
using System.Speech.Synthesis;
using System.Speech.Recognition;

namespace SpeachTest
{
    public class MainClass
    {
        static void Main()
        {
        MainClass main = new MainClass(); 
        SpeechRecognitionEngine sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));
            Choices choiceList = new Choices();
            choiceList.Add(new string[]{"Open", "Close", "Then", "Volume", "Up", "Firefox", "Notepad", "Steam","turn", "the", "now" } );

            GrammarBuilder builder = new GrammarBuilder();
            builder.Append(choiceList);
            Grammar grammar = new Grammar(new GrammarBuilder(builder,0, 10) );

            sre.SpeechRecognized += main.sreRecognizedEvent;
            sre.SpeechDetected += main.sreDetectEvent;
            sre.SpeechRecognitionRejected += main.sreRejectEvent;
            sre.RecognizeCompleted += main.sreCompleteEvent;

            sre.InitialSilenceTimeout = TimeSpan.FromSeconds(0);
            sre.BabbleTimeout = TimeSpan.FromSeconds(0);
            sre.EndSilenceTimeout = TimeSpan.FromSeconds(0);
            sre.EndSilenceTimeoutAmbiguous = TimeSpan.FromSeconds(0);


            sre.SetInputToDefaultAudioDevice();
            sre.LoadGrammar(grammar);

            while(true){
            sre.Recognize();
            }
        }


        void sreRecognizedEvent(Object sender, SpeechRecognizedEventArgs e){
        Console.Write("Reconized ~ " + e.Result.Text + " ~ with confidence " + e.Result.Confidence);
        Console.WriteLine();
        }


        void sreDetectEvent(Object sender, SpeechDetectedEventArgs e){
        Console.WriteLine("Detected some type of input");
        }

        void sreRejectEvent(Object sender,  SpeechRecognitionRejectedEventArgs e){
        Console.WriteLine("Rejected Input ~ " + e.Result.Text) ;
        }

        void sreCompleteEvent(Object sender, System.Speech.Recognition.RecognizeCompletedEventArgs e){
        Console.WriteLine("Completed Recongnization");
        }
}

}

从文档上看,您可能想查看BabbleTimeout、InitialSilenceTimeout、EndSilenceTimeout和EndSilenceTimeoutAmbiguous属性? - Partha Lal
刚刚更新了代码,并将所有属性设置为0。没有改变任何东西。 - JackBarn
@JackBarn 为什么你尝试将 BabbleTimeout 设为0?我没有检查其他的,但是对于 BabbleTimeout 来说,0 是默认值。如果设置几秒钟以上的值会发生什么? - Mehraban
@SAM 我将它设置为0以排除任何可能性。我改变它的值也没有起到任何作用。 - JackBarn
我怀疑在这种情况下,所报告的“语音”得到了非常低的置信度分数。低置信度结果有点像你仔细倾听静态中可能出现的声音;如果你足够努力地倾听,你可能会发现一些听起来模糊像语音的东西,但你可能不会把赌注压在上面。 - Dan Bryant
@DanBryant 不,它实际上是以非常高的置信度得分来识别和假设它。 - JackBarn
3个回答

4
避免任何过滤算法,您可以检查当前显示的置信度属性。它的范围在0.01.0之间,其中1表示非常自信。我发现0.7效果不错,但您可以通过试错来进行调整。
void sreRecognizedEvent(Object sender, SpeechRecognizedEventArgs e)
{
    if(e.Result.Confidence >= 0.7)
    {
        Console.Write("Reconized ~ " + e.Result.Text + " ~ with confidence " + e.Result.Confidence);
        Console.WriteLine();
    }        
}

我已经尝试过那个了。大多数时间它会识别我说的单词和背景噪音,置信度大约在0.90到0.95左右。 - JackBarn
1
请检查您系统中的麦克风设置是否正确。可能是麦克风过于敏感。 - keyboardP
是的。降低麦克风的灵敏度确实提高了准确性。它原来是100,但我现在将其调低到了20。虽然偶尔还会出现误判(仍然非常烦人),但目前这样已经可以了。 - JackBarn

2
从识别器到识别器,非语音声音被拒绝的程度和方式差异很大。我的经验是,微软的识别器会尽力寻找单词。例如,使用DragonDictate或Google Web Recognition时,您可以打响指或咳嗽,它们会被拒绝。此外,微软的识别器会积极跟踪音频级别,因此,如果它听到很多安静的声音,它将内部模拟通过缩小检测阈值来增加增益。 (我曾经体验过它将纸张摩擦声或空调声识别为人类讲话。)
我多年来一直使用的解决方案有些违反直觉。您需要添加自己的“垃圾”语音模型。由于您只是使用单词列表而不是复杂的语法,因此这应该有效并且易于实现。
您当前正在监听的内容包括: "Open", "Close", "Then", "Volume", "Up", "Firefox", "Notepad", "Steam","turn", "the", "now"
您应该在列表中添加一些与单词相似但不完全相同的单词。例如,添加“apron”和“happen”将在“open”一词附近有效地成为陷阱。当结果出现时,您可以更信任此人实际上说了“open”。此外,添加一些与您的命令单词无关的短单词将捕获更多的非语音声音。我认为当您打响指时,“tap”很可能会被识别出来。
总之:识别这个更长的单词列表,但只有在它们在您的命令列表中时才对它们进行操作。如果您在代码中使用case语句,则这非常简单,只需分支处理您的命令即可。否则,您需要针对“好”的列表进行测试。
注意:当您使用语音识别语法进行更复杂的识别时,此技术也适用。您只需将所有这些“垃圾”短语放在名为“garbage”的语法规则下,就可以拒绝由该规则识别的任何话语。

1

原来我的麦克风灵敏度太高了,非常非常高。它设置为100,这意味着它会捕捉到最微小的声音(例如背景噪声)。

我猜测这些小声音会被放大到如此高的程度,以至于SpeechRecognitionEngine难以将其区分为实际的语音。

将灵敏度调低到20或30就解决了问题。enter image description here更合适的灵敏度


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接