NonStreamingAsr.ets
4.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import {
acceptWaveformOffline,
createOfflineRecognizer,
createOfflineStream,
decodeOfflineStream,
getOfflineStreamResultAsJson,
} from 'libsherpa_onnx.so';
export interface Samples {
samples: Float32Array;
sampleRate: number;
}
export class OfflineStream {
public handle: object;
constructor(handle: object) {
this.handle = handle;
}
// obj is {samples: samples, sampleRate: sampleRate}
// samples is a float32 array containing samples in the range [-1, 1]
// sampleRate is a number
acceptWaveform(obj: Samples) {
acceptWaveformOffline(this.handle, obj)
}
}
export class FeatureConfig {
public sampleRate: number = 16000;
public featureDim: number = 80;
}
export class OfflineTransducerModelConfig {
public encoder: string = '';
public decoder: string = '';
public joiner: string = '';
}
export class OfflineParaformerModelConfig {
public model: string = '';
}
export class OfflineNemoEncDecCtcModelConfig {
public model: string = '';
}
export class OfflineWhisperModelConfig {
public encoder: string = '';
public decoder: string = '';
public language: string = '';
public task: string = 'transcribe';
public tailPaddings: number = -1;
}
export class OfflineTdnnModelConfig {
public model: string = '';
}
export class OfflineSenseVoiceModelConfig {
public model: string = '';
public language: string = '';
public useItn: boolean = false;
}
export class OfflineMoonshineModelConfig {
public preprocessor: string = '';
public encoder: string = '';
public uncachedDecoder: string = '';
public cachedDecoder: string = '';
}
export class OfflineModelConfig {
public transducer: OfflineTransducerModelConfig = new OfflineTransducerModelConfig();
public paraformer: OfflineParaformerModelConfig = new OfflineParaformerModelConfig();
public nemoCtc: OfflineNemoEncDecCtcModelConfig = new OfflineNemoEncDecCtcModelConfig();
public whisper: OfflineWhisperModelConfig = new OfflineWhisperModelConfig();
public tdnn: OfflineTdnnModelConfig = new OfflineTdnnModelConfig();
public tokens: string = '';
public numThreads: number = 1;
public debug: boolean = false;
public provider: string = 'cpu';
public modelType: string = '';
public modelingUnit: string = "cjkchar";
public bpeVocab: string = '';
public telespeechCtc: string = '';
public senseVoice: OfflineSenseVoiceModelConfig = new OfflineSenseVoiceModelConfig();
public moonshine: OfflineMoonshineModelConfig = new OfflineMoonshineModelConfig();
}
export class OfflineLMConfig {
public model: string = '';
public scale: number = 1.0;
}
export class OfflineRecognizerConfig {
public featConfig: FeatureConfig = new FeatureConfig();
public modelConfig: OfflineModelConfig = new OfflineModelConfig();
public lmConfig: OfflineLMConfig = new OfflineLMConfig();
public decodingMethod: string = "greedy_search";
public maxActivePaths: number = 4;
public hotwordsFfile: string = '';
public hotwordsScore: number = 1.5;
public ruleFsts: string = '';
public ruleFars: string = '';
public blankPenalty: number = 0;
}
export class OfflineRecognizerResult {
public text: string = '';
public timestamps: number[] = [];
public tokens: string[] = [];
public json = '';
public lang: string = '';
public emotion: string = '';
public event: string = '';
}
interface OfflineRecognizerResultJson {
text: string;
timestamps: number[];
tokens: string[];
lang: string;
emotion: string;
event: string;
}
export class OfflineRecognizer {
public handle: object;
public config: OfflineRecognizerConfig;
constructor(config: OfflineRecognizerConfig, mgr?: object) {
this.handle = createOfflineRecognizer(config, mgr);
this.config = config
}
createStream(): OfflineStream {
const handle: object = createOfflineStream(this.handle);
return new OfflineStream(handle);
}
decode(stream: OfflineStream) {
decodeOfflineStream(this.handle, stream.handle);
}
getResult(stream: OfflineStream): OfflineRecognizerResult {
const jsonStr: string = getOfflineStreamResultAsJson(stream.handle);
let o = JSON.parse(jsonStr) as OfflineRecognizerResultJson;
const r = new OfflineRecognizerResult()
r.text = o.text
r.timestamps = o.timestamps;
r.tokens = o.tokens;
r.json = jsonStr;
r.lang = o.lang;
r.emotion = o.emotion;
r.event = o.event;
return r;
}
}