语音识别,nodeJS

Speech recognition, nodeJS

由于连接到不同的 API,我目前正在开发一种工具,允许我阅读所有通知。

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

比如软件在说"One mail from Bob",我想说"Read it",或者"Archive it"。

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

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

我在上面看到了很多线程,但主要是使用浏览器,如果可能的话,我想一开始就避免使用它。可能吗?

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

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

干杯

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

要进行实际的语音识别,您可以使用 Speech to Text service of IBM Watson Developer Cloud. This service supports a websocket interface, so that you can have a full duplex service, piping audio data to the cloud and getting back the resulting transcription. You may want to consider implementing a form of onset detection 以避免向服务传输大量(相对)静音 - 这样,您就可以保持在免费套餐内。

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

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

要在不将命令流式传输到服务器的情况下识别少数命令,您可以在 NPM 中使用 node-pocketsphinx module. Available

识别连续流中的几个命令的代码应该如下所示:

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 Speech and Recognizing multiple keywords using PocketSphinx

这里的两个答案都已经很好了,但我认为您正在寻找的是 Sonus. It takes care of audio encoding and streaming for you. It's always listening offline for a customizable hotword (like Siri or Alexa). You can also trigger listening programmatically. In combination with a module like 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

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