diff --git a/.github/scripts/test-dot-net.sh b/.github/scripts/test-dot-net.sh index c67db9d1..6c3305dd 100755 --- a/.github/scripts/test-dot-net.sh +++ b/.github/scripts/test-dot-net.sh @@ -39,6 +39,9 @@ rm -rfv sherpa-onnx-pyannote-* cd ../offline-decode-files +./run-dolphin-ctc.sh +rm -rf sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02 + ./run-fire-red-asr.sh rm -rf sherpa-onnx-fire-red-asr-* diff --git a/.github/workflows/c-api.yaml b/.github/workflows/c-api.yaml index 5baa448e..40978766 100644 --- a/.github/workflows/c-api.yaml +++ b/.github/workflows/c-api.yaml @@ -97,7 +97,7 @@ jobs: readelf -d ./$name fi - curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02 + curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 tar xvf sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 rm sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 diff --git a/.github/workflows/cxx-api.yaml b/.github/workflows/cxx-api.yaml index d88e45fd..fe755c5d 100644 --- a/.github/workflows/cxx-api.yaml +++ b/.github/workflows/cxx-api.yaml @@ -103,7 +103,7 @@ jobs: readelf -d ./$name fi - curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02 + curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 tar xvf sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 rm sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 diff --git a/c-api-examples/CMakeLists.txt b/c-api-examples/CMakeLists.txt index bbaabddf..df63444b 100644 --- a/c-api-examples/CMakeLists.txt +++ b/c-api-examples/CMakeLists.txt @@ -56,6 +56,9 @@ target_link_libraries(fire-red-asr-c-api sherpa-onnx-c-api) add_executable(sense-voice-c-api sense-voice-c-api.c) target_link_libraries(sense-voice-c-api sherpa-onnx-c-api) +add_executable(dolphin-ctc-c-api dolphin-ctc-c-api.c) +target_link_libraries(dolphin-ctc-c-api sherpa-onnx-c-api) + add_executable(moonshine-c-api moonshine-c-api.c) target_link_libraries(moonshine-c-api sherpa-onnx-c-api) diff --git a/c-api-examples/dolphin-ctc-c-api.c b/c-api-examples/dolphin-ctc-c-api.c index b69ad9c5..d4419ae4 100644 --- a/c-api-examples/dolphin-ctc-c-api.c +++ b/c-api-examples/dolphin-ctc-c-api.c @@ -6,7 +6,7 @@ // This file demonstrates how to use Dolphin CTC model with sherpa-onnx's C API. // clang-format off // -// wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02 +// wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 // tar xvf sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 // rm sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 // diff --git a/cxx-api-examples/dolphin-ctc-cxx-api.cc b/cxx-api-examples/dolphin-ctc-cxx-api.cc index 23cbc432..ba597e38 100644 --- a/cxx-api-examples/dolphin-ctc-cxx-api.cc +++ b/cxx-api-examples/dolphin-ctc-cxx-api.cc @@ -7,7 +7,7 @@ // // clang-format off // -// wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02 +// wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 // tar xvf sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 // rm sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 // diff --git a/dotnet-examples/offline-decode-files/Program.cs b/dotnet-examples/offline-decode-files/Program.cs index ecbed2a5..a13d2ed6 100644 --- a/dotnet-examples/offline-decode-files/Program.cs +++ b/dotnet-examples/offline-decode-files/Program.cs @@ -75,6 +75,9 @@ class OfflineDecodeFiles [Option("nemo-ctc", Required = false, HelpText = "Path to model.onnx. Used only for NeMo CTC models")] public string NeMoCtc { get; set; } = string.Empty; + [Option("dolphin-model", Required = false, Default = "", HelpText = "Path to dolphin ctc model")] + public string DolphinModel { get; set; } = string.Empty; + [Option("telespeech-ctc", Required = false, HelpText = "Path to model.onnx. Used only for TeleSpeech CTC models")] public string TeleSpeechCtc { get; set; } = string.Empty; @@ -233,6 +236,10 @@ to download pre-trained Tdnn models. { config.ModelConfig.NeMoCtc.Model = options.NeMoCtc; } + else if (!string.IsNullOrEmpty(options.DolphinModel)) + { + config.ModelConfig.Dolphin.Model = options.DolphinModel; + } else if (!string.IsNullOrEmpty(options.TeleSpeechCtc)) { config.ModelConfig.TeleSpeechCtc = options.TeleSpeechCtc; diff --git a/dotnet-examples/offline-decode-files/run-dolphin-ctc.sh b/dotnet-examples/offline-decode-files/run-dolphin-ctc.sh new file mode 100755 index 00000000..716b7ece --- /dev/null +++ b/dotnet-examples/offline-decode-files/run-dolphin-ctc.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -ex + +if [ ! -f ./sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02/model.int8.onnx ]; then + curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 + tar xvf sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 + rm sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02.tar.bz2 + ls -lh sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02 +fi + +dotnet run \ + --tokens=./sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02/tokens.txt \ + --dolphin-model=./sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02/model.int8.onnx \ + --num-threads=1 \ + --files ./sherpa-onnx-dolphin-base-ctc-multi-lang-int8-2025-04-02/test_wavs/0.wav diff --git a/scripts/dotnet/OfflineDolphinModelConfig.cs b/scripts/dotnet/OfflineDolphinModelConfig.cs new file mode 100644 index 00000000..e8ef809a --- /dev/null +++ b/scripts/dotnet/OfflineDolphinModelConfig.cs @@ -0,0 +1,17 @@ +/// Copyright (c) 2025 Xiaomi Corporation (authors: Fangjun Kuang) + +using System.Runtime.InteropServices; + +namespace SherpaOnnx +{ + [StructLayout(LayoutKind.Sequential)] + public struct OfflineDolphinModelConfig + { + public OfflineDolphinModelConfig() + { + Model = ""; + } + [MarshalAs(UnmanagedType.LPStr)] + public string Model; + } +} diff --git a/scripts/dotnet/OfflineModelConfig.cs b/scripts/dotnet/OfflineModelConfig.cs index a06c1ae8..f184b850 100644 --- a/scripts/dotnet/OfflineModelConfig.cs +++ b/scripts/dotnet/OfflineModelConfig.cs @@ -26,6 +26,7 @@ namespace SherpaOnnx SenseVoice = new OfflineSenseVoiceModelConfig(); Moonshine = new OfflineMoonshineModelConfig(); FireRedAsr = new OfflineFireRedAsrModelConfig(); + Dolphin = new OfflineDolphinModelConfig(); } public OfflineTransducerModelConfig Transducer; public OfflineParaformerModelConfig Paraformer; @@ -58,5 +59,6 @@ namespace SherpaOnnx public OfflineSenseVoiceModelConfig SenseVoice; public OfflineMoonshineModelConfig Moonshine; public OfflineFireRedAsrModelConfig FireRedAsr; + public OfflineDolphinModelConfig Dolphin; } }