无线声乐触发识别

时间:2013-02-07 22:18:13

标签: linux speech-recognition speech raspberry-pi human-computer-interface

手持设备上的语音识别通常只需按一下按钮即可触发。如果没有这个,我该怎么做才能触发语音识别呢?我的基于Raspberry PI的设备故意没有任何用户可以手动交互的东西 - 只有一个麦克风挂在墙上。

我正在尝试实现一种让它理解一个简单的触发命令的方法,该命令将启动一系列操作。简而言之,我想在“听到”音频触发器时运行单个.sh脚本。我不希望它只是一个触发器来理解其他任何东西 - 没有必要从触发器本身解码 - 例如脚本或参数的名称。一个非常简单的功能 - “听到触发器 - >执行.sh脚本”

我探索了不同的选择:

  1. 将音频流连续发送到谷歌语音识别服务 - 不是一个好主意 - 浪费太多的流量和资源

  2. 让无网络语音识别应用程序不断收听音频流并“挑选”触发词 - 这样做更好但​​又浪费资源,这些系统必须教授音频样本 - 这个几乎消除了将自定义名称快速设置到设备的能力

  3. 使用某种音调处理让它对一系列响亮的声音作出反应 - 双手拍了两次或类似的东西 - 不是太糟糕但是我想我的手会在我得到正确测试的东西之后脱落我会被我的家人杀死,因为我通常在晚上睡觉时试验我的玩具。

  4. 口哨识别 - 与之前的选项没什么不同,但是你的手掌没有疼痛,如果我学会静静地吹口哨,我有机会在测试中存活下来。我能够找到IBM关于通过口哨命令命令计算机的文章 - 这种方法与本地语音识别应用程序几乎相同,但是你教它理解不同的哨子序列。然而,从那时起,我不明白我怎么能教它理解任何口哨而不管它的语气。

  5. 我有点像哨子的想法 - 看起来它应该是其他选项中最少的资源 - 我怎么能这样做?

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

2 个答案:

答案 0 :(得分:0)

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
    }

}

答案 1 :(得分:0)

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

https://github.com/ybutb/yee-voice