Commit
·
a638de3
1
Parent(s):
58843ee
update model
Browse files- app-asr.js +10 -0
- sherpa-onnx-asr.js +51 -6
- sherpa-onnx-wasm-main-asr.js +0 -0
app-asr.js
CHANGED
|
@@ -108,8 +108,18 @@ if (navigator.mediaDevices.getUserMedia) {
|
|
| 108 |
}
|
| 109 |
|
| 110 |
let isEndpoint = recognizer.isEndpoint(recognizer_stream);
|
|
|
|
| 111 |
let result = recognizer.getResult(recognizer_stream).text;
|
| 112 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
|
| 114 |
if (result.length > 0 && lastResult != result) {
|
| 115 |
lastResult = result;
|
|
|
|
| 108 |
}
|
| 109 |
|
| 110 |
let isEndpoint = recognizer.isEndpoint(recognizer_stream);
|
| 111 |
+
|
| 112 |
let result = recognizer.getResult(recognizer_stream).text;
|
| 113 |
|
| 114 |
+
if (recognizer.config.modelConfig.paraformer.encoder != '') {
|
| 115 |
+
let tailPaddings = new Float32Array(expectedSampleRate);
|
| 116 |
+
recognizer_stream.acceptWaveform(expectedSampleRate, tailPaddings);
|
| 117 |
+
while (recognizer.isReady(recognizer_stream)) {
|
| 118 |
+
recognizer.decode(recognizer_stream);
|
| 119 |
+
}
|
| 120 |
+
result = recognizer.getResult(recognizer_stream).text;
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
|
| 124 |
if (result.length > 0 && lastResult != result) {
|
| 125 |
lastResult = result;
|
sherpa-onnx-asr.js
CHANGED
|
@@ -155,6 +155,14 @@ function initSherpaOnnxOnlineModelConfig(config, Module) {
|
|
| 155 |
};
|
| 156 |
}
|
| 157 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 158 |
const transducer =
|
| 159 |
initSherpaOnnxOnlineTransducerModelConfig(config.transducer, Module);
|
| 160 |
|
|
@@ -164,7 +172,7 @@ function initSherpaOnnxOnlineModelConfig(config, Module) {
|
|
| 164 |
const ctc = initSherpaOnnxOnlineZipformer2CtcModelConfig(
|
| 165 |
config.zipformer2Ctc, Module);
|
| 166 |
|
| 167 |
-
const len = transducer.len + paraformer.len + ctc.len +
|
| 168 |
const ptr = Module._malloc(len);
|
| 169 |
|
| 170 |
let offset = 0;
|
|
@@ -182,9 +190,10 @@ function initSherpaOnnxOnlineModelConfig(config, Module) {
|
|
| 182 |
const modelTypeLen = Module.lengthBytesUTF8(config.modelType || '') + 1;
|
| 183 |
const modelingUnitLen = Module.lengthBytesUTF8(config.modelingUnit || '') + 1;
|
| 184 |
const bpeVocabLen = Module.lengthBytesUTF8(config.bpeVocab || '') + 1;
|
|
|
|
| 185 |
|
| 186 |
-
const bufferLen =
|
| 187 |
-
|
| 188 |
const buffer = Module._malloc(bufferLen);
|
| 189 |
|
| 190 |
offset = 0;
|
|
@@ -204,6 +213,9 @@ function initSherpaOnnxOnlineModelConfig(config, Module) {
|
|
| 204 |
Module.stringToUTF8(config.bpeVocab || '', buffer + offset, bpeVocabLen);
|
| 205 |
offset += bpeVocabLen;
|
| 206 |
|
|
|
|
|
|
|
|
|
|
| 207 |
offset = transducer.len + paraformer.len + ctc.len;
|
| 208 |
Module.setValue(ptr + offset, buffer, 'i8*'); // tokens
|
| 209 |
offset += 4;
|
|
@@ -232,6 +244,16 @@ function initSherpaOnnxOnlineModelConfig(config, Module) {
|
|
| 232 |
'i8*'); // bpeVocab
|
| 233 |
offset += 4;
|
| 234 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 235 |
return {
|
| 236 |
buffer: buffer, ptr: ptr, len: len, transducer: transducer,
|
| 237 |
paraformer: paraformer, ctc: ctc
|
|
@@ -275,12 +297,20 @@ function initSherpaOnnxOnlineRecognizerConfig(config, Module) {
|
|
| 275 |
};
|
| 276 |
}
|
| 277 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 278 |
const feat = initSherpaOnnxFeatureConfig(config.featConfig, Module);
|
| 279 |
const model = initSherpaOnnxOnlineModelConfig(config.modelConfig, Module);
|
| 280 |
const ctcFstDecoder = initSherpaOnnxOnlineCtcFstDecoderConfig(
|
| 281 |
config.ctcFstDecoderConfig, Module)
|
| 282 |
|
| 283 |
-
const len = feat.len + model.len + 8 * 4 + ctcFstDecoder.len +
|
| 284 |
const ptr = Module._malloc(len);
|
| 285 |
|
| 286 |
let offset = 0;
|
|
@@ -295,8 +325,9 @@ function initSherpaOnnxOnlineRecognizerConfig(config, Module) {
|
|
| 295 |
const hotwordsFileLen = Module.lengthBytesUTF8(config.hotwordsFile || '') + 1;
|
| 296 |
const ruleFstsFileLen = Module.lengthBytesUTF8(config.ruleFsts || '') + 1;
|
| 297 |
const ruleFarsFileLen = Module.lengthBytesUTF8(config.ruleFars || '') + 1;
|
| 298 |
-
const
|
| 299 |
-
|
|
|
|
| 300 |
const buffer = Module._malloc(bufferLen);
|
| 301 |
|
| 302 |
offset = 0;
|
|
@@ -314,6 +345,10 @@ function initSherpaOnnxOnlineRecognizerConfig(config, Module) {
|
|
| 314 |
Module.stringToUTF8(config.ruleFars || '', buffer + offset, ruleFarsFileLen);
|
| 315 |
offset += ruleFarsFileLen;
|
| 316 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 317 |
offset = feat.len + model.len;
|
| 318 |
Module.setValue(ptr + offset, buffer, 'i8*'); // decoding method
|
| 319 |
offset += 4;
|
|
@@ -354,6 +389,16 @@ function initSherpaOnnxOnlineRecognizerConfig(config, Module) {
|
|
| 354 |
Module.setValue(ptr + offset, config.blankPenalty || 0, 'float');
|
| 355 |
offset += 4;
|
| 356 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 357 |
return {
|
| 358 |
buffer: buffer, ptr: ptr, len: len, feat: feat, model: model,
|
| 359 |
ctcFstDecoder: ctcFstDecoder
|
|
|
|
| 155 |
};
|
| 156 |
}
|
| 157 |
|
| 158 |
+
if (!('tokensBuf' in config)) {
|
| 159 |
+
config.tokensBuf = '';
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
if (!('tokensBufSize' in config)) {
|
| 163 |
+
config.tokensBufSize = 0;
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
const transducer =
|
| 167 |
initSherpaOnnxOnlineTransducerModelConfig(config.transducer, Module);
|
| 168 |
|
|
|
|
| 172 |
const ctc = initSherpaOnnxOnlineZipformer2CtcModelConfig(
|
| 173 |
config.zipformer2Ctc, Module);
|
| 174 |
|
| 175 |
+
const len = transducer.len + paraformer.len + ctc.len + 9 * 4;
|
| 176 |
const ptr = Module._malloc(len);
|
| 177 |
|
| 178 |
let offset = 0;
|
|
|
|
| 190 |
const modelTypeLen = Module.lengthBytesUTF8(config.modelType || '') + 1;
|
| 191 |
const modelingUnitLen = Module.lengthBytesUTF8(config.modelingUnit || '') + 1;
|
| 192 |
const bpeVocabLen = Module.lengthBytesUTF8(config.bpeVocab || '') + 1;
|
| 193 |
+
const tokensBufLen = Module.lengthBytesUTF8(config.tokensBuf || '') + 1;
|
| 194 |
|
| 195 |
+
const bufferLen = tokensLen + providerLen + modelTypeLen + modelingUnitLen +
|
| 196 |
+
bpeVocabLen + tokensBufLen;
|
| 197 |
const buffer = Module._malloc(bufferLen);
|
| 198 |
|
| 199 |
offset = 0;
|
|
|
|
| 213 |
Module.stringToUTF8(config.bpeVocab || '', buffer + offset, bpeVocabLen);
|
| 214 |
offset += bpeVocabLen;
|
| 215 |
|
| 216 |
+
Module.stringToUTF8(config.tokensBuf || '', buffer + offset, tokensBufLen);
|
| 217 |
+
offset += tokensBufLen;
|
| 218 |
+
|
| 219 |
offset = transducer.len + paraformer.len + ctc.len;
|
| 220 |
Module.setValue(ptr + offset, buffer, 'i8*'); // tokens
|
| 221 |
offset += 4;
|
|
|
|
| 244 |
'i8*'); // bpeVocab
|
| 245 |
offset += 4;
|
| 246 |
|
| 247 |
+
Module.setValue(
|
| 248 |
+
ptr + offset,
|
| 249 |
+
buffer + tokensLen + providerLen + modelTypeLen + modelingUnitLen +
|
| 250 |
+
bpeVocabLen,
|
| 251 |
+
'i8*'); // tokens_buf
|
| 252 |
+
offset += 4;
|
| 253 |
+
|
| 254 |
+
Module.setValue(ptr + offset, config.tokensBufSize || 0, 'i32');
|
| 255 |
+
offset += 4;
|
| 256 |
+
|
| 257 |
return {
|
| 258 |
buffer: buffer, ptr: ptr, len: len, transducer: transducer,
|
| 259 |
paraformer: paraformer, ctc: ctc
|
|
|
|
| 297 |
};
|
| 298 |
}
|
| 299 |
|
| 300 |
+
if (!('hotwordsBuf' in config)) {
|
| 301 |
+
config.hotwordsBuf = '';
|
| 302 |
+
}
|
| 303 |
+
|
| 304 |
+
if (!('hotwordsBufSize' in config)) {
|
| 305 |
+
config.hotwordsBufSize = 0;
|
| 306 |
+
}
|
| 307 |
+
|
| 308 |
const feat = initSherpaOnnxFeatureConfig(config.featConfig, Module);
|
| 309 |
const model = initSherpaOnnxOnlineModelConfig(config.modelConfig, Module);
|
| 310 |
const ctcFstDecoder = initSherpaOnnxOnlineCtcFstDecoderConfig(
|
| 311 |
config.ctcFstDecoderConfig, Module)
|
| 312 |
|
| 313 |
+
const len = feat.len + model.len + 8 * 4 + ctcFstDecoder.len + 5 * 4;
|
| 314 |
const ptr = Module._malloc(len);
|
| 315 |
|
| 316 |
let offset = 0;
|
|
|
|
| 325 |
const hotwordsFileLen = Module.lengthBytesUTF8(config.hotwordsFile || '') + 1;
|
| 326 |
const ruleFstsFileLen = Module.lengthBytesUTF8(config.ruleFsts || '') + 1;
|
| 327 |
const ruleFarsFileLen = Module.lengthBytesUTF8(config.ruleFars || '') + 1;
|
| 328 |
+
const hotwordsBufLen = Module.lengthBytesUTF8(config.hotwordsBuf || '') + 1;
|
| 329 |
+
const bufferLen = decodingMethodLen + hotwordsFileLen + ruleFstsFileLen +
|
| 330 |
+
ruleFarsFileLen + hotwordsBufLen;
|
| 331 |
const buffer = Module._malloc(bufferLen);
|
| 332 |
|
| 333 |
offset = 0;
|
|
|
|
| 345 |
Module.stringToUTF8(config.ruleFars || '', buffer + offset, ruleFarsFileLen);
|
| 346 |
offset += ruleFarsFileLen;
|
| 347 |
|
| 348 |
+
Module.stringToUTF8(
|
| 349 |
+
config.hotwordsBuf || '', buffer + offset, hotwordsBufLen);
|
| 350 |
+
offset += hotwordsBufLen;
|
| 351 |
+
|
| 352 |
offset = feat.len + model.len;
|
| 353 |
Module.setValue(ptr + offset, buffer, 'i8*'); // decoding method
|
| 354 |
offset += 4;
|
|
|
|
| 389 |
Module.setValue(ptr + offset, config.blankPenalty || 0, 'float');
|
| 390 |
offset += 4;
|
| 391 |
|
| 392 |
+
Module.setValue(
|
| 393 |
+
ptr + offset,
|
| 394 |
+
buffer + decodingMethodLen + hotwordsFileLen + ruleFstsFileLen +
|
| 395 |
+
ruleFarsFileLen,
|
| 396 |
+
'i8*');
|
| 397 |
+
offset += 4;
|
| 398 |
+
|
| 399 |
+
Module.setValue(ptr + offset, config.hotwordsBufSize || 0, 'i32');
|
| 400 |
+
offset += 4;
|
| 401 |
+
|
| 402 |
return {
|
| 403 |
buffer: buffer, ptr: ptr, len: len, feat: feat, model: model,
|
| 404 |
ctcFstDecoder: ctcFstDecoder
|
sherpa-onnx-wasm-main-asr.js
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|