Linux 无互联语音触发识别

Linux 无互联语音触发识别,linux,speech-recognition,speech,raspberry-pi,human-computer-interface,Linux,Speech Recognition,Speech,Raspberry Pi,Human Computer Interface,手持设备上的语音识别通常由按下按钮触发。如果没有它,我如何触发语音识别?我的基于Raspberry PI的设备故意没有任何用户可以手动交互的东西——墙上只有一个麦克风 我试图实现一种方法,让它理解一个简单的触发命令,该命令将启动一系列操作。简而言之,我希望在“听到”音频触发器时运行一个.sh脚本。我不想让它理解任何其他东西,只是一个触发器——它不需要从触发器本身解码——比如脚本或参数的名称。一个非常简单的函数-“hear the trigger->execute.sh script” 我探索了不

手持设备上的语音识别通常由按下按钮触发。如果没有它,我如何触发语音识别?我的基于Raspberry PI的设备故意没有任何用户可以手动交互的东西——墙上只有一个麦克风

我试图实现一种方法,让它理解一个简单的触发命令,该命令将启动一系列操作。简而言之,我希望在“听到”音频触发器时运行一个.sh脚本。我不想让它理解任何其他东西,只是一个触发器——它不需要从触发器本身解码——比如脚本或参数的名称。一个非常简单的函数-“hear the trigger->execute.sh script”

我探索了不同的选择:

  • 让音频流持续发送到谷歌语音识别服务——这不是一个好主意——浪费了太多的流量和资源

  • 让一个无互联网的语音识别应用程序持续收听音频流并“挑选”触发词——这有点更好,但相当浪费资源,而且这些系统必须通过音频样本进行教学——这几乎消除了快速为设备设置自定义名称的能力

  • 使用某种音高处理,让它对一系列响亮的声音做出反应——拍手两次或类似的声音——不算太糟糕,但我想我的手在经过正确测试后会掉下来,或者我会被我的家人杀死,因为我通常会在晚上玩玩具的时候去尝试床

  • 口哨识别-与之前的选择没有太大区别,但你的手掌不会疼痛,如果我学会安静地吹口哨,我很有可能通过测试。我找到了IBM的一篇关于通过哨声命令命令计算机的文章——这种方法对于本地语音识别应用程序几乎是一样的,但是你教它理解不同的哨声序列。然而,从那以后,我不明白我怎么能教它理解任何口哨,不管它的音调如何

  • 我有点喜欢whistle的想法——在其他选择中,它似乎应该是最不需要资源的——我该怎么做呢


    如果我受到Raspberry PI硬件的限制,还有其他声音触发器可以轻松实现吗?

    Mono是一个可以安装在PI上的框架,允许您编译和运行C#应用程序,我相信它支持System.Speech和System.Speech.Recognition。你可以用这些来轻松编写一个应用程序,只需指定你想让它听的单词。把它写在你的电脑上,把exe移到pi上,然后用挂在pi外面的麦克风运行它。我做了一个类似的应用程序,但我使用了一个套接字服务器,并以这种方式发送命令。 设置命令的方式非常简单

        SpeechRecognitionEngine rec = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US")); 
        rec.SetInputToDefaultAudioDevice();
        rec.SpeechRecognized += speech_recognized;
        var c = new Choices();
        c.Add("Trigger");
        var gb = new GrammarBuilder(c);
        var g = new Grammar(gb);
        rec.LoadGrammar(g);
        rec.RecognizeAsync(RecognizeMode.Multiple);
        rec.MaxAlternates = 0;
    
    
        private void speech_recognized(object speechsender, SpeechRecognizedEventArgs e)
        {
        if(e.Result.Text == "Trigger"){
        //run your script
        }
    
    }
    

    看看nodejs流程,它处理来自麦克风的音频流事件,然后使用pocketsphinx离线语音识别和有限的自定义词典来识别简单的语音命令:


    如中所述,可以使用Pocketsphinx完成