Add Pascal/Go/C#/Dart API for NeMo Canary ASR models (#2367)
Add support for the new NeMo Canary ASR model across multiple language bindings by introducing a Canary model configuration and setter method on the offline recognizer. - Define Canary model config in Pascal, Go, C#, Dart and update converter functions - Add SetConfig API for offline recognizer (Pascal, Go, C#, Dart) - Extend CI/workflows and example scripts to test non-streaming Canary decoding
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
module non-streaming-canary-decode-files
|
||||
|
||||
go 1.17
|
||||
|
||||
replace github.com/k2-fsa/sherpa-onnx-go/sherpa_onnx => ../
|
||||
1
scripts/go/_internal/non-streaming-canary-decode-files/main.go
Symbolic link
1
scripts/go/_internal/non-streaming-canary-decode-files/main.go
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../go-api-examples/non-streaming-canary-decode-files/main.go
|
||||
1
scripts/go/_internal/non-streaming-canary-decode-files/run.sh
Symbolic link
1
scripts/go/_internal/non-streaming-canary-decode-files/run.sh
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../go-api-examples/non-streaming-canary-decode-files/run.sh
|
||||
@@ -414,6 +414,14 @@ type OfflineWhisperModelConfig struct {
|
||||
TailPaddings int
|
||||
}
|
||||
|
||||
type OfflineCanaryModelConfig struct {
|
||||
Encoder string
|
||||
Decoder string
|
||||
SrcLang string
|
||||
TgtLang string
|
||||
UsePnc int
|
||||
}
|
||||
|
||||
type OfflineFireRedAsrModelConfig struct {
|
||||
Encoder string
|
||||
Decoder string
|
||||
@@ -453,6 +461,7 @@ type OfflineModelConfig struct {
|
||||
FireRedAsr OfflineFireRedAsrModelConfig
|
||||
Dolphin OfflineDolphinModelConfig
|
||||
ZipformerCtc OfflineZipformerCtcModelConfig
|
||||
Canary OfflineCanaryModelConfig
|
||||
Tokens string // Path to tokens.txt
|
||||
|
||||
// Number of threads to use for neural network computation
|
||||
@@ -547,6 +556,12 @@ func newCOfflineRecognizerConfig(config *OfflineRecognizerConfig) *C.struct_Sher
|
||||
c.model_config.dolphin.model = C.CString(config.ModelConfig.Dolphin.Model)
|
||||
c.model_config.zipformer_ctc.model = C.CString(config.ModelConfig.ZipformerCtc.Model)
|
||||
|
||||
c.model_config.canary.encoder = C.CString(config.ModelConfig.Canary.Encoder)
|
||||
c.model_config.canary.decoder = C.CString(config.ModelConfig.Canary.Decoder)
|
||||
c.model_config.canary.src_lang = C.CString(config.ModelConfig.Canary.SrcLang)
|
||||
c.model_config.canary.tgt_lang = C.CString(config.ModelConfig.Canary.TgtLang)
|
||||
c.model_config.canary.use_pnc = C.int(config.ModelConfig.Canary.UsePnc)
|
||||
|
||||
c.model_config.tokens = C.CString(config.ModelConfig.Tokens)
|
||||
|
||||
c.model_config.num_threads = C.int(config.ModelConfig.NumThreads)
|
||||
@@ -675,6 +690,26 @@ func freeCOfflineRecognizerConfig(c *C.struct_SherpaOnnxOfflineRecognizerConfig)
|
||||
c.model_config.zipformer_ctc.model = nil
|
||||
}
|
||||
|
||||
if c.model_config.canary.encoder != nil {
|
||||
C.free(unsafe.Pointer(c.model_config.canary.encoder))
|
||||
c.model_config.canary.encoder = nil
|
||||
}
|
||||
|
||||
if c.model_config.canary.decoder != nil {
|
||||
C.free(unsafe.Pointer(c.model_config.canary.decoder))
|
||||
c.model_config.canary.decoder = nil
|
||||
}
|
||||
|
||||
if c.model_config.canary.src_lang != nil {
|
||||
C.free(unsafe.Pointer(c.model_config.canary.src_lang))
|
||||
c.model_config.canary.src_lang = nil
|
||||
}
|
||||
|
||||
if c.model_config.canary.tgt_lang != nil {
|
||||
C.free(unsafe.Pointer(c.model_config.canary.tgt_lang))
|
||||
c.model_config.canary.tgt_lang = nil
|
||||
}
|
||||
|
||||
if c.model_config.tokens != nil {
|
||||
C.free(unsafe.Pointer(c.model_config.tokens))
|
||||
c.model_config.tokens = nil
|
||||
|
||||
Reference in New Issue
Block a user