Fangjun Kuang
Committed by GitHub

Add C# API for FireRedAsr Model (#1875)

@@ -34,6 +34,10 @@ rm -fv *.wav @@ -34,6 +34,10 @@ rm -fv *.wav
34 rm -rfv sherpa-onnx-pyannote-* 34 rm -rfv sherpa-onnx-pyannote-*
35 35
36 cd ../offline-decode-files 36 cd ../offline-decode-files
  37 +
  38 +./run-fire-red-asr.sh
  39 +rm -rf sherpa-onnx-fire-red-asr-*
  40 +
37 ./run-moonshine.sh 41 ./run-moonshine.sh
38 rm -rf sherpa-onnx-* 42 rm -rf sherpa-onnx-*
39 43
@@ -34,6 +34,14 @@ class OfflineDecodeFiles @@ -34,6 +34,14 @@ class OfflineDecodeFiles
34 [Option("model-type", Required = false, Default = "", HelpText = "model type")] 34 [Option("model-type", Required = false, Default = "", HelpText = "model type")]
35 public string ModelType { get; set; } = string.Empty; 35 public string ModelType { get; set; } = string.Empty;
36 36
  37 + [Option("fire-red-asr-encoder", Required = false, Default = "", HelpText = "Path to FireRedAsr encoder.int8.onnx. Used only for FireRedAsr models")]
  38 + public string FireRedAsrEncoder { get; set; } = string.Empty;
  39 +
  40 +
  41 + [Option("fire-red-asr-decoder", Required = false, Default = "", HelpText = "Path to FireRedAsr decoder.int8.onnx. Used only for FireRedAsr models")]
  42 + public string FireRedAsrDecoder { get; set; } = string.Empty;
  43 +
  44 +
37 [Option("whisper-encoder", Required = false, Default = "", HelpText = "Path to whisper encoder.onnx. Used only for whisper models")] 45 [Option("whisper-encoder", Required = false, Default = "", HelpText = "Path to whisper encoder.onnx. Used only for whisper models")]
38 public string WhisperEncoder { get; set; } = string.Empty; 46 public string WhisperEncoder { get; set; } = string.Empty;
39 47
@@ -252,6 +260,11 @@ to download pre-trained Tdnn models. @@ -252,6 +260,11 @@ to download pre-trained Tdnn models.
252 config.ModelConfig.Moonshine.UncachedDecoder = options.MoonshineUncachedDecoder; 260 config.ModelConfig.Moonshine.UncachedDecoder = options.MoonshineUncachedDecoder;
253 config.ModelConfig.Moonshine.CachedDecoder = options.MoonshineCachedDecoder; 261 config.ModelConfig.Moonshine.CachedDecoder = options.MoonshineCachedDecoder;
254 } 262 }
  263 + else if (!string.IsNullOrEmpty(options.FireRedAsrEncoder))
  264 + {
  265 + config.ModelConfig.FireRedAsr.Encoder = options.FireRedAsrEncoder;
  266 + config.ModelConfig.FireRedAsr.Decoder = options.FireRedAsrDecoder;
  267 + }
255 else 268 else
256 { 269 {
257 Console.WriteLine("Please provide a model"); 270 Console.WriteLine("Please provide a model");
  1 +#!/usr/bin/env bash
  2 +
  3 +set -ex
  4 +
  5 + if [ ! -f ./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/encoder.int8.onnx ]; then
  6 + 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
  7 + tar xvf sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16.tar.bz2
  8 + rm sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16.tar.bz2
  9 + ls -lh sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16
  10 + fi
  11 +
  12 +dotnet run \
  13 + --num-threads=2 \
  14 + --fire-red-asr-encoder=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/encoder.int8.onnx \
  15 + --fire-red-asr-decoder=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/decoder.int8.onnx \
  16 + --tokens=./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/tokens.txt \
  17 + --files ./sherpa-onnx-fire-red-asr-large-zh_en-2025-02-16/test_wavs/0.wav
  1 +/// Copyright (c) 2025 Xiaomi Corporation (authors: Fangjun Kuang)
  2 +
  3 +using System.Runtime.InteropServices;
  4 +
  5 +namespace SherpaOnnx
  6 +{
  7 + [StructLayout(LayoutKind.Sequential)]
  8 + public struct OfflineFireRedAsrModelConfig
  9 + {
  10 + public OfflineFireRedAsrModelConfig()
  11 + {
  12 + Encoder = "";
  13 + Decoder = "";
  14 + }
  15 + [MarshalAs(UnmanagedType.LPStr)]
  16 + public string Encoder;
  17 +
  18 + [MarshalAs(UnmanagedType.LPStr)]
  19 + public string Decoder;
  20 + }
  21 +}
@@ -25,6 +25,7 @@ namespace SherpaOnnx @@ -25,6 +25,7 @@ namespace SherpaOnnx
25 TeleSpeechCtc = ""; 25 TeleSpeechCtc = "";
26 SenseVoice = new OfflineSenseVoiceModelConfig(); 26 SenseVoice = new OfflineSenseVoiceModelConfig();
27 Moonshine = new OfflineMoonshineModelConfig(); 27 Moonshine = new OfflineMoonshineModelConfig();
  28 + FireRedAsr = new OfflineFireRedAsrModelConfig();
28 } 29 }
29 public OfflineTransducerModelConfig Transducer; 30 public OfflineTransducerModelConfig Transducer;
30 public OfflineParaformerModelConfig Paraformer; 31 public OfflineParaformerModelConfig Paraformer;
@@ -56,5 +57,6 @@ namespace SherpaOnnx @@ -56,5 +57,6 @@ namespace SherpaOnnx
56 57
57 public OfflineSenseVoiceModelConfig SenseVoice; 58 public OfflineSenseVoiceModelConfig SenseVoice;
58 public OfflineMoonshineModelConfig Moonshine; 59 public OfflineMoonshineModelConfig Moonshine;
  60 + public OfflineFireRedAsrModelConfig FireRedAsr;
59 } 61 }
60 } 62 }