Skip to content

Commit 12cfffe

Browse files
authored
Add C# API for SenseVoice models (k2-fsa#1151)
1 parent 7f6342a commit 12cfffe

File tree

8 files changed

+79
-28
lines changed

8 files changed

+79
-28
lines changed

.github/scripts/test-dot-net.sh

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,8 @@
22

33
cd dotnet-examples/
44

5-
cd ./keyword-spotting-from-files
6-
./run.sh
7-
8-
cd ../online-decode-files
9-
./run-transducer-itn.sh
10-
./run-zipformer2-ctc.sh
11-
./run-transducer.sh
12-
./run-paraformer.sh
13-
14-
cd ../offline-decode-files
5+
cd ./offline-decode-files
6+
./run-sense-voice-ctc.sh
157
./run-paraformer-itn.sh
168
./run-telespeech-ctc.sh
179
./run-nemo-ctc.sh
@@ -21,6 +13,15 @@ cd ../offline-decode-files
2113
./run-whisper.sh
2214
./run-tdnn-yesno.sh
2315

16+
cd ../keyword-spotting-from-files
17+
./run.sh
18+
19+
cd ../online-decode-files
20+
./run-transducer-itn.sh
21+
./run-zipformer2-ctc.sh
22+
./run-transducer.sh
23+
./run-paraformer.sh
24+
2425
cd ../vad-non-streaming-asr-paraformer
2526
./run.sh
2627

dotnet-examples/offline-decode-files/Program.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ class Options
6161
[Option("telespeech-ctc", Required = false, HelpText = "Path to model.onnx. Used only for TeleSpeech CTC models")]
6262
public string TeleSpeechCtc { get; set; } = "";
6363

64+
[Option("sense-voice-model", Required = false, HelpText = "Path to model.onnx. Used only for SenseVoice CTC models")]
65+
public string SenseVoiceModel { get; set; } = "";
66+
67+
[Option("sense-voice-use-itn", Required = false, HelpText = "1 to use inverse text normalization for sense voice.")]
68+
public int SenseVoiceUseItn { get; set; } = 1;
69+
6470
[Option("num-threads", Required = false, Default = 1, HelpText = "Number of threads for computation")]
6571
public int NumThreads { get; set; } = 1;
6672

@@ -225,6 +231,11 @@ private static void Run(Options options)
225231
{
226232
config.ModelConfig.Tdnn.Model = options.TdnnModel;
227233
}
234+
else if (!String.IsNullOrEmpty(options.SenseVoiceModel))
235+
{
236+
config.ModelConfig.SenseVoice.Model = options.SenseVoiceModel;
237+
config.ModelConfig.SenseVoice.UseInverseTextNormalization = options.SenseVoiceUseItn;
238+
}
228239
else
229240
{
230241
Console.WriteLine("Please provide a model");
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/usr/bin/env bash
2+
3+
set -ex
4+
5+
if [ ! -d ./sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17 ]; then
6+
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
7+
tar xvf sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
8+
rm sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
9+
fi
10+
11+
dotnet run \
12+
--sense-voice-model=./sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/model.int8.onnx \
13+
--tokens=./sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/tokens.txt \
14+
--files ./sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/test_wavs/zh.wav

scripts/dart/release.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ windows_x64_wheel=$src_dir/$windows_x64_wheel_filename
3636
function process_linux() {
3737
mkdir -p t
3838
cd t
39-
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/$linux_wheel_filename
39+
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/$linux_wheel_filename
4040
unzip $linux_wheel_filename
4141
cp -v sherpa_onnx/lib/*.so* ../linux
4242
cd ..
@@ -50,7 +50,7 @@ function process_linux() {
5050
function process_windows_x64() {
5151
mkdir -p t
5252
cd t
53-
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/$windows_x64_wheel_filename
53+
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/$windows_x64_wheel_filename
5454
unzip $windows_x64_wheel_filename
5555
cp -v sherpa_onnx-${SHERPA_ONNX_VERSION}.data/data/bin/*.dll ../windows
5656
cd ..
@@ -60,7 +60,7 @@ function process_windows_x64() {
6060
function process_macos() {
6161
mkdir -p t
6262
cd t
63-
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/$macos_wheel_filename
63+
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/$macos_wheel_filename
6464
unzip $macos_wheel_filename
6565
cp -v sherpa_onnx/lib/*.dylib ../macos
6666
cd ..

scripts/dotnet/OfflineModelConfig.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public OfflineModelConfig()
2323
ModelingUnit = "cjkchar";
2424
BpeVocab = "";
2525
TeleSpeechCtc = "";
26+
SenseVoice = new OfflineSenseVoiceModelConfig();
2627
}
2728
public OfflineTransducerModelConfig Transducer;
2829
public OfflineParaformerModelConfig Paraformer;
@@ -51,7 +52,7 @@ public OfflineModelConfig()
5152

5253
[MarshalAs(UnmanagedType.LPStr)]
5354
public string TeleSpeechCtc;
54-
}
55-
5655

57-
}
56+
public OfflineSenseVoiceModelConfig SenseVoice;
57+
}
58+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/// Copyright (c) 2024 Xiaomi Corporation (authors: Fangjun Kuang)
2+
3+
using System.Runtime.InteropServices;
4+
5+
namespace SherpaOnnx
6+
{
7+
[StructLayout(LayoutKind.Sequential)]
8+
public struct OfflineSenseVoiceModelConfig
9+
{
10+
public OfflineSenseVoiceModelConfig()
11+
{
12+
Model = "";
13+
Language = "";
14+
UseInverseTextNormalization = 0;
15+
}
16+
[MarshalAs(UnmanagedType.LPStr)]
17+
public string Model;
18+
19+
[MarshalAs(UnmanagedType.LPStr)]
20+
public string Language;
21+
22+
public int UseInverseTextNormalization;
23+
}
24+
}

scripts/dotnet/run.sh

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ if [ ! -f $src_dir/linux-x64/libsherpa-onnx-c-api.so ]; then
5555
if [ -f $linux_x64_wheel ]; then
5656
cp -v $linux_x64_wheel .
5757
else
58-
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/$linux_x64_wheel_filename
58+
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/$linux_x64_wheel_filename
5959
fi
6060
unzip $linux_x64_wheel_filename
6161
cp -v sherpa_onnx/lib/*.so* ../
@@ -73,7 +73,7 @@ if [ ! -f $src_dir/linux-arm64/libsherpa-onnx-c-api.so ]; then
7373
if [ -f $linux_arm64_wheel ]; then
7474
cp -v $linux_arm64_wheel .
7575
else
76-
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/$linux_arm64_wheel_filename
76+
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/$linux_arm64_wheel_filename
7777
fi
7878
unzip $linux_arm64_wheel_filename
7979
cp -v sherpa_onnx/lib/*.so* ../
@@ -91,7 +91,7 @@ if [ ! -f $src_dir/macos-x64/libsherpa-onnx-c-api.dylib ]; then
9191
if [ -f $macos_x64_wheel ]; then
9292
cp -v $macos_x64_wheel .
9393
else
94-
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/$macos_x64_wheel_filename
94+
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/$macos_x64_wheel_filename
9595
fi
9696
unzip $macos_x64_wheel_filename
9797
cp -v sherpa_onnx/lib/*.dylib ../
@@ -111,7 +111,7 @@ if [ ! -f $src_dir/macos-arm64/libsherpa-onnx-c-api.dylib ]; then
111111
if [ -f $macos_arm64_wheel ]; then
112112
cp -v $macos_arm64_wheel .
113113
else
114-
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/$macos_arm64_wheel_filename
114+
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/$macos_arm64_wheel_filename
115115
fi
116116
unzip $macos_arm64_wheel_filename
117117
cp -v sherpa_onnx/lib/*.dylib ../
@@ -131,7 +131,7 @@ if [ ! -f $src_dir/windows-x64/sherpa-onnx-c-api.dll ]; then
131131
if [ -f $windows_x64_wheel ]; then
132132
cp -v $windows_x64_wheel .
133133
else
134-
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/$windows_x64_wheel_filename
134+
curl -OL https://$HF_MIRROR/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/$windows_x64_wheel_filename
135135
fi
136136
unzip $windows_x64_wheel_filename
137137
cp -v sherpa_onnx-${SHERPA_ONNX_VERSION}.data/data/bin/*.dll ../

scripts/go/release.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function linux() {
2727
dst=$(realpath sherpa-onnx-go-linux/lib/x86_64-unknown-linux-gnu)
2828
mkdir t
2929
cd t
30-
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
30+
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
3131
unzip ./sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
3232

3333
cp -v sherpa_onnx/lib/*.so* $dst
@@ -39,7 +39,7 @@ function linux() {
3939
dst=$(realpath sherpa-onnx-go-linux/lib/aarch64-unknown-linux-gnu)
4040
mkdir t
4141
cd t
42-
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
42+
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
4343
unzip ./sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
4444

4545
cp -v sherpa_onnx/lib/*.so* $dst
@@ -51,7 +51,7 @@ function linux() {
5151
dst=$(realpath sherpa-onnx-go-linux/lib/arm-unknown-linux-gnueabihf)
5252
mkdir t
5353
cd t
54-
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-linux_armv7l.whl
54+
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-linux_armv7l.whl
5555
unzip ./sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-linux_armv7l.whl
5656

5757
cp -v sherpa_onnx/lib/*.so* $dst
@@ -84,7 +84,7 @@ function osx() {
8484

8585
mkdir t
8686
cd t
87-
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp39-cp39-macosx_11_0_x86_64.whl
87+
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp39-cp39-macosx_11_0_x86_64.whl
8888
unzip ./sherpa_onnx-${SHERPA_ONNX_VERSION}-cp39-cp39-macosx_11_0_x86_64.whl
8989

9090
cp -v sherpa_onnx/lib/*.dylib $dst/
@@ -102,7 +102,7 @@ function osx() {
102102

103103
mkdir t
104104
cd t
105-
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp39-cp39-macosx_11_0_arm64.whl
105+
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp39-cp39-macosx_11_0_arm64.whl
106106
unzip ./sherpa_onnx-${SHERPA_ONNX_VERSION}-cp39-cp39-macosx_11_0_arm64.whl
107107

108108
cp -v sherpa_onnx/lib/*.dylib $dst/
@@ -137,7 +137,7 @@ function windows() {
137137
dst=$(realpath sherpa-onnx-go-windows/lib/x86_64-pc-windows-gnu)
138138
mkdir t
139139
cd t
140-
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-win_amd64.whl
140+
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-win_amd64.whl
141141
unzip ./sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-win_amd64.whl
142142

143143
cp -v sherpa_onnx-${SHERPA_ONNX_VERSION}.data/data/bin/*.dll $dst
@@ -149,7 +149,7 @@ function windows() {
149149
dst=$(realpath sherpa-onnx-go-windows/lib/i686-pc-windows-gnu)
150150
mkdir t
151151
cd t
152-
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-win32.whl
152+
wget -q https://huggingface.co/csukuangfj/sherpa-onnx-wheels/resolve/main/cpu/$SHERPA_ONNX_VERSION/sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-win32.whl
153153
unzip ./sherpa_onnx-${SHERPA_ONNX_VERSION}-cp38-cp38-win32.whl
154154

155155
cp -v sherpa_onnx-${SHERPA_ONNX_VERSION}.data/data/bin/*.dll $dst

0 commit comments

Comments
 (0)