Add Kotlin and Java API for Dolphin CTC models (#2086)

This commit is contained in:
Fangjun Kuang
2025-04-02 21:16:14 +08:00
committed by GitHub
parent 0de7e1b9f0
commit eee5575836
20 changed files with 517 additions and 18 deletions

View File

@@ -30,6 +30,7 @@ java_files += OfflineFireRedAsrModelConfig.java
java_files += OfflineMoonshineModelConfig.java
java_files += OfflineNemoEncDecCtcModelConfig.java
java_files += OfflineSenseVoiceModelConfig.java
java_files += OfflineDolphinModelConfig.java
java_files += OfflineModelConfig.java
java_files += OfflineRecognizerConfig.java
java_files += OfflineRecognizerResult.java

View File

@@ -0,0 +1,32 @@
// Copyright 2025 Xiaomi Corporation
package com.k2fsa.sherpa.onnx;
public class OfflineDolphinModelConfig {
private final String model;
private OfflineDolphinModelConfig(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 OfflineDolphinModelConfig build() {
return new OfflineDolphinModelConfig(this);
}
public Builder setModel(String model) {
this.model = model;
return this;
}
}
}

View File

@@ -10,6 +10,7 @@ public class OfflineModelConfig {
private final OfflineMoonshineModelConfig moonshine;
private final OfflineNemoEncDecCtcModelConfig nemo;
private final OfflineSenseVoiceModelConfig senseVoice;
private final OfflineDolphinModelConfig dolphin;
private final String teleSpeech;
private final String tokens;
private final int numThreads;
@@ -28,6 +29,7 @@ public class OfflineModelConfig {
this.moonshine = builder.moonshine;
this.nemo = builder.nemo;
this.senseVoice = builder.senseVoice;
this.dolphin = builder.dolphin;
this.teleSpeech = builder.teleSpeech;
this.tokens = builder.tokens;
this.numThreads = builder.numThreads;
@@ -62,6 +64,10 @@ public class OfflineModelConfig {
return senseVoice;
}
public OfflineDolphinModelConfig getDolphin() {
return dolphin;
}
public String getTokens() {
return tokens;
}
@@ -102,6 +108,7 @@ public class OfflineModelConfig {
private OfflineMoonshineModelConfig moonshine = OfflineMoonshineModelConfig.builder().build();
private OfflineNemoEncDecCtcModelConfig nemo = OfflineNemoEncDecCtcModelConfig.builder().build();
private OfflineSenseVoiceModelConfig senseVoice = OfflineSenseVoiceModelConfig.builder().build();
private OfflineDolphinModelConfig dolphin = OfflineDolphinModelConfig.builder().build();
private String teleSpeech = "";
private String tokens = "";
private int numThreads = 1;
@@ -120,6 +127,11 @@ public class OfflineModelConfig {
return this;
}
public Builder setDolphin(OfflineDolphinModelConfig dolphin) {
this.dolphin = dolphin;
return this;
}
public Builder setParaformer(OfflineParaformerModelConfig paraformer) {
this.paraformer = paraformer;
return this;

View File

@@ -265,6 +265,19 @@ static OfflineRecognizerConfig GetOfflineConfig(JNIEnv *env, jobject config) {
ans.model_config.nemo_ctc.model = p;
env->ReleaseStringUTFChars(s, p);
// dolphin
fid = env->GetFieldID(model_config_cls, "dolphin",
"Lcom/k2fsa/sherpa/onnx/OfflineDolphinModelConfig;");
jobject dolphin_config = env->GetObjectField(model_config, fid);
jclass dolphin_config_cls = env->GetObjectClass(dolphin_config);
fid = env->GetFieldID(nemo_config_cls, "model", "Ljava/lang/String;");
s = (jstring)env->GetObjectField(dolphin_config, fid);
p = env->GetStringUTFChars(s, nullptr);
ans.model_config.dolphin.model = p;
env->ReleaseStringUTFChars(s, p);
fid = env->GetFieldID(model_config_cls, "teleSpeech", "Ljava/lang/String;");
s = (jstring)env->GetObjectField(model_config, fid);
p = env->GetStringUTFChars(s, nullptr);

View File

@@ -25,6 +25,10 @@ data class OfflineNemoEncDecCtcModelConfig(
var model: String = "",
)
data class OfflineDolphinModelConfig(
var model: String = "",
)
data class OfflineWhisperModelConfig(
var encoder: String = "",
var decoder: String = "",
@@ -59,6 +63,7 @@ data class OfflineModelConfig(
var moonshine: OfflineMoonshineModelConfig = OfflineMoonshineModelConfig(),
var nemo: OfflineNemoEncDecCtcModelConfig = OfflineNemoEncDecCtcModelConfig(),
var senseVoice: OfflineSenseVoiceModelConfig = OfflineSenseVoiceModelConfig(),
var dolphin: OfflineDolphinModelConfig = OfflineDolphinModelConfig(),
var teleSpeech: String = "",
var numThreads: Int = 1,
var debug: Boolean = false,
@@ -481,6 +486,16 @@ fun getOfflineModelConfig(type: Int): OfflineModelConfig? {
tokens = "$modelDir/tokens.txt",
)
}
25 -> {
val modelDir = "sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02"
return OfflineModelConfig(
dolphin = OfflineDolphinModelConfig(
model = "$modelDir/model.int8.onnx",
),
tokens = "$modelDir/tokens.txt",
)
}
}
return null
}

View File

@@ -374,6 +374,26 @@ fun getModelConfig(type: Int): OnlineModelConfig? {
modelType = "zipformer",
)
}
15 -> {
val modelDir = "sherpa-onnx-streaming-zipformer-small-ctc-zh-int8-2025-04-01"
return OnlineModelConfig(
zipformer2Ctc = OnlineZipformer2CtcModelConfig(
model = "$modelDir/model.int8.onnx",
),
tokens = "$modelDir/tokens.txt",
)
}
16 -> {
val modelDir = "sherpa-onnx-streaming-zipformer-small-ctc-zh-2025-04-01"
return OnlineModelConfig(
zipformer2Ctc = OnlineZipformer2CtcModelConfig(
model = "$modelDir/model.onnx",
),
tokens = "$modelDir/tokens.txt",
)
}
}
return null
}