Views
No views yet
OnlineRecognizer can run it on iOS / Android / desktop with cache-aware
encoder state propagation.…-v1.1-mirror
— see the mirror repo's README for training recipe, dataset, and results
(in short: val_wer 1.50% at epoch 7, ~9× better than v1's 13.23%).att_context_size = [70, 13]| file | size | purpose |
|---|---|---|
encoder.onnx | 456 MB | streaming encoder with cache I/O slots |
decoder.onnx | 16 MB | RNNT prediction network |
joiner.onnx | 5.6 MB | joint network |
tokens.txt | 13 KB | SentencePiece vocab (token\tid per line) |
silero_vad.onnx | 2.3 MB | bundled Silero VAD (offline-fallback path) |
STREAMING.marker | <1 KB | flag file so consumers can detect streaming bundle |
README.md | — | this file |
1final transducer = sherpa.OnlineTransducerModelConfig(
2 encoder: 'encoder.onnx',
3 decoder: 'decoder.onnx',
4 joiner: 'joiner.onnx',
5);
6final model = sherpa.OnlineModelConfig(
7 transducer: transducer,
8 tokens: 'tokens.txt',
9 modelType: 'transducer',
10 provider: 'cpu',
11);
12final recognizer = sherpa.OnlineRecognizer(sherpa.OnlineRecognizerConfig(
13 model: model,
14 decodingMethod: 'greedy_search', // beam=1
15 enableEndpoint: true,
16 rule1MinTrailingSilence: 2.4,
17 rule2MinTrailingSilence: 1.2,
18 rule3MinUtteranceLength: 30.0,
19));
20final stream = recognizer.createStream();
21stream.acceptWaveform(samples: micFrame, sampleRate: 16000);
22while (recognizer.isReady(stream)) recognizer.decode(stream);
23print(recognizer.getResult(stream).text);1import sherpa_onnx
2recognizer = sherpa_onnx.OnlineRecognizer.from_transducer(
3 encoder="encoder.onnx",
4 decoder="decoder.onnx",
5 joiner="joiner.onnx",
6 tokens="tokens.txt",
7 num_threads=2,
8 provider="cpu",
9 decoding_method="greedy_search",
10)
11stream = recognizer.create_stream()
12# stream.accept_waveform(16000, samples) # repeatedly
13# while recognizer.is_ready(stream): recognizer.decode_stream(stream)
14# print(recognizer.get_result(stream))joiner.onnx?OnlineTransducerModelConfig calls the joiner separately
from the prediction network so the predictor state can be carried between
frames without re-running the joint. NeMo's default export bundles them
into a single decoder_joint.onnx — this repo's files were exported via
NeMo's per-submodule .export() to get the three-way split.…-v1.1-mirror README for the full list. Most relevant for mobile: