语音识别,NodeJS

14

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

它表现得很好,但现在我想加些语音命令来执行一些操作。

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

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

在Node JS中启用语音转文本的最佳方法是什么?

我看到了很多关于此的主题,但主要是使用浏览器,如果可能,我想避免在开始时使用浏览器。这可行吗?

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

你有任何关于我该如何做的信息吗?

干杯


我看过一些连接到谷歌服务的实现,我想这就是你所说的。我怀疑在短时间内不会有一个本地语音解析器具备如此强大的功能。 - Phix
3个回答

6
这里已经有两个很好的答案了,但我认为您正在寻找的是Sonus。它可以为您处理音频编码和流式传输。它始终离线侦听一个可定制的热词(如Siri或Alexa)。您也可以以编程方式触发侦听。结合类似say的模块,您可以通过执行以下操作启用您的示例:
say.speak('One mail from Bob', function(err) {
  Sonus.trigger(sonus, 1) //start listening
});

您还可以使用不同的热词以不同的方式处理后续识别到的语音。例如:
"Notifications. Most recent." 和 "Send message. How are you today"
将其放在桌子上带有麦克风的 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 免责声明:这是我的项目 :)

1
不支持Windows。 - sean
1
这个软件包除了一些流媒体处理外几乎没有其他功能。它将所有其他任务都转交给其他库来完成,而且只支持Google的语音识别。Google的语音转文本API只能通过云端使用(无法离线),并且需要付费。而“say”软件包则是用于语音合成。 - Phil

5
为了识别一些命令而不将它们流向服务器,您可以使用 node-pocketsphinx 模块。可在 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进行关键词检测的更多细节,请参见语音中的关键词检测使用PocketSphinx识别多个关键字


4
为了让您的应用程序获取音频数据,您可以尝试使用像microphone这样的模块,我没有使用过,但看起来很有前途。这可能是避免使用浏览器进行音频输入的一种方式。
要进行实际的语音识别,您可以使用IBM Watson Developer Cloud的语音转文本服务。该服务支持websocket接口,因此您可以拥有全双工服务,将音频数据传输到云端并获取返回结果的转录。为了避免向服务传输大量(相对)静默的内容,您可能需要考虑实现某种形式的起始检测 - 这样,您就可以保持在免费层内。
还有一个文本到语音服务,但听起来您已经有解决方案了。
披露:我是IBM Watson的福音使者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接