3

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

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

我探索了不同的选择:

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

  2. 让一个无互联网的语音识别应用程序持续收听音频流并“挑选”触发词 - 这有点好,但几乎浪费资源,并且这些系统必须学习音频样本 - 这几乎消除了快速为设备设置自定义名称

  3. 使用某种音高处理让它对一系列响亮的声音做出反应 - 拍手两次或类似的东西 - 还不错,但我想我的手在我得到正确测试后会掉下来,否则我会被我的家庭成员,因为我通常会在晚上睡觉时尝试我的玩具。

  4. 口哨识别 - 与之前的选项没有太大区别,但你的手掌不会酸痛,如果我学会安静地吹口哨,我很有可能在测试中幸存下来。我能够找到 IBM 的一篇关于通过口哨命令控制计算机的文章 - 该方法与本地语音识别应用程序几乎相同,但您教它理解不同的口哨序列。然而,从那以后我不明白我怎么能教它理解任何口哨,不管它的语气如何。

我有点喜欢吹口哨的想法——看起来它应该是其他选项中资源消耗最少的——我该怎么做?

鉴于我受到 Raspberry PI 硬件的限制,是否还有其他可以轻松实现的声音触发器?

4

2 回答 2

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
    }

}
于 2013-03-13T02:59:11.800 回答
0

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

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

于 2018-11-27T21:59:07.907 回答