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:
@@ -15,6 +15,7 @@ export { Samples,
|
||||
OfflineTdnnModelConfig,
|
||||
OfflineSenseVoiceModelConfig,
|
||||
OfflineMoonshineModelConfig,
|
||||
OfflineZipformerCtcModelConfig,
|
||||
OfflineModelConfig,
|
||||
OfflineLMConfig,
|
||||
OfflineRecognizerConfig,
|
||||
|
||||
@@ -45,7 +45,23 @@ static SherpaOnnxOfflineParaformerModelConfig GetOfflineParaformerModelConfig(
|
||||
return c;
|
||||
}
|
||||
|
||||
static SherpaOnnxOfflineDolphinModelConfig GetOfflineDolphinfig(
|
||||
static SherpaOnnxOfflineZipformerCtcModelConfig
|
||||
GetOfflineZipformerCtcModelConfig(Napi::Object obj) {
|
||||
SherpaOnnxOfflineZipformerCtcModelConfig c;
|
||||
memset(&c, 0, sizeof(c));
|
||||
|
||||
if (!obj.Has("zipformerCtc") || !obj.Get("zipformerCtc").IsObject()) {
|
||||
return c;
|
||||
}
|
||||
|
||||
Napi::Object o = obj.Get("zipformerCtc").As<Napi::Object>();
|
||||
|
||||
SHERPA_ONNX_ASSIGN_ATTR_STR(model, model);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
static SherpaOnnxOfflineDolphinModelConfig GetOfflineDolphinModelConfig(
|
||||
Napi::Object obj) {
|
||||
SherpaOnnxOfflineDolphinModelConfig c;
|
||||
memset(&c, 0, sizeof(c));
|
||||
@@ -185,7 +201,8 @@ static SherpaOnnxOfflineModelConfig GetOfflineModelConfig(Napi::Object obj) {
|
||||
c.sense_voice = GetOfflineSenseVoiceModelConfig(o);
|
||||
c.moonshine = GetOfflineMoonshineModelConfig(o);
|
||||
c.fire_red_asr = GetOfflineFireRedAsrModelConfig(o);
|
||||
c.dolphin = GetOfflineDolphinfig(o);
|
||||
c.dolphin = GetOfflineDolphinModelConfig(o);
|
||||
c.zipformer_ctc = GetOfflineZipformerCtcModelConfig(o);
|
||||
|
||||
SHERPA_ONNX_ASSIGN_ATTR_STR(tokens, tokens);
|
||||
SHERPA_ONNX_ASSIGN_ATTR_INT32(num_threads, numThreads);
|
||||
@@ -312,6 +329,7 @@ CreateOfflineRecognizerWrapper(const Napi::CallbackInfo &info) {
|
||||
SHERPA_ONNX_DELETE_C_STR(c.model_config.fire_red_asr.decoder);
|
||||
|
||||
SHERPA_ONNX_DELETE_C_STR(c.model_config.dolphin.model);
|
||||
SHERPA_ONNX_DELETE_C_STR(c.model_config.zipformer_ctc.model);
|
||||
|
||||
SHERPA_ONNX_DELETE_C_STR(c.model_config.tokens);
|
||||
SHERPA_ONNX_DELETE_C_STR(c.model_config.provider);
|
||||
|
||||
@@ -55,6 +55,10 @@ export class OfflineDolphinModelConfig {
|
||||
public model: string = '';
|
||||
}
|
||||
|
||||
export class OfflineZipformerCtcModelConfig {
|
||||
public model: string = '';
|
||||
}
|
||||
|
||||
export class OfflineWhisperModelConfig {
|
||||
public encoder: string = '';
|
||||
public decoder: string = '';
|
||||
@@ -97,6 +101,7 @@ export class OfflineModelConfig {
|
||||
public senseVoice: OfflineSenseVoiceModelConfig = new OfflineSenseVoiceModelConfig();
|
||||
public moonshine: OfflineMoonshineModelConfig = new OfflineMoonshineModelConfig();
|
||||
public dolphin: OfflineDolphinModelConfig = new OfflineDolphinModelConfig();
|
||||
public zipformerCtc: OfflineZipformerCtcModelConfig = new OfflineZipformerCtcModelConfig();
|
||||
}
|
||||
|
||||
export class OfflineLMConfig {
|
||||
|
||||
Reference in New Issue
Block a user