Skip to content

Commit 571a51d

Browse files
authored
Add dart API for SenseVoice (k2-fsa#1159)
1 parent 21a7a36 commit 571a51d

File tree

17 files changed

+169
-49
lines changed

17 files changed

+169
-49
lines changed

.github/scripts/test-dart.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ cd dart-api-examples
66

77
pushd non-streaming-asr
88

9+
echo '----------SenseVoice----------'
10+
./run-sense-voice.sh
11+
rm -rf sherpa-onnx-*
12+
913
echo '----------NeMo transducer----------'
1014
./run-nemo-transducer.sh
1115
rm -rf sherpa-onnx-*

dart-api-examples/non-streaming-asr/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ This folder contains examples for non-streaming ASR with Dart API.
1111
|[./bin/whisper.dart](./bin/whisper.dart)| Use whisper for speech recognition. See [./run-whisper.sh](./run-whisper.sh)|
1212
|[./bin/zipformer-transducer.dart](./bin/zipformer-transducer.dart)| Use a zipformer transducer for speech recognition. See [./run-zipformer-transducer.sh](./run-zipformer-transducer.sh)|
1313
|[./bin/vad-with-paraformer.dart](./bin/vad-with-paraformer.dart)| Use a [silero-vad](https://github.com/snakers4/silero-vad) with paraformer for speech recognition. See [./run-vad-with-paraformer.sh](./run-vad-with-paraformer.sh)|
14+
|[./bin/sense-voice.dart](./bin/sense-voice.dart)| Use a SenseVoice CTC model for speech recognition. See [./run-sense-voice.sh](./run-sense-voice.sh)|
1415

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright (c) 2024 Xiaomi Corporation
2+
import 'dart:io';
3+
import 'dart:typed_data';
4+
5+
import 'package:args/args.dart';
6+
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
7+
8+
import './init.dart';
9+
10+
void main(List<String> arguments) async {
11+
await initSherpaOnnx();
12+
13+
final parser = ArgParser()
14+
..addOption('model', help: 'Path to the paraformer model')
15+
..addOption('tokens', help: 'Path to tokens.txt')
16+
..addOption('language',
17+
help: 'auto, zh, en, ja, ko, yue, or leave it empty to use auto',
18+
defaultsTo: '')
19+
..addOption('use-itn',
20+
help: 'true to use inverse text normalization', defaultsTo: 'false')
21+
..addOption('input-wav', help: 'Path to input.wav to transcribe');
22+
23+
final res = parser.parse(arguments);
24+
if (res['model'] == null ||
25+
res['tokens'] == null ||
26+
res['input-wav'] == null) {
27+
print(parser.usage);
28+
exit(1);
29+
}
30+
31+
final model = res['model'] as String;
32+
final tokens = res['tokens'] as String;
33+
final inputWav = res['input-wav'] as String;
34+
final language = res['language'] as String;
35+
final useItn = (res['use-itn'] as String).toLowerCase() == 'true';
36+
37+
final senseVoice = sherpa_onnx.OfflineSenseVoiceModelConfig(
38+
model: model, language: language, useInverseTextNormalization: useItn);
39+
40+
final modelConfig = sherpa_onnx.OfflineModelConfig(
41+
senseVoice: senseVoice,
42+
tokens: tokens,
43+
debug: true,
44+
numThreads: 1,
45+
);
46+
final config = sherpa_onnx.OfflineRecognizerConfig(model: modelConfig);
47+
final recognizer = sherpa_onnx.OfflineRecognizer(config);
48+
49+
final waveData = sherpa_onnx.readWave(inputWav);
50+
final stream = recognizer.createStream();
51+
52+
stream.acceptWaveform(
53+
samples: waveData.samples, sampleRate: waveData.sampleRate);
54+
recognizer.decode(stream);
55+
56+
final result = recognizer.getResult(stream);
57+
print(result.text);
58+
59+
stream.free();
60+
recognizer.free();
61+
}

dart-api-examples/non-streaming-asr/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ environment:
1010

1111
# Add regular dependencies here.
1212
dependencies:
13-
sherpa_onnx: ^1.10.16
13+
sherpa_onnx: ^1.10.17
1414
path: ^1.9.0
1515
args: ^2.5.0
1616

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/usr/bin/env bash
2+
3+
set -ex
4+
5+
dart pub get
6+
7+
if [ ! -f ./sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/tokens.txt ]; then
8+
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
9+
tar xvf sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
10+
rm sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
11+
fi
12+
13+
dart run \
14+
./bin/sense-voice.dart \
15+
--model ./sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/model.int8.onnx \
16+
--tokens ./sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/tokens.txt \
17+
--use-itn true \
18+
--input-wav ./sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/test_wavs/zh.wav

dart-api-examples/streaming-asr/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ environment:
1111

1212
# Add regular dependencies here.
1313
dependencies:
14-
sherpa_onnx: ^1.10.16
14+
sherpa_onnx: ^1.10.17
1515
path: ^1.9.0
1616
args: ^2.5.0
1717

dart-api-examples/tts/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ environment:
88

99
# Add regular dependencies here.
1010
dependencies:
11-
sherpa_onnx: ^1.10.16
11+
sherpa_onnx: ^1.10.17
1212
path: ^1.9.0
1313
args: ^2.5.0
1414

dart-api-examples/vad/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ environment:
99
sdk: ^3.4.0
1010

1111
dependencies:
12-
sherpa_onnx: ^1.10.16
12+
sherpa_onnx: ^1.10.17
1313
path: ^1.9.0
1414
args: ^2.5.0
1515

flutter-examples/streaming_asr/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: >
55
66
publish_to: 'none'
77

8-
version: 1.10.16
8+
version: 1.10.17
99

1010
topics:
1111
- speech-recognition
@@ -30,7 +30,7 @@ dependencies:
3030
record: ^5.1.0
3131
url_launcher: ^6.2.6
3232

33-
sherpa_onnx: ^1.10.16
33+
sherpa_onnx: ^1.10.17
3434
# sherpa_onnx:
3535
# path: ../../flutter/sherpa_onnx
3636

flutter-examples/tts/pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ description: >
55
66
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
77

8-
version: 1.10.16
8+
version: 1.10.17
99

1010
environment:
1111
sdk: '>=3.4.0 <4.0.0'
@@ -17,7 +17,7 @@ dependencies:
1717
cupertino_icons: ^1.0.6
1818
path_provider: ^2.1.3
1919
path: ^1.9.0
20-
sherpa_onnx: ^1.10.16
20+
sherpa_onnx: ^1.10.17
2121
url_launcher: ^6.2.6
2222
audioplayers: ^5.0.0
2323

0 commit comments

Comments
 (0)