0

使用Alumae的 GStreamer 插件和以下管道:

appsrc source='appsrc' ! wavparse ! audioconvert ! audioresample ! queue ! kaldinnet2onlinedecoder <parameters snipped> ! filesink location=/tmp/test

我总是得到以下我不明白的断言 KALDI_ASSERT(current_log_post_.NumRows() == info_.frames_per_chunk / info_.opts.frame_subsampling_factor && current_log_post_.NumCols() == info_.output_dim);

这个断言错误是关于什么的?如何解决?

仅供参考,推入管道的数据来自流式 wav 文件,并用wavenc替换kaldinnetonlinedecoder正确生成 Wav 文件而不是最后的文本文件。

编辑 这里是使用的参数:

use-threaded-decoder=0   
model=/opt/en/final.mdl   
word-syms=<word-file>  
fst=<fst_file>
mfcc-config=<mfcc-file>  
ivector-extraction-config=/opt/en/ivector-extraction/ivector_extractor.conf  
max-active=10000  
beam=10.0  
lattice-beam=6.0  
do-endpointing=1  
endpoint-silence-phones=\"1:2:3:4:5:6:7:8:9:10\"  
traceback-period-in-secs=0.25  
num-nbest=10  

供您参考,在 python 中使用管道文本表示但对其进行编码(即使用 Gst.Element_Factory.make 等)总是抛出异常

第二次更新 这是断言生成的完整堆栈跟踪

ASSERTION_FAILED ([5.2]:AdvanceChunk():decodable-online-looped.cc:223) : 'current_log_post_.NumRows() == info_.frames_per_chunk / info_.opts.frame_subsampling_factor && current_log_post_.NumCols() == info_.output_dim'

[ Stack-Trace: ]

kaldi::MessageLogger::HandleMessage(kaldi::LogMessageEnvelope const&, char const*)
kaldi::MessageLogger::~MessageLogger()
kaldi::KaldiAssertFailure_(char const*, char const*, int, char const*)
kaldi::nnet3::DecodableNnetLoopedOnlineBase::AdvanceChunk()
kaldi::nnet3::DecodableNnetLoopedOnlineBase::EnsureFrameIsComputed(int)
kaldi::nnet3::DecodableAmNnetLoopedOnline::LogLikelihood(int, int)
kaldi::LatticeFasterOnlineDecoder::ProcessEmitting(kaldi::DecodableInterface*)
kaldi::LatticeFasterOnlineDecoder::AdvanceDecoding(kaldi::DecodableInterface*, int)
kaldi::SingleUtteranceNnet3Decoder::AdvanceDecoding()
4

1 回答 1

0

我终于让它工作了,即使使用frame-subsampling-factor参数。

问题在于参数的顺序。 fst模型参数必须是最后一个。

因此,以下文本链起作用:

gst-launch-1.0 pulsesrc device=alsa_input.pci-0000_00_05.0.analog-stereo ! queue ! \
           audioconvert ! \
           audioresample ! tee name=t ! queue ! \
       kaldinnet2onlinedecoder \
       use-threaded-decoder=0 \
       nnet-mode=3 \
       word-syms=/opt/models/fr/words.txt \
       mfcc-config=/opt/models/fr/mfcc_hires.conf \
       ivector-extraction-config=/opt/models/fr/ivector-extraction/ivector_extractor.conf \
       phone-syms=/opt/models/fr/phones.txt \
       frame-subsampling-factor=3 \
       max-active=7000 \
       beam=13.0 \
       lattice-beam=8.0 \
       acoustic-scale=1 \
       do-endpointing=1 \
       endpoint-silence-phones=1:2:3:4:5:16:17:18:19:20 \
       traceback-period-in-secs=0.25 \
       num-nbest=2 \
       chunk-length-in-secs=0.25 \
       fst=/opt/models/fr/HCLG.fst \
       model=/opt/models/fr/final.mdl \
       ! filesink async=0 location=/dev/stdout t. ! queue ! autoaudiosink async=0

我在 GitHub 上为此打开了一个问题,这对我来说真的很难找到,至少应该记录在案。

于 2018-01-23T16:21:19.587 回答