pocketsphinx冲洗stdout?

时间:2015-06-02 16:35:17

标签: node.js cmusphinx pocketsphinx

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

然而,pocketsphinx似乎完全忽略了stdout。有谁知道这是否是设计的?如果我通过CLI运行它,我会看到像:

  

... READY

     

...听力

     

INFO:ngram_search.c(467):将评分大小调整为200000个条目   INFO:ngram_search.c(459):将后台指针表调整为10000个条目

可以从stderror中看到INFO和错误输出。 AFAICT READY,Listening和任何成功的单词识别都无法看到,也没有被发送到stdout。

我的节点非常简单,并且在执行Hello World的测试bash脚本上工作正常,如echo:

div

此信息仅可通过GStreamer等获得吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

使用expect package

中的unbuffer

这是我工作的例子

$> mkfifo pipe

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

在另一个终端

&> cat < pipe

按预期工作......

READY....
Listening...

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

答案 1 :(得分:1)

  

然而,pocketsphinx似乎完全忽略了stdout。有谁知道这是不是设计?

是的,默认情况下我们没有刷新stdout。你需要在PTY下运行pocketsphinx或等待程序完成输出。

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

  

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

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

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