Views
No views yet
| File | Size | Description |
|---|---|---|
encoder.onnx | 348 MB | Audio waveform → verbatim encoder features (B, T, 512) |
encoder_sub.onnx | 83 MB | Verbatim features → subtitle encoder features |
ctc.onnx | 9.8 MB | Encoder features → CTC logits (B, T, 5000) |
decoder_step.onnx | 150 MB | Autoregressive decoder step (verbatim) |
decoder_sub_step.onnx | 150 MB | Autoregressive decoder step (subtitle) |
bpe.model | 314 KB | SentencePiece BPE tokenizer |
tokens.txt | 42 KB | Token vocabulary (5000 tokens) |
1import onnxruntime as ort
2import numpy as np
3import soundfile as sf
4from sentencepiece import SentencePieceProcessor
5
6# Load models
7enc = ort.InferenceSession("encoder.onnx")
8enc_sub = ort.InferenceSession("encoder_sub.onnx")
9ctc = ort.InferenceSession("ctc.onnx")
10
11# Load tokenizer
12tokenizer = SentencePieceProcessor()
13tokenizer.Load("bpe.model")
14with open("tokens.txt") as f:
15 token_list = [line.strip() for line in f]
16
17# Transcribe
18audio, sr = sf.read("speech.wav")
19audio = audio.mean(axis=1) if audio.ndim > 1 else audio
20
21wav = audio[np.newaxis, :].astype(np.float32)
22wav_len = np.array([wav.shape[1]], dtype=np.int64)
23
24enc_out, enc_len = enc.run(None, {"wav": wav, "wav_len": wav_len})
25logits = ctc.run(None, {"enc_out": enc_out})[0]
26
27# Greedy CTC decode
28preds = logits[0].argmax(axis=-1)
29tokens = []
30prev = -1
31for p in preds[:int(enc_len[0])]:
32 if p != prev and p != 0:
33 tokens.append(int(p))
34 prev = int(p)
35
36text = tokenizer.DecodePieces([token_list[i] for i in tokens])
37print(text)1dec = ort.InferenceSession("decoder_step.onnx")
2
3tokens = [1] # <sos/eos>
4for _ in range(225):
5 t = np.array([tokens], dtype=np.int64)
6 logits = dec.run(None, {
7 "tokens": t,
8 "encoder_out": enc_out,
9 "enc_len": enc_len,
10 "sub_out": enc_out, # or encoder_sub output for subtitle decoder
11 "sub_len": enc_len,
12 })[0]
13 next_t = int(logits[0, -1].argmax())
14 if next_t == 1:
15 break
16 tokens.append(next_t)| Model | Inputs | Outputs |
|---|---|---|
encoder.onnx | wav: (B, T_wav), wav_len: (B,) | enc_out: (B, T_enc, 512), enc_len: (B,) |
encoder_sub.onnx | enc_in: (B, T, 512), enc_len: (B,) | sub_out: (B, T, 512), sub_len: (B,) |
ctc.onnx | enc_out: (B, T, 512) | logits: (B, T, 5000) |
decoder_step.onnx | tokens: (B, L), encoder_out: (B, T, 512), enc_len: (B,), sub_out: (B, T, 512), sub_len: (B,) | logits: (B, L, 5000) |