【问题标题】:Speech recognition, nodeJS语音识别,nodeJS
【发布时间】:2016-06-09 04:11:18
【问题描述】:

我目前正在开发一种工具,通过连接到不同的 API,我可以读取我的所有通知。

效果很好,但现在我想发出一些声音命令来执行一些操作。

就像当软件说“一封来自 Bob 的邮件”时,我想说“阅读”或“存档”。

我的软件通过节点服务器运行,目前我没有任何浏览器实现,但它可以是一个计划。

在节点 JS 中启用语音到文本的最佳方式是什么?

我已经看到了很多关于它的线程,但主要是使用浏览器,如果可能的话,我想在一开始就避免这种情况。有可能吗?

另一个问题是某些软件需要输入 wav 文件。我没有任何文件,我只想让我的软件始终聆听我所说的内容,以便在我说出命令时做出反应。

你有任何关于我如何做到这一点的信息吗?

干杯

【问题讨论】:

  • 我已经看到了一些为此连接到谷歌服务的实现,我想这就是你所说的。我怀疑会有一段时间没有这么强大的本地语音解析器。

标签: node.js speech-recognition speech-to-text


【解决方案1】:

要将音频数据导入您的应用程序,您可以尝试使用 microphone 之类的模块,我没有使用它,它看起来很有希望。这可能是一种避免使用浏览器进行音频输入的方法。

要进行实际的语音识别,您可以使用 IBM Watson Developer Cloud 的 Speech to Text 服务。该服务支持websocket interface,因此您可以拥有全双工服务,将音频数据传输到云端并取回结果转录。您可能需要考虑实现onset detection 的形式,以避免向服务传输大量(相对)静默 - 这样,您就可以留在免费套餐内。

还有一个文本转语音服务,但听起来您已经为工具的这一部分提供了解决方案。

披露:我是 IBM Watson 的传道者。

【讨论】:

    【解决方案2】:

    要识别一些命令而不将它们流式传输到服务器,您可以使用node-pocketsphinx 模块。 Available 在 NPM 中。

    识别连续流中少量命令的代码应如下所示:

    var fs = require('fs');
    
    var ps = require('pocketsphinx').ps;
    
    modeldir = "../../pocketsphinx/model/en-us/"
    
    var config = new ps.Decoder.defaultConfig();
    config.setString("-hmm", modeldir + "en-us");
    config.setString("-dict", modeldir + "cmudict-en-us.dict");
    config.setString("-kws", "keyword list");
    var decoder = new ps.Decoder(config);
    
    fs.readFile("../../pocketsphinx/test/data/goforward.raw", function(err, data) {
        if (err) throw err;
        decoder.startUtt();
        decoder.processRaw(data, false, false);
        decoder.endUtt();
        console.log(decoder.hyp())
    });
    

    您只需从麦克风读取数据并将其传递给识别器,而不是 readFile。要检测的关键字列表应如下所示:

    read it /1e-20/
    archive it /1e-20/
    

    有关使用 pocketsphinx 进行定位的更多详细信息,请参阅 Keyword Spotting in SpeechRecognizing multiple keywords using PocketSphinx

    【讨论】:

      【解决方案3】:

      这里的两个答案都很好,但我认为您正在寻找的是Sonus。它会为您处理音频编码和流式传输。它总是在离线收听可自定义 热词(如 Siri 或 Alexa)。您还可以以编程方式触发侦听。结合say 之类的模块,您可以通过执行以下操作来启用您的示例:

      say.speak('One mail from Bob', function(err) {
        Sonus.trigger(sonus, 1) //start listening
      });
      

      您还可以使用不同的启动词以不同的方式处理后续识别的语音。例如:
      通知。最近的。”和“发送消息。你今天好吗”

      将它扔到桌面上带有麦克风的 Pi 或 CHIP 上,您就有了一个个人助理,可以读取您的通知并对命令做出反应。

      简单示例:
      https://twitter.com/_evnc/status/811290460174041090

      稍微复杂一点:
      https://youtu.be/pm0F_WNoe9k?t=20s

      完整文档:
      https://github.com/evancohen/sonus/blob/master/docs/API.md

      免责声明:这是我的项目 :)

      【讨论】:

      • 不支持 Windows。
      • 这个包只做一点流媒体。它将所有其他内容卸载到其他库,并且无论如何只支持 Google 识别。 Google 的 Speech to Text API 只能通过云运行(因此不能离线)并且不是免费的。 say 包用于语音合成。
      猜你喜欢
      • 1970-01-01
      • 2011-11-01
      • 2018-04-17
      • 2018-02-23
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 2021-11-04
      • 2023-04-08
      相关资源
      最近更新 更多