Add non-streaming speech recognition examples for MFC (#212)

This commit is contained in:
Fangjun Kuang
2023-07-14 17:00:14 +08:00
committed by GitHub
parent bebc1f1398
commit 0abd7ce881
22 changed files with 1153 additions and 63 deletions

View File

@@ -27,36 +27,38 @@ struct SherpaOnnxDisplay {
std::unique_ptr<sherpa_onnx::Display> impl;
};
#define SHERPA_ONNX_OR(x, y) (x ? x : y)
SherpaOnnxOnlineRecognizer *CreateOnlineRecognizer(
const SherpaOnnxOnlineRecognizerConfig *config) {
sherpa_onnx::OnlineRecognizerConfig recognizer_config;
recognizer_config.feat_config.sampling_rate = config->feat_config.sample_rate;
recognizer_config.feat_config.feature_dim = config->feat_config.feature_dim;
recognizer_config.feat_config.sampling_rate = SHERPA_ONNX_OR(config->feat_config.sample_rate, 16000);
recognizer_config.feat_config.feature_dim = SHERPA_ONNX_OR(config->feat_config.feature_dim, 80);
recognizer_config.model_config.encoder_filename =
config->model_config.encoder;
SHERPA_ONNX_OR(config->model_config.encoder, "");
recognizer_config.model_config.decoder_filename =
config->model_config.decoder;
recognizer_config.model_config.joiner_filename = config->model_config.joiner;
recognizer_config.model_config.tokens = config->model_config.tokens;
recognizer_config.model_config.num_threads = config->model_config.num_threads;
recognizer_config.model_config.provider = config->model_config.provider;
recognizer_config.model_config.debug = config->model_config.debug;
SHERPA_ONNX_OR(config->model_config.decoder, "");
recognizer_config.model_config.joiner_filename = SHERPA_ONNX_OR(config->model_config.joiner, "");
recognizer_config.model_config.tokens = SHERPA_ONNX_OR(config->model_config.tokens, "");
recognizer_config.model_config.num_threads = SHERPA_ONNX_OR(config->model_config.num_threads, 1);
recognizer_config.model_config.provider = SHERPA_ONNX_OR(config->model_config.provider, "cpu");
recognizer_config.model_config.debug = SHERPA_ONNX_OR(config->model_config.debug, 0);
recognizer_config.decoding_method = config->decoding_method;
recognizer_config.max_active_paths = config->max_active_paths;
recognizer_config.decoding_method = SHERPA_ONNX_OR(config->decoding_method, "greedy_search");
recognizer_config.max_active_paths = SHERPA_ONNX_OR(config->max_active_paths, 4);
recognizer_config.enable_endpoint = config->enable_endpoint;
recognizer_config.enable_endpoint = SHERPA_ONNX_OR(config->enable_endpoint, 0);
recognizer_config.endpoint_config.rule1.min_trailing_silence =
config->rule1_min_trailing_silence;
SHERPA_ONNX_OR(config->rule1_min_trailing_silence, 2.4);
recognizer_config.endpoint_config.rule2.min_trailing_silence =
config->rule2_min_trailing_silence;
SHERPA_ONNX_OR(config->rule2_min_trailing_silence, 1.2);
recognizer_config.endpoint_config.rule3.min_utterance_length =
config->rule3_min_utterance_length;
SHERPA_ONNX_OR(config->rule3_min_utterance_length, 20);
if (config->model_config.debug) {
fprintf(stderr, "%s\n", recognizer_config.ToString().c_str());
@@ -171,34 +173,34 @@ SherpaOnnxOfflineRecognizer *CreateOfflineRecognizer(
const SherpaOnnxOfflineRecognizerConfig *config) {
sherpa_onnx::OfflineRecognizerConfig recognizer_config;
recognizer_config.feat_config.sampling_rate = config->feat_config.sample_rate;
recognizer_config.feat_config.sampling_rate = SHERPA_ONNX_OR(config->feat_config.sample_rate, 16000);
recognizer_config.feat_config.feature_dim = config->feat_config.feature_dim;
recognizer_config.feat_config.feature_dim = SHERPA_ONNX_OR(config->feat_config.feature_dim, 80);
recognizer_config.model_config.transducer.encoder_filename =
config->model_config.transducer.encoder;
SHERPA_ONNX_OR(config->model_config.transducer.encoder, "");
recognizer_config.model_config.transducer.decoder_filename =
config->model_config.transducer.decoder;
SHERPA_ONNX_OR(config->model_config.transducer.decoder, "");
recognizer_config.model_config.transducer.joiner_filename =
config->model_config.transducer.joiner;
SHERPA_ONNX_OR(config->model_config.transducer.joiner,"");
recognizer_config.model_config.paraformer.model =
config->model_config.paraformer.model;
SHERPA_ONNX_OR(config->model_config.paraformer.model, "");
recognizer_config.model_config.nemo_ctc.model =
config->model_config.nemo_ctc.model;
SHERPA_ONNX_OR(config->model_config.nemo_ctc.model, "");
recognizer_config.model_config.tokens = config->model_config.tokens;
recognizer_config.model_config.num_threads = config->model_config.num_threads;
recognizer_config.model_config.debug = config->model_config.debug;
recognizer_config.model_config.tokens = SHERPA_ONNX_OR(config->model_config.tokens, "");
recognizer_config.model_config.num_threads = SHERPA_ONNX_OR(config->model_config.num_threads, 1);
recognizer_config.model_config.debug = SHERPA_ONNX_OR(config->model_config.debug, 0);
recognizer_config.lm_config.model = config->lm_config.model;
recognizer_config.lm_config.scale = config->lm_config.scale;
recognizer_config.lm_config.model = SHERPA_ONNX_OR(config->lm_config.model, "");
recognizer_config.lm_config.scale = SHERPA_ONNX_OR(config->lm_config.scale, 1.0);
recognizer_config.decoding_method = config->decoding_method;
recognizer_config.max_active_paths = config->max_active_paths;
recognizer_config.decoding_method = SHERPA_ONNX_OR(config->decoding_method, "greedy_search");
recognizer_config.max_active_paths = SHERPA_ONNX_OR(config->max_active_paths, 4);
if (config->model_config.debug) {
fprintf(stderr, "%s\n", recognizer_config.ToString().c_str());