Skip to content

Commit a629912

Browse files
authored
Small fix to online recongizer C++ code. (k2-fsa#3297)
1 parent 1213d30 commit a629912

11 files changed

Lines changed: 59 additions & 30 deletions

sherpa-onnx/csrc/online-ebranchformer-transducer-model.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ OnlineEbranchformerTransducerModel::OnlineEbranchformerTransducerModel(
6666
: env_(ORT_LOGGING_LEVEL_ERROR),
6767
config_(config),
6868
encoder_sess_opts_(GetSessionOptions(config)),
69-
decoder_sess_opts_(GetSessionOptions(config)),
70-
joiner_sess_opts_(GetSessionOptions(config)),
69+
decoder_sess_opts_(GetSessionOptions(config, "decoder")),
70+
joiner_sess_opts_(GetSessionOptions(config, "joiner")),
7171
allocator_{} {
7272
{
7373
auto buf = ReadFile(mgr, config.transducer.encoder);

sherpa-onnx/csrc/online-model-config.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ bool OnlineModelConfig::Validate() const {
134134
}
135135
}
136136

137+
if (!provider_config.Validate()) {
138+
return false;
139+
}
140+
137141
if (!paraformer.encoder.empty()) {
138142
return paraformer.Validate();
139143
}
@@ -154,10 +158,6 @@ bool OnlineModelConfig::Validate() const {
154158
return t_one_ctc.Validate();
155159
}
156160

157-
if (!provider_config.Validate()) {
158-
return false;
159-
}
160-
161161
return transducer.Validate();
162162
}
163163

sherpa-onnx/csrc/online-recognizer-ctc-impl.h

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
namespace sherpa_onnx {
2828

29-
OnlineRecognizerResult ConvertCtc(const OnlineCtcDecoderResult &src,
29+
static OnlineRecognizerResult ConvertCtc(const OnlineCtcDecoderResult &src,
3030
const SymbolTable &sym_table,
3131
float frame_shift_ms,
3232
int32_t subsampling_factor, int32_t segment,
@@ -79,8 +79,12 @@ class OnlineRecognizerCtcImpl : public OnlineRecognizerImpl {
7979
: OnlineRecognizerImpl(config),
8080
config_(config),
8181
model_(OnlineCtcModel::Create(config.model_config)),
82-
sym_(config.model_config.tokens),
8382
endpoint_(config_.endpoint_config) {
83+
if (!config.model_config.tokens_buf.empty()) {
84+
sym_ = SymbolTable(config.model_config.tokens_buf, false);
85+
} else {
86+
sym_ = SymbolTable(config.model_config.tokens, true);
87+
}
8488
PostInit();
8589
}
8690

@@ -90,8 +94,12 @@ class OnlineRecognizerCtcImpl : public OnlineRecognizerImpl {
9094
: OnlineRecognizerImpl(mgr, config),
9195
config_(config),
9296
model_(OnlineCtcModel::Create(mgr, config.model_config)),
93-
sym_(mgr, config.model_config.tokens),
9497
endpoint_(config_.endpoint_config) {
98+
if (!config.model_config.tokens_buf.empty()) {
99+
sym_ = SymbolTable(config.model_config.tokens_buf, false);
100+
} else {
101+
sym_ = SymbolTable(mgr, config.model_config.tokens);
102+
}
95103
PostInit();
96104
}
97105

@@ -209,11 +217,15 @@ class OnlineRecognizerCtcImpl : public OnlineRecognizerImpl {
209217

210218
int32_t num_processed_frames = s->GetNumProcessedFrames();
211219

212-
// frame shift is 10 milliseconds
213220
float frame_shift_in_seconds = 0.01;
221+
int32_t subsampling_factor = 4;
222+
if (!config_.model_config.t_one_ctc.model.empty()) {
223+
frame_shift_in_seconds = 0.03;
224+
subsampling_factor = 1;
225+
}
214226

215-
// subsampling factor is 4
216-
int32_t trailing_silence_frames = s->GetCtcResult().num_trailing_blanks * 4;
227+
int32_t trailing_silence_frames =
228+
s->GetCtcResult().num_trailing_blanks * subsampling_factor;
217229

218230
return endpoint_.IsEndpoint(num_processed_frames, trailing_silence_frames,
219231
frame_shift_in_seconds);
@@ -242,11 +254,6 @@ class OnlineRecognizerCtcImpl : public OnlineRecognizerImpl {
242254

243255
private:
244256
void PostInit() {
245-
if (!config_.model_config.tokens_buf.empty()) {
246-
/// assuming tokens_buf and tokens are guaranteed not being both empty
247-
sym_ = SymbolTable(config_.model_config.tokens_buf, false);
248-
}
249-
250257
if (!config_.model_config.wenet_ctc.model.empty()) {
251258
// WeNet CTC models assume input samples are in the range
252259
// [-32768, 32767], so we set normalize_samples to false

sherpa-onnx/csrc/online-recognizer-impl.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ std::unique_ptr<OnlineRecognizerImpl> OnlineRecognizerImpl::Create(
9292

9393
SHERPA_ONNX_LOGE("Please specify a model");
9494
SHERPA_ONNX_EXIT(-1);
95+
return nullptr;
9596
}
9697

9798
template <typename Manager>
@@ -152,6 +153,7 @@ std::unique_ptr<OnlineRecognizerImpl> OnlineRecognizerImpl::Create(
152153

153154
SHERPA_ONNX_LOGE("Please specify a model");
154155
SHERPA_ONNX_EXIT(-1);
156+
return nullptr;
155157
}
156158

157159
OnlineRecognizerImpl::OnlineRecognizerImpl(const OnlineRecognizerConfig &config)

sherpa-onnx/csrc/online-recognizer-paraformer-impl.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,12 @@ class OnlineRecognizerParaformerImpl : public OnlineRecognizerImpl {
127127
: OnlineRecognizerImpl(mgr, config),
128128
config_(config),
129129
model_(mgr, config.model_config),
130-
sym_(mgr, config.model_config.tokens),
131130
endpoint_(config_.endpoint_config) {
131+
if (!config.model_config.tokens_buf.empty()) {
132+
sym_ = SymbolTable(config.model_config.tokens_buf, false);
133+
} else {
134+
sym_ = SymbolTable(mgr, config.model_config.tokens);
135+
}
132136
if (config.decoding_method != "greedy_search") {
133137
SHERPA_ONNX_LOGE("Unsupported decoding method: %s",
134138
config.decoding_method.c_str());
@@ -195,8 +199,14 @@ class OnlineRecognizerParaformerImpl : public OnlineRecognizerImpl {
195199
}
196200

197201
void Reset(OnlineStream *s) const override {
198-
OnlineParaformerDecoderResult r;
199-
s->SetParaformerResult(r);
202+
// segment is incremented only when the last result is not empty
203+
const auto &r = s->GetParaformerResult();
204+
if (!r.tokens.empty()) {
205+
s->GetCurrentSegment() += 1;
206+
}
207+
208+
OnlineParaformerDecoderResult empty;
209+
s->SetParaformerResult(empty);
200210

201211
s->GetStates().clear();
202212
s->GetParaformerEncoderOutCache().clear();

sherpa-onnx/csrc/online-recognizer-transducer-impl.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,9 @@ class OnlineRecognizerTransducerImpl : public OnlineRecognizerImpl {
168168
bpe_encoder_ = std::make_unique<ssentencepiece::Ssentencepiece>(iss);
169169
}
170170

171-
if (!config_.hotwords_file.empty()) {
171+
if (!config_.hotwords_buf.empty()) {
172+
InitHotwordsFromBufStr();
173+
} else if (!config_.hotwords_file.empty()) {
172174
InitHotwords(mgr);
173175
}
174176

@@ -252,8 +254,7 @@ class OnlineRecognizerTransducerImpl : public OnlineRecognizerImpl {
252254
return;
253255
}
254256
int32_t chunk_size = model_->ChunkSize();
255-
int32_t chunk_shift = model_->ChunkShift();
256-
int32_t feature_dim = 80;
257+
int32_t feature_dim = config_.feat_config.feature_dim;
257258
std::vector<OnlineTransducerDecoderResult> results(max_batch_size);
258259
std::vector<float> features_vec(max_batch_size * chunk_size * feature_dim);
259260
std::vector<std::vector<Ort::Value>> states_vec(max_batch_size);

sherpa-onnx/csrc/online-recognizer-transducer-nemo-impl.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,14 @@ class OnlineRecognizerTransducerNeMoImpl : public OnlineRecognizerImpl {
6565
Manager *mgr, const OnlineRecognizerConfig &config)
6666
: OnlineRecognizerImpl(mgr, config),
6767
config_(config),
68-
symbol_table_(mgr, config.model_config.tokens),
6968
endpoint_(config_.endpoint_config),
7069
model_(std::make_unique<OnlineTransducerNeMoModel>(
7170
mgr, config.model_config)) {
71+
if (!config.model_config.tokens_buf.empty()) {
72+
symbol_table_ = SymbolTable(config.model_config.tokens_buf, false);
73+
} else {
74+
symbol_table_ = SymbolTable(mgr, config.model_config.tokens);
75+
}
7276
if (config.decoding_method == "greedy_search") {
7377
decoder_ = std::make_unique<OnlineTransducerGreedySearchNeMoDecoder>(
7478
model_.get(), config_.blank_penalty);

sherpa-onnx/csrc/online-recognizer.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,15 @@ void OnlineRecognizerConfig::Register(ParseOptions *po) {
131131
}
132132

133133
bool OnlineRecognizerConfig::Validate() const {
134-
if (decoding_method == "modified_beam_search" && !lm_config.model.empty()) {
134+
if (decoding_method == "modified_beam_search") {
135135
if (max_active_paths <= 0) {
136-
SHERPA_ONNX_LOGE("max_active_paths is less than 0! Given: %d",
136+
SHERPA_ONNX_LOGE("max_active_paths must be > 0. Given: %d",
137137
max_active_paths);
138138
return false;
139139
}
140+
}
140141

142+
if (decoding_method == "modified_beam_search" && !lm_config.model.empty()) {
141143
if (!lm_config.Validate()) {
142144
return false;
143145
}

sherpa-onnx/csrc/online-recognizer.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,8 @@ struct OnlineRecognizerConfig {
132132
int32_t max_active_paths, const std::string &hotwords_file,
133133
float hotwords_score, float blank_penalty, float temperature_scale,
134134
const std::string &rule_fsts, const std::string &rule_fars,
135-
bool reset_encoder, const HomophoneReplacerConfig &hr)
135+
bool reset_encoder, const HomophoneReplacerConfig &hr,
136+
const std::string &hotwords_buf = {})
136137
: feat_config(feat_config),
137138
model_config(model_config),
138139
lm_config(lm_config),
@@ -148,7 +149,8 @@ struct OnlineRecognizerConfig {
148149
rule_fsts(rule_fsts),
149150
rule_fars(rule_fars),
150151
reset_encoder(reset_encoder),
151-
hr(hr) {}
152+
hr(hr),
153+
hotwords_buf(hotwords_buf) {}
152154

153155
void Register(ParseOptions *po);
154156
bool Validate() const;

sherpa-onnx/csrc/online-wenet-ctc-model.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ std::vector<Ort::Value> OnlineWenetCtcModel::StackStates(
256256
if (states.size() != 1) {
257257
SHERPA_ONNX_LOGE("wenet CTC model supports only batch_size==1. Given: %d",
258258
static_cast<int32_t>(states.size()));
259+
SHERPA_ONNX_EXIT(-1);
259260
}
260261

261262
return std::move(states[0]);

0 commit comments

Comments
 (0)