diff --git a/.github/scripts/test-dot-net.sh b/.github/scripts/test-dot-net.sh index aa41ad98..9ee8b9cc 100755 --- a/.github/scripts/test-dot-net.sh +++ b/.github/scripts/test-dot-net.sh @@ -34,6 +34,10 @@ rm -fv *.wav rm -rfv sherpa-onnx-pyannote-* cd ../offline-decode-files + +./run-fire-red-asr.sh +rm -rf sherpa-onnx-fire-red-asr-* + ./run-moonshine.sh rm -rf sherpa-onnx-* diff --git a/dotnet-examples/offline-decode-files/Program.cs b/dotnet-examples/offline-decode-files/Program.cs index 0d944e5a..ecbed2a5 100644 --- a/dotnet-examples/offline-decode-files/Program.cs +++ b/dotnet-examples/offline-decode-files/Program.cs @@ -34,6 +34,14 @@ class OfflineDecodeFiles [Option("model-type", Required = false, Default = "", HelpText = "model type")] public string ModelType { get; set; } = string.Empty; + [Option("fire-red-asr-encoder", Required = false, Default = "", HelpText = "Path to FireRedAsr encoder.int8.onnx. Used only for FireRedAsr models")] + public string FireRedAsrEncoder { get; set; } = string.Empty; + + + [Option("fire-red-asr-decoder", Required = false, Default = "", HelpText = "Path to FireRedAsr decoder.int8.onnx. Used only for FireRedAsr models")] + public string FireRedAsrDecoder { get; set; } = string.Empty; + + [Option("whisper-encoder", Required = false, Default = "", HelpText = "Path to whisper encoder.onnx. Used only for whisper models")] public string WhisperEncoder { get; set; } = string.Empty; @@ -252,6 +260,11 @@ to download pre-trained Tdnn models. config.ModelConfig.Moonshine.UncachedDecoder = options.MoonshineUncachedDecoder; config.ModelConfig.Moonshine.CachedDecoder = options.MoonshineCachedDecoder; } + else if (!string.IsNullOrEmpty(options.FireRedAsrEncoder)) + { + config.ModelConfig.FireRedAsr.Encoder = options.FireRedAsrEncoder; + config.ModelConfig.FireRedAsr.Decoder = options.FireRedAsrDecoder; + } else { Console.WriteLine("Please provide a model"); diff --git a/dotnet-examples/offline-decode-files/run-fire-red-asr.sh b/dotnet-examples/offline-decode-files/run-fire-red-asr.sh new file mode 100755 index 00000000..5156f618 --- /dev/null +++ b/dotnet-examples/offline-decode-files/run-fire-red-asr.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +set -ex + + if [ ! -f ./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/encoder.int8.onnx ]; then + curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16.tar.bz2 + tar xvf sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16.tar.bz2 + rm sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16.tar.bz2 + ls -lh sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16 + fi + +dotnet run \ + --num-threads=2 \ + --fire-red-asr-encoder=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/encoder.int8.onnx \ + --fire-red-asr-decoder=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/decoder.int8.onnx \ + --tokens=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/tokens.txt \ + --files ./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/test_wavs/0.wav diff --git a/scripts/dotnet/OfflineFireRedAsrModelConfig.cs b/scripts/dotnet/OfflineFireRedAsrModelConfig.cs new file mode 100644 index 00000000..2fa6a9e9 --- /dev/null +++ b/scripts/dotnet/OfflineFireRedAsrModelConfig.cs @@ -0,0 +1,21 @@ +/// Copyright (c) 2025 Xiaomi Corporation (authors: Fangjun Kuang) + +using System.Runtime.InteropServices; + +namespace SherpaOnnx +{ + [StructLayout(LayoutKind.Sequential)] + public struct OfflineFireRedAsrModelConfig + { + public OfflineFireRedAsrModelConfig() + { + Encoder = ""; + Decoder = ""; + } + [MarshalAs(UnmanagedType.LPStr)] + public string Encoder; + + [MarshalAs(UnmanagedType.LPStr)] + public string Decoder; + } +} diff --git a/scripts/dotnet/OfflineModelConfig.cs b/scripts/dotnet/OfflineModelConfig.cs index b7433c27..a06c1ae8 100644 --- a/scripts/dotnet/OfflineModelConfig.cs +++ b/scripts/dotnet/OfflineModelConfig.cs @@ -25,6 +25,7 @@ namespace SherpaOnnx TeleSpeechCtc = ""; SenseVoice = new OfflineSenseVoiceModelConfig(); Moonshine = new OfflineMoonshineModelConfig(); + FireRedAsr = new OfflineFireRedAsrModelConfig(); } public OfflineTransducerModelConfig Transducer; public OfflineParaformerModelConfig Paraformer; @@ -56,5 +57,6 @@ namespace SherpaOnnx public OfflineSenseVoiceModelConfig SenseVoice; public OfflineMoonshineModelConfig Moonshine; + public OfflineFireRedAsrModelConfig FireRedAsr; } }