Redirect Output de Pocketsphinx_continuous para um arquivo

2

Eu tenho um comando feio:

pocketsphinx_continuous -samprate 48000 -nfft 2048 -hmm /usr/local/share/pocketsphinx/model/en-us/en-us -lm 9745.lm -dict 9745.dic -inmic yes

Breakdown: Ele ouve qualquer ruído e, quando detecta algum, ele ouve e executa o reconhecimento de voz nele.

Agora, a saída do comando tem um monte de lixo e uma linha que importa. Aqui está a saída de um reconhecimento de fala:

READY....
Listening...
INFO: cmn_prior.c(131): cmn_prior_update: from < 21.18 -11.87  6.18  0.77  4.42 -0.76  1.99  8.43  2.83 -1.46  3.80  6.19  3.71 >
INFO: cmn_prior.c(149): cmn_prior_update: to   < 23.28 -5.11  8.81 -0.28  0.06 -0.83  0.94  6.68  0.42  1.07  4.00  7.34  4.32 >
INFO: ngram_search_fwdtree.c(1553):      814 words recognized (9/fr)
INFO: ngram_search_fwdtree.c(1555):    60871 senones evaluated (684/fr)
INFO: ngram_search_fwdtree.c(1559):    37179 channels searched (417/fr), 6846 1st, 21428 last
INFO: ngram_search_fwdtree.c(1562):     1415 words for which last channels evaluated (15/fr)
INFO: ngram_search_fwdtree.c(1564):     2626 candidate words for entering last phone (29/fr)
INFO: ngram_search_fwdtree.c(1567): fwdtree 0.66 CPU 0.742 xRT
INFO: ngram_search_fwdtree.c(1570): fwdtree 3.36 wall 3.780 xRT
INFO: ngram_search_fwdflat.c(302): Utterance vocabulary contains 21 words
INFO: ngram_search_fwdflat.c(948):      655 words recognized (7/fr)
INFO: ngram_search_fwdflat.c(950):    40095 senones evaluated (451/fr)
INFO: ngram_search_fwdflat.c(952):    31447 channels searched (353/fr)
INFO: ngram_search_fwdflat.c(954):     1794 words searched (20/fr)
INFO: ngram_search_fwdflat.c(957):     1006 word transitions (11/fr)
INFO: ngram_search_fwdflat.c(960): fwdflat 0.29 CPU 0.326 xRT
INFO: ngram_search_fwdflat.c(963): fwdflat 0.30 wall 0.333 xRT
INFO: ngram_search.c(1253): lattice start node <s>.0 end node </s>.70
INFO: ngram_search.c(1279): Eliminated 1 nodes before end node
INFO: ngram_search.c(1384): Lattice has 127 nodes, 473 links
INFO: ps_lattice.c(1380): Bestpath score: -2298
INFO: ps_lattice.c(1384): Normalizer P(O) = alpha(</s>:70:87) = -132973
INFO: ps_lattice.c(1441): Joint P(O,S) = -156371 P(S|O) = -23398
INFO: ngram_search.c(875): bestpath 0.01 CPU 0.011 xRT
INFO: ngram_search.c(878): bestpath 0.00 wall 0.005 xRT
HELLO

Esse HELLO é a única coisa que importa, e eu quero que seja enviado para um arquivo de alguma forma.

Eu já tentei adicionar >foo.txt ao final do comando, o que funciona, exceto que ele envia tudo exceto HELLO para o arquivo e HELLO nunca chega à linha de comando.

Eu tentei adicionar &> foo.txt 2> foo.txt >> foo.txt e todos eles fazem com que a saída vá até onde diz, exceto sempre que isso também faz com que READY.... , Listening... e HELLO desapareçam.

Como eu posso direcionar HELLO para um arquivo, de qualquer forma, eu não me importo se outras coisas vierem com ele, eu posso cortar as outras coisas.

    
por Patrick Cook 03.01.2016 / 01:27

1 resposta

1

Tente isto:

pocketsphinx_continuous -samprate 48000 -nfft 2048 -hmm \
/usr/local/share/pocketsphinx/model/en-us/en-us -lm 9745.lm -dict 9745.dic \
-inmic yes 2>&1 | tee ./full-output.log | grep -v --line-buffered '^INFO:'

Isso registrará everything em ./full-output.log , mas ocultará qualquer saída do console que comece com INFO: . 2>&1 redireciona o erro padrão para a saída padrão para que toda a saída seja forçada pela série de canais, em vez de apenas pela saída padrão.

Se você quisesse ocultar outras linhas que não contêm INFO: , você poderia usar | na sintaxe extended- grep :

egrep -v --line-buffered '^INFO:|^ERROR:'

A opção --line-buffered impedirá que grep espere até que a saída de pocketsphinx_continuous esteja completamente concluída.

Editar

Também é possível que pocketsphinx_continuous já esteja colocando tudo o que você deseja na Saída Padrão e em tudo que você não deseja no Erro Padrão. Então, você pode tentar apenas fazer:

pocketsphinx_continuous -samprate 48000 -nfft 2048 -hmm \
/usr/local/share/pocketsphinx/model/en-us/en-us -lm 9745.lm -dict 9745.dic \
-inmic yes 2>./unwanted-stuff.log | tee ./words.log

Isso registraria tudo que sai no Erro Padrão para ./unwanted-stuff.log e tudo na Saída Padrão para ./words.log .

    
por 03.01.2016 / 09:42