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:
32
scripts/dotnet/OfflineCanaryModelConfig.cs
Normal file
32
scripts/dotnet/OfflineCanaryModelConfig.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
/// Copyright (c) 2024.5 by 东风破
|
||||
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SherpaOnnx
|
||||
{
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct OfflineCanaryModelConfig
|
||||
{
|
||||
public OfflineCanaryModelConfig()
|
||||
{
|
||||
Encoder = "";
|
||||
Decoder = "";
|
||||
SrcLang = "en";
|
||||
TgtLang = "en";
|
||||
UsePnc = 1;
|
||||
}
|
||||
[MarshalAs(UnmanagedType.LPStr)]
|
||||
public string Encoder;
|
||||
|
||||
[MarshalAs(UnmanagedType.LPStr)]
|
||||
public string Decoder;
|
||||
|
||||
[MarshalAs(UnmanagedType.LPStr)]
|
||||
public string SrcLang;
|
||||
|
||||
[MarshalAs(UnmanagedType.LPStr)]
|
||||
public string TgtLang;
|
||||
|
||||
public int UsePnc;
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ namespace SherpaOnnx
|
||||
FireRedAsr = new OfflineFireRedAsrModelConfig();
|
||||
Dolphin = new OfflineDolphinModelConfig();
|
||||
ZipformerCtc = new OfflineZipformerCtcModelConfig();
|
||||
Canary = new OfflineCanaryModelConfig();
|
||||
}
|
||||
public OfflineTransducerModelConfig Transducer;
|
||||
public OfflineParaformerModelConfig Paraformer;
|
||||
@@ -62,5 +63,6 @@ namespace SherpaOnnx
|
||||
public OfflineFireRedAsrModelConfig FireRedAsr;
|
||||
public OfflineDolphinModelConfig Dolphin;
|
||||
public OfflineZipformerCtcModelConfig ZipformerCtc;
|
||||
public OfflineCanaryModelConfig Canary;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,11 @@ namespace SherpaOnnx
|
||||
_handle = new HandleRef(this, h);
|
||||
}
|
||||
|
||||
public void SetConfig(OfflineRecognizerConfig config)
|
||||
{
|
||||
SherpaOnnxOfflineRecognizerSetConfig(_handle.Handle, ref config);
|
||||
}
|
||||
|
||||
public OfflineStream CreateStream()
|
||||
{
|
||||
IntPtr p = SherpaOnnxCreateOfflineStream(_handle.Handle);
|
||||
@@ -65,6 +70,9 @@ namespace SherpaOnnx
|
||||
[DllImport(Dll.Filename)]
|
||||
private static extern IntPtr SherpaOnnxCreateOfflineRecognizer(ref OfflineRecognizerConfig config);
|
||||
|
||||
[DllImport(Dll.Filename)]
|
||||
private static extern void SherpaOnnxOfflineRecognizerSetConfig(IntPtr handle, ref OfflineRecognizerConfig config);
|
||||
|
||||
[DllImport(Dll.Filename)]
|
||||
private static extern void SherpaOnnxDestroyOfflineRecognizer(IntPtr handle);
|
||||
|
||||
|
||||
@@ -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