1

我一直在修补CMUSphinx/Pocketsphinx和 Node.js。我想做的是在后台生成 pocketsphinx_continuous,然后使用 node 作为顶部的流量控制层。

但是,pocketsphinx 似乎完全忽略了标准输出。有谁知道这是否是设计使然?如果我通过 CLI 运行它,我会看到如下输出:

准备好....

听...

信息:ngram_search.c(467):将分数堆栈调整为 200000 个条目信息:ngram_search.c(459):将反向指针表调整为 10000 个条目

可以从 stderror 中看到 INFO 和错误输出。AFAICT READY、听力和任何成功的单词识别都看不到,也不会发送到 stdout。

我的节点非常简单,并且在执行 Hello World 之类的 echo 测试 bash 脚本上运行良好:

if(ps == null) {
        //'-logfn','/dev/null', 
        //sudo pocketsphinx_continuous -dict lm/8531.dic -lm lm/8531.lm -kws words.kws  -kws_threshold 1e-40 -logfn /dev/null -inmic yes
        //console.log(process.stdout.write(''));


        ps = spawn('pocketsphinx_continuous', ['-nfft','2048', '-hmm','/usr/local/share/pocketsphinx/model/en-us/en-us', '-dict','lm/8531.dic', '-lm','lm/8531.lm', '-kws','words.kws', '-kws_threshold','1e-40', '-inmic', 'yes']);
        
        //ps = spawn('bash',['test.sh']);
        //ps.stderr.pipe(process.stdout);
        //console.log(ps.stdout.write(''));

        ps.stdout.on('data', function (data) {
          console.log('stdout: ' + data);
        });
        ps.stderr.on('data', function (data) {
          console.log('stderr: ' + data);
        });
    }

此信息是否只能通过 GStreamer 或类似方式获得?提前致谢。

4

2 回答 2

2

unbuffer期望包中使用

这是我的工作示例

$> mkfifo pipe

$> unbuffer pocketsphinx_continuous -inmic yes -keyphrase "ok dag knee" -kws_threshold "\1e-15" -logfn /dev/null > pipe

在另一个终端

&> cat < pipe

它按预期工作......

READY....
Listening...

只需在中调用 unbuffer并作为参数spwan 传递pocketsphinx_continuous

于 2016-09-09T00:16:13.480 回答
1

但是,pocketsphinx 似乎完全忽略了标准输出。有谁知道这是否是设计使然?

是的,我们默认没有刷新标准输出。您需要在 PTY 下运行 pocketsphinx 或等待程序完成以获取输出。

在修订版 13156 中,我们修复了这个问题,您可以只更新,然后您应该在消息解码后立即收到消息。

我想做的是在后台生成 pocketsphinx_continuous,然后使用 node 作为顶部的流量控制层。

最好直接使用节点绑定而不是 spawn:

https://github.com/cmusphinx/node-pocketsphinx

于 2015-06-02T17:51:32.620 回答