Add Java and Kotlin API for NeMo Canary models (#2359)
Add support for the NeMo Canary model in both Java and Kotlin APIs, wiring it through JNI and updating examples and CI. - Introduce OfflineCanaryModelConfig in Kotlin and Java with builder patterns - Extend OfflineRecognizer to accept and apply the new canary config via setConfig - Update JNI binding (GetOfflineConfig) and getOfflineModelConfig mapping (type 32), plus examples and CI workflows
This commit is contained in:
@@ -41,6 +41,14 @@ data class OfflineWhisperModelConfig(
|
||||
var tailPaddings: Int = 1000, // Padding added at the end of the samples
|
||||
)
|
||||
|
||||
data class OfflineCanaryModelConfig(
|
||||
var encoder: String = "",
|
||||
var decoder: String = "",
|
||||
var srcLang: String = "en",
|
||||
var tgtLang: String = "en",
|
||||
var usePnc: Boolean = true,
|
||||
)
|
||||
|
||||
data class OfflineFireRedAsrModelConfig(
|
||||
var encoder: String = "",
|
||||
var decoder: String = "",
|
||||
@@ -69,6 +77,7 @@ data class OfflineModelConfig(
|
||||
var senseVoice: OfflineSenseVoiceModelConfig = OfflineSenseVoiceModelConfig(),
|
||||
var dolphin: OfflineDolphinModelConfig = OfflineDolphinModelConfig(),
|
||||
var zipformerCtc: OfflineZipformerCtcModelConfig = OfflineZipformerCtcModelConfig(),
|
||||
var canary: OfflineCanaryModelConfig = OfflineCanaryModelConfig(),
|
||||
var teleSpeech: String = "",
|
||||
var numThreads: Int = 1,
|
||||
var debug: Boolean = false,
|
||||
@@ -95,7 +104,7 @@ data class OfflineRecognizerConfig(
|
||||
|
||||
class OfflineRecognizer(
|
||||
assetManager: AssetManager? = null,
|
||||
config: OfflineRecognizerConfig,
|
||||
val config: OfflineRecognizerConfig,
|
||||
) {
|
||||
private var ptr: Long
|
||||
|
||||
@@ -142,10 +151,14 @@ class OfflineRecognizer(
|
||||
|
||||
fun decode(stream: OfflineStream) = decode(ptr, stream.ptr)
|
||||
|
||||
fun setConfig(config: OfflineRecognizerConfig) = setConfig(ptr, config)
|
||||
|
||||
private external fun delete(ptr: Long)
|
||||
|
||||
private external fun createStream(ptr: Long): Long
|
||||
|
||||
private external fun setConfig(ptr: Long, config: OfflineRecognizerConfig)
|
||||
|
||||
private external fun newFromAsset(
|
||||
assetManager: AssetManager,
|
||||
config: OfflineRecognizerConfig,
|
||||
@@ -574,6 +587,20 @@ fun getOfflineModelConfig(type: Int): OfflineModelConfig? {
|
||||
tokens = "$modelDir/tokens.txt",
|
||||
)
|
||||
}
|
||||
|
||||
32 -> {
|
||||
val modelDir = "sherpa-onnx-nemo-canary-180m-flash-en-es-de-fr-int8"
|
||||
return OfflineModelConfig(
|
||||
canary = OfflineCanaryModelConfig(
|
||||
encoder = "$modelDir/encoder.int8.onnx",
|
||||
decoder = "$modelDir/decoder.int8.onnx",
|
||||
srcLang = "en",
|
||||
tgtLang = "en",
|
||||
usePnc = true,
|
||||
),
|
||||
tokens = "$modelDir/tokens.txt",
|
||||
)
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user