Support non-streaming zipformer CTC ASR models (#2340)
This PR adds support for non-streaming Zipformer CTC ASR models across multiple language bindings, WebAssembly, examples, and CI workflows. - Introduces a new OfflineZipformerCtcModelConfig in C/C++, Python, Swift, Java, Kotlin, Go, Dart, Pascal, and C# APIs - Updates initialization, freeing, and recognition logic to include Zipformer CTC in WASM and Node.js - Adds example scripts and CI steps for downloading, building, and running Zipformer CTC models Model doc is available at https://k2-fsa.github.io/sherpa/onnx/pretrained_models/offline-ctc/icefall/zipformer.html
This commit is contained in:
@@ -113,6 +113,16 @@ std::unique_ptr<OfflineCtcModel> OfflineCtcModel::Create(
|
||||
const OfflineModelConfig &config) {
|
||||
if (!config.dolphin.model.empty()) {
|
||||
return std::make_unique<OfflineDolphinModel>(config);
|
||||
} else if (!config.nemo_ctc.model.empty()) {
|
||||
return std::make_unique<OfflineNemoEncDecCtcModel>(config);
|
||||
} else if (!config.tdnn.model.empty()) {
|
||||
return std::make_unique<OfflineTdnnCtcModel>(config);
|
||||
} else if (!config.zipformer_ctc.model.empty()) {
|
||||
return std::make_unique<OfflineZipformerCtcModel>(config);
|
||||
} else if (!config.wenet_ctc.model.empty()) {
|
||||
return std::make_unique<OfflineWenetCtcModel>(config);
|
||||
} else if (!config.telespeech_ctc.empty()) {
|
||||
return std::make_unique<OfflineTeleSpeechCtcModel>(config);
|
||||
}
|
||||
|
||||
// TODO(fangjun): Refactor it. We don't need to use model_type here
|
||||
@@ -167,6 +177,16 @@ std::unique_ptr<OfflineCtcModel> OfflineCtcModel::Create(
|
||||
Manager *mgr, const OfflineModelConfig &config) {
|
||||
if (!config.dolphin.model.empty()) {
|
||||
return std::make_unique<OfflineDolphinModel>(mgr, config);
|
||||
} else if (!config.nemo_ctc.model.empty()) {
|
||||
return std::make_unique<OfflineNemoEncDecCtcModel>(mgr, config);
|
||||
} else if (!config.tdnn.model.empty()) {
|
||||
return std::make_unique<OfflineTdnnCtcModel>(mgr, config);
|
||||
} else if (!config.zipformer_ctc.model.empty()) {
|
||||
return std::make_unique<OfflineZipformerCtcModel>(mgr, config);
|
||||
} else if (!config.wenet_ctc.model.empty()) {
|
||||
return std::make_unique<OfflineWenetCtcModel>(mgr, config);
|
||||
} else if (!config.telespeech_ctc.empty()) {
|
||||
return std::make_unique<OfflineTeleSpeechCtcModel>(mgr, config);
|
||||
}
|
||||
|
||||
// TODO(fangjun): Refactor it. We don't need to use model_type here
|
||||
|
||||
Reference in New Issue
Block a user