Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 43 additions & 43 deletions .github/scripts/test-nodejs-npm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,49 @@ git status
ls -lh
ls -lh node_modules

# online asr
curl -LS -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
tar xvf sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
rm sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
node ./test-online-paraformer.js
rm -rf sherpa-onnx-streaming-paraformer-bilingual-zh-en

curl -LS -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
tar xvf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
rm sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2

rm -f itn*
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/itn-zh-number.wav
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/itn_zh_number.fst

node ./test-online-transducer-itn.js

node ./test-online-transducer.js

rm -rf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20

curl -LS -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13.tar.bz2
tar xvf sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13.tar.bz2
rm sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13.tar.bz2

node ./test-online-zipformer2-ctc.js
rm -rf sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13

curl -LS -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
tar xvf sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
rm sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
node ./test-online-zipformer2-ctc-hlg.js
rm -rf sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18

echo "----------keyword spotting----------"

curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/kws-models/sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz2
tar xvf sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz2
rm sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz2

node ./test-keyword-spotter-transducer.js
rm -rf sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01

# asr with offline nemo canary
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-nemo-canary-180m-flash-en-es-de-fr-int8.tar.bz2
tar xvf sherpa-onnx-nemo-canary-180m-flash-en-es-de-fr-int8.tar.bz2
Expand Down Expand Up @@ -145,15 +188,6 @@ rm Obama.wav
rm silero_vad.onnx
rm -rf sherpa-onnx-whisper-tiny.en

echo "----------keyword spotting----------"

curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/kws-models/sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz2
tar xvf sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz2
rm sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz2

node ./test-keyword-spotter-transducer.js
rm -rf sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01

# offline asr
#
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
Expand Down Expand Up @@ -218,37 +252,3 @@ rm sherpa-onnx-moonshine-tiny-en-int8.tar.bz2

node ./test-offline-moonshine.js
rm -rf sherpa-onnx-moonshine-*

# online asr
curl -LS -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
tar xvf sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
rm sherpa-onnx-streaming-paraformer-bilingual-zh-en.tar.bz2
node ./test-online-paraformer.js
rm -rf sherpa-onnx-streaming-paraformer-bilingual-zh-en

curl -LS -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
tar xvf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2
rm sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20.tar.bz2

rm -f itn*
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/itn-zh-number.wav
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/itn_zh_number.fst

node ./test-online-transducer-itn.js

node ./test-online-transducer.js

rm -rf sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20

curl -LS -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13.tar.bz2
tar xvf sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13.tar.bz2
rm sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13.tar.bz2

node ./test-online-zipformer2-ctc.js
rm -rf sherpa-onnx-streaming-zipformer-ctc-multi-zh-hans-2023-12-13

curl -LS -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
tar xvf sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
rm sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18.tar.bz2
node ./test-online-zipformer2-ctc-hlg.js
rm -rf sherpa-onnx-streaming-zipformer-ctc-small-2024-03-18
2 changes: 1 addition & 1 deletion dotnet-examples/offline-decode-files/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ to download pre-trained non-streaming zipformer models.

dotnet run \
--tokens=./sherpa-onnx-paraformer-zh-2023-09-14/tokens.txt \
--paraformer=./sherpa-onnx-paraformer-zh-2023-09-14/model.onnx \
--paraformer=./sherpa-onnx-paraformer-zh-2023-09-14/model.int8.onnx \
--files ./sherpa-onnx-zipformer-en-2023-04-01/test_wavs/0.wav \
./sherpa-onnx-paraformer-zh-2023-09-14/test_wavs/0.wav \
./sherpa-onnx-paraformer-zh-2023-09-14/test_wavs/1.wav \
Expand Down
2 changes: 1 addition & 1 deletion dotnet-examples/offline-decode-files/run-paraformer-itn.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ fi

dotnet run \
--tokens=./sherpa-onnx-paraformer-zh-2023-09-14/tokens.txt \
--paraformer=./sherpa-onnx-paraformer-zh-2023-09-14/model.onnx \
--paraformer=./sherpa-onnx-paraformer-zh-2023-09-14/model.int8.onnx \
--rule-fsts=./itn_zh_number.fst \
--num-threads=2 \
--files ./itn-zh-number.wav
2 changes: 1 addition & 1 deletion dotnet-examples/offline-decode-files/run-paraformer.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ fi

dotnet run \
--tokens=./sherpa-onnx-paraformer-zh-2023-09-14/tokens.txt \
--paraformer=./sherpa-onnx-paraformer-zh-2023-09-14/model.onnx \
--paraformer=./sherpa-onnx-paraformer-zh-2023-09-14/model.int8.onnx \
--num-threads=2 \
--files ./sherpa-onnx-paraformer-zh-2023-09-14/test_wavs/0.wav \
./sherpa-onnx-paraformer-zh-2023-09-14/test_wavs/1.wav \
Expand Down
4 changes: 1 addition & 3 deletions dotnet-examples/offline-decode-files/run-zipformer-ctc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,4 @@ dotnet run \
--tokens=./sherpa-onnx-zipformer-ctc-zh-int8-2025-07-03/tokens.txt \
--zipformer-ctc=./sherpa-onnx-zipformer-ctc-zh-int8-2025-07-03/model.int8.onnx \
--num-threads=1 \
--files ./sherpa-onnx-zipformer-ctc-zh-int8-2025-07-03/test_wavs/0.wav \
./sherpa-onnx-zipformer-ctc-zh-int8-2025-07-03/test_wavs/1.wav \
./sherpa-onnx-zipformer-ctc-zh-int8-2025-07-03/test_wavs/8k.wav
--files ./sherpa-onnx-zipformer-ctc-zh-int8-2025-07-03/test_wavs/0.wav
4 changes: 4 additions & 0 deletions flutter/sherpa_onnx/lib/src/keyword_spotter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,9 @@ class KeywordSpotter {
c.ref.model.zipformer2Ctc.model =
config.model.zipformer2Ctc.model.toNativeUtf8();

// nemoCtc
c.ref.model.nemoCtc.model = config.model.nemoCtc.model.toNativeUtf8();

c.ref.model.tokens = config.model.tokens.toNativeUtf8();
c.ref.model.numThreads = config.model.numThreads;
c.ref.model.provider = config.model.provider.toNativeUtf8();
Expand All @@ -146,6 +149,7 @@ class KeywordSpotter {
calloc.free(c.ref.model.modelType);
calloc.free(c.ref.model.provider);
calloc.free(c.ref.model.tokens);
calloc.free(c.ref.model.nemoCtc.model);
calloc.free(c.ref.model.zipformer2Ctc.model);
calloc.free(c.ref.model.paraformer.encoder);
calloc.free(c.ref.model.paraformer.decoder);
Expand Down
32 changes: 31 additions & 1 deletion flutter/sherpa_onnx/lib/src/online_recognizer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,33 @@ class OnlineZipformer2CtcModelConfig {
final String model;
}

class OnlineNemoCtcModelConfig {
const OnlineNemoCtcModelConfig({this.model = ''});

factory OnlineNemoCtcModelConfig.fromJson(Map<String, dynamic> json) {
return OnlineNemoCtcModelConfig(
model: json['model'] as String? ?? '',
);
}

@override
String toString() {
return 'OnlineNemoCtcModelConfig(model: $model)';
}

Map<String, dynamic> toJson() => {
'model': model,
};

final String model;
}

class OnlineModelConfig {
const OnlineModelConfig({
this.transducer = const OnlineTransducerModelConfig(),
this.paraformer = const OnlineParaformerModelConfig(),
this.zipformer2Ctc = const OnlineZipformer2CtcModelConfig(),
this.nemoCtc = const OnlineNemoCtcModelConfig(),
required this.tokens,
this.numThreads = 1,
this.provider = 'cpu',
Expand All @@ -108,6 +130,8 @@ class OnlineModelConfig {
json['paraformer'] as Map<String, dynamic>? ?? const {}),
zipformer2Ctc: OnlineZipformer2CtcModelConfig.fromJson(
json['zipformer2Ctc'] as Map<String, dynamic>? ?? const {}),
nemoCtc: OnlineNemoCtcModelConfig.fromJson(
json['nemoCtc'] as Map<String, dynamic>? ?? const {}),
tokens: json['tokens'] as String,
numThreads: json['numThreads'] as int? ?? 1,
provider: json['provider'] as String? ?? 'cpu',
Expand All @@ -120,13 +144,14 @@ class OnlineModelConfig {

@override
String toString() {
return 'OnlineModelConfig(transducer: $transducer, paraformer: $paraformer, zipformer2Ctc: $zipformer2Ctc, tokens: $tokens, numThreads: $numThreads, provider: $provider, debug: $debug, modelType: $modelType, modelingUnit: $modelingUnit, bpeVocab: $bpeVocab)';
return 'OnlineModelConfig(transducer: $transducer, paraformer: $paraformer, zipformer2Ctc: $zipformer2Ctc, nemoCtc: $nemoCtc, tokens: $tokens, numThreads: $numThreads, provider: $provider, debug: $debug, modelType: $modelType, modelingUnit: $modelingUnit, bpeVocab: $bpeVocab)';
}

Map<String, dynamic> toJson() => {
'transducer': transducer.toJson(),
'paraformer': paraformer.toJson(),
'zipformer2Ctc': zipformer2Ctc.toJson(),
'nemoCtc': nemoCtc.toJson(),
'tokens': tokens,
'numThreads': numThreads,
'provider': provider,
Expand All @@ -139,6 +164,7 @@ class OnlineModelConfig {
final OnlineTransducerModelConfig transducer;
final OnlineParaformerModelConfig paraformer;
final OnlineZipformer2CtcModelConfig zipformer2Ctc;
final OnlineNemoCtcModelConfig nemoCtc;

final String tokens;

Expand Down Expand Up @@ -333,6 +359,9 @@ class OnlineRecognizer {
c.ref.model.zipformer2Ctc.model =
config.model.zipformer2Ctc.model.toNativeUtf8();

// nemoCtc
c.ref.model.nemoCtc.model = config.model.nemoCtc.model.toNativeUtf8();

c.ref.model.tokens = config.model.tokens.toNativeUtf8();
c.ref.model.numThreads = config.model.numThreads;
c.ref.model.provider = config.model.provider.toNativeUtf8();
Expand Down Expand Up @@ -377,6 +406,7 @@ class OnlineRecognizer {
calloc.free(c.ref.model.modelType);
calloc.free(c.ref.model.provider);
calloc.free(c.ref.model.tokens);
calloc.free(c.ref.model.nemoCtc.model);
calloc.free(c.ref.model.zipformer2Ctc.model);
calloc.free(c.ref.model.paraformer.encoder);
calloc.free(c.ref.model.paraformer.decoder);
Expand Down
6 changes: 6 additions & 0 deletions flutter/sherpa_onnx/lib/src/sherpa_onnx_bindings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,10 @@ final class SherpaOnnxOnlineZipformer2CtcModelConfig extends Struct {
external Pointer<Utf8> model;
}

final class SherpaOnnxOnlineNemoCtcModelConfig extends Struct {
external Pointer<Utf8> model;
}

final class SherpaOnnxOnlineModelConfig extends Struct {
external SherpaOnnxOnlineTransducerModelConfig transducer;
external SherpaOnnxOnlineParaformerModelConfig paraformer;
Expand All @@ -413,6 +417,8 @@ final class SherpaOnnxOnlineModelConfig extends Struct {

@Int32()
external int tokensBufSize;

external SherpaOnnxOnlineNemoCtcModelConfig nemoCtc;
}

final class SherpaOnnxOnlineCtcFstDecoderConfig extends Struct {
Expand Down
14 changes: 0 additions & 14 deletions go-api-examples/non-streaming-canary-decode-files/go.mod
Original file line number Diff line number Diff line change
@@ -1,17 +1,3 @@
module non-streaming-canary-decode-files

go 1.17

require (
github.com/k2-fsa/sherpa-onnx-go v1.12.4
github.com/spf13/pflag v1.0.6
github.com/youpy/go-wav v0.3.2
)

require (
github.com/k2-fsa/sherpa-onnx-go-linux v1.12.4 // indirect
github.com/k2-fsa/sherpa-onnx-go-macos v1.12.4 // indirect
github.com/k2-fsa/sherpa-onnx-go-windows v1.12.4 // indirect
github.com/youpy/go-riff v0.1.0 // indirect
github.com/zaf/g711 v0.0.0-20190814101024-76a4a538f52b // indirect
)
1 change: 1 addition & 0 deletions harmony-os/SherpaOnnxHar/sherpa_onnx/Index.ets
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export { Samples,
} from './src/main/ets/components/NonStreamingAsr';

export { OnlineStream,
OnlineNemoCtcModelConfig,
OnlineTransducerModelConfig,
OnlineParaformerModelConfig,
OnlineZipformer2CtcModelConfig,
Expand Down
18 changes: 18 additions & 0 deletions harmony-os/SherpaOnnxHar/sherpa_onnx/src/main/cpp/streaming-asr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,22 @@ GetOnlineZipformer2CtcModelConfig(Napi::Object obj) {
return c;
}

static SherpaOnnxOnlineNemoCtcModelConfig GetOnlineNemoCtcModelConfig(
Napi::Object obj) {
SherpaOnnxOnlineNemoCtcModelConfig c;
memset(&c, 0, sizeof(c));

if (!obj.Has("nemoCtc") || !obj.Get("nemoCtc").IsObject()) {
return c;
}

Napi::Object o = obj.Get("nemoCtc").As<Napi::Object>();

SHERPA_ONNX_ASSIGN_ATTR_STR(model, model);

return c;
}

static SherpaOnnxOnlineParaformerModelConfig GetOnlineParaformerModelConfig(
Napi::Object obj) {
SherpaOnnxOnlineParaformerModelConfig c;
Expand Down Expand Up @@ -103,6 +119,7 @@ SherpaOnnxOnlineModelConfig GetOnlineModelConfig(Napi::Object obj) {
c.transducer = GetOnlineTransducerModelConfig(o);
c.paraformer = GetOnlineParaformerModelConfig(o);
c.zipformer2_ctc = GetOnlineZipformer2CtcModelConfig(o);
c.nemo_ctc = GetOnlineNemoCtcModelConfig(o);

SHERPA_ONNX_ASSIGN_ATTR_STR(tokens, tokens);
SHERPA_ONNX_ASSIGN_ATTR_INT32(num_threads, numThreads);
Expand Down Expand Up @@ -248,6 +265,7 @@ static Napi::External<SherpaOnnxOnlineRecognizer> CreateOnlineRecognizerWrapper(
SHERPA_ONNX_DELETE_C_STR(c.model_config.paraformer.encoder);
SHERPA_ONNX_DELETE_C_STR(c.model_config.paraformer.decoder);

SHERPA_ONNX_DELETE_C_STR(c.model_config.nemo_ctc.model);
SHERPA_ONNX_DELETE_C_STR(c.model_config.zipformer2_ctc.model);
SHERPA_ONNX_DELETE_C_STR(c.model_config.tokens);
SHERPA_ONNX_DELETE_C_STR(c.model_config.provider);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,15 @@ export class OnlineZipformer2CtcModelConfig {
public model: string = '';
}

export class OnlineNemoCtcModelConfig {
public model: string = '';
}

export class OnlineModelConfig {
public transducer: OnlineTransducerModelConfig = new OnlineTransducerModelConfig();
public paraformer: OnlineParaformerModelConfig = new OnlineParaformerModelConfig();
public zipformer2_ctc: OnlineZipformer2CtcModelConfig = new OnlineZipformer2CtcModelConfig();
public nemo_ctc: OnlineNemoCtcModelConfig = new OnlineNemoCtcModelConfig();
public tokens: string = '';
public numThreads: number = 1;
public provider: string = 'cpu';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ void CNonStreamingSpeechRecognitionDlg::ShowInitRecognizerHelpMessage() {
msg +=
"wget "
"https://huggingface.co/csukuangfj/"
"sherpa-onnx-paraformer-zh-2023-09-14/resolve/main/model.onnx\r\n";
"sherpa-onnx-paraformer-zh-2023-09-14/resolve/main/model.int8.onnx\r\n";
msg +=
"wget "
"https://huggingface.co/csukuangfj/sherpa-onnx-paraformer-zh-2023-09-14/"
Expand Down
3 changes: 3 additions & 0 deletions scripts/dotnet/OnlineModelConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public OnlineModelConfig()
BpeVocab = "";
TokensBuf = "";
TokensBufSize = 0;
NemoCtc = new OnlineNemoCtcModelConfig();
}

public OnlineTransducerModelConfig Transducer;
Expand Down Expand Up @@ -55,6 +56,8 @@ public OnlineModelConfig()
public string TokensBuf;

public int TokensBufSize;

public OnlineNemoCtcModelConfig NemoCtc;
}

}
18 changes: 18 additions & 0 deletions scripts/dotnet/OnlineNemoCtcModelConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/// Copyright (c) 2025 Xiaomi Corporation (authors: Fangjun Kuang)

using System.Runtime.InteropServices;

namespace SherpaOnnx
{
[StructLayout(LayoutKind.Sequential)]
public struct OnlineNemoCtcModelConfig
{
public OnlineNemoCtcModelConfig()
{
Model = "";
}

[MarshalAs(UnmanagedType.LPStr)]
public string Model;
}
}
Loading