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:
@@ -11,6 +11,7 @@ public class OfflineModelConfig {
|
||||
private final OfflineNemoEncDecCtcModelConfig nemo;
|
||||
private final OfflineSenseVoiceModelConfig senseVoice;
|
||||
private final OfflineDolphinModelConfig dolphin;
|
||||
private final OfflineZipformerCtcModelConfig zipformerCtc;
|
||||
private final String teleSpeech;
|
||||
private final String tokens;
|
||||
private final int numThreads;
|
||||
@@ -28,6 +29,7 @@ public class OfflineModelConfig {
|
||||
this.fireRedAsr = builder.fireRedAsr;
|
||||
this.moonshine = builder.moonshine;
|
||||
this.nemo = builder.nemo;
|
||||
this.zipformerCtc = builder.zipformerCtc;
|
||||
this.senseVoice = builder.senseVoice;
|
||||
this.dolphin = builder.dolphin;
|
||||
this.teleSpeech = builder.teleSpeech;
|
||||
@@ -52,7 +54,7 @@ public class OfflineModelConfig {
|
||||
return transducer;
|
||||
}
|
||||
|
||||
public OfflineWhisperModelConfig getZipformer2Ctc() {
|
||||
public OfflineWhisperModelConfig getWhisper() {
|
||||
return whisper;
|
||||
}
|
||||
|
||||
@@ -68,6 +70,14 @@ public class OfflineModelConfig {
|
||||
return dolphin;
|
||||
}
|
||||
|
||||
public OfflineNemoEncDecCtcModelConfig getNemo() {
|
||||
return nemo;
|
||||
}
|
||||
|
||||
public OfflineZipformerCtcModelConfig getZipformerCtc() {
|
||||
return zipformerCtc;
|
||||
}
|
||||
|
||||
public String getTokens() {
|
||||
return tokens;
|
||||
}
|
||||
@@ -109,6 +119,7 @@ public class OfflineModelConfig {
|
||||
private OfflineNemoEncDecCtcModelConfig nemo = OfflineNemoEncDecCtcModelConfig.builder().build();
|
||||
private OfflineSenseVoiceModelConfig senseVoice = OfflineSenseVoiceModelConfig.builder().build();
|
||||
private OfflineDolphinModelConfig dolphin = OfflineDolphinModelConfig.builder().build();
|
||||
private OfflineZipformerCtcModelConfig zipformerCtc = OfflineZipformerCtcModelConfig.builder().build();
|
||||
private String teleSpeech = "";
|
||||
private String tokens = "";
|
||||
private int numThreads = 1;
|
||||
@@ -142,6 +153,11 @@ public class OfflineModelConfig {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setZipformerCtc(OfflineZipformerCtcModelConfig zipformerCtc) {
|
||||
this.zipformerCtc = zipformerCtc;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setTeleSpeech(String teleSpeech) {
|
||||
this.teleSpeech = teleSpeech;
|
||||
return this;
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// Copyright 2025 Xiaomi Corporation
|
||||
|
||||
package com.k2fsa.sherpa.onnx;
|
||||
|
||||
public class OfflineZipformerCtcModelConfig {
|
||||
private final String model;
|
||||
|
||||
private OfflineZipformerCtcModelConfig(Builder builder) {
|
||||
this.model = builder.model;
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public String getModel() {
|
||||
return model;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private String model = "";
|
||||
|
||||
public OfflineZipformerCtcModelConfig build() {
|
||||
return new OfflineZipformerCtcModelConfig(this);
|
||||
}
|
||||
|
||||
public Builder setModel(String model) {
|
||||
this.model = model;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user