Fangjun Kuang
Committed by GitHub

Add Lazarus example for Moonshine models. (#1532)

@@ -21,6 +21,8 @@ fi @@ -21,6 +21,8 @@ fi
21 21
22 if [ ! -z CMAKE_VERBOSE_MAKEFILE ]; then 22 if [ ! -z CMAKE_VERBOSE_MAKEFILE ]; then
23 CMAKE_VERBOSE_MAKEFILE=ON 23 CMAKE_VERBOSE_MAKEFILE=ON
  24 +else
  25 + CMAKE_VERBOSE_MAKEFILE=OFF
24 fi 26 fi
25 27
26 if [ ! -f $onnxruntime_dir/onnxruntime.xcframework/ios-arm64/onnxruntime.a ]; then 28 if [ ! -f $onnxruntime_dir/onnxruntime.xcframework/ios-arm64/onnxruntime.a ]; then
1 function(download_piper_phonemize) 1 function(download_piper_phonemize)
2 include(FetchContent) 2 include(FetchContent)
3 3
4 - set(piper_phonemize_URL "https://github.com/csukuangfj/piper-phonemize/archive/38ee199dcc49c7b6de89f7ebfb32ed682763fa1b.zip")  
5 - set(piper_phonemize_URL2 "https://hf-mirror.com/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/piper-phonemize-38ee199dcc49c7b6de89f7ebfb32ed682763fa1b.zip")  
6 - set(piper_phonemize_HASH "SHA256=ab4d06ca76047e1585c63c482f39ffead5315785345055360703cc9382c5e74b") 4 + set(piper_phonemize_URL "https://github.com/csukuangfj/piper-phonemize/archive/78a788e0b719013401572d70fef372e77bff8e43.zip")
  5 + set(piper_phonemize_URL2 "https://hf-mirror.com/csukuangfj/sherpa-onnx-cmake-deps/resolve/main/piper-phonemize-78a788e0b719013401572d70fef372e77bff8e43.zip")
  6 + set(piper_phonemize_HASH "SHA256=89641a46489a4898754643ce57bda9c9b54b4ca46485fdc02bf0dc84b866645d")
7 7
8 # If you don't have access to the Internet, 8 # If you don't have access to the Internet,
9 # please pre-download kaldi-decoder 9 # please pre-download kaldi-decoder
10 set(possible_file_locations 10 set(possible_file_locations
11 - $ENV{HOME}/Downloads/piper-phonemize-38ee199dcc49c7b6de89f7ebfb32ed682763fa1b.zip  
12 - ${CMAKE_SOURCE_DIR}/piper-phonemize-38ee199dcc49c7b6de89f7ebfb32ed682763fa1b.zip  
13 - ${CMAKE_BINARY_DIR}/piper-phonemize-38ee199dcc49c7b6de89f7ebfb32ed682763fa1b.zip  
14 - /tmp/piper-phonemize-38ee199dcc49c7b6de89f7ebfb32ed682763fa1b.zip  
15 - /star-fj/fangjun/download/github/piper-phonemize-38ee199dcc49c7b6de89f7ebfb32ed682763fa1b.zip 11 + $ENV{HOME}/Downloads/piper-phonemize-78a788e0b719013401572d70fef372e77bff8e43.zip
  12 + ${CMAKE_SOURCE_DIR}/piper-phonemize-78a788e0b719013401572d70fef372e77bff8e43.zip
  13 + ${CMAKE_BINARY_DIR}/piper-phonemize-78a788e0b719013401572d70fef372e77bff8e43.zip
  14 + /tmp/piper-phonemize-78a788e0b719013401572d70fef372e77bff8e43.zip
  15 + /star-fj/fangjun/download/github/piper-phonemize-78a788e0b719013401572d70fef372e77bff8e43.zip
16 ) 16 )
17 17
18 foreach(f IN LISTS possible_file_locations) 18 foreach(f IN LISTS possible_file_locations)
@@ -159,6 +159,30 @@ begin @@ -159,6 +159,30 @@ begin
159 Result := TSherpaOnnxOfflineRecognizer.Create(Config); 159 Result := TSherpaOnnxOfflineRecognizer.Create(Config);
160 end; 160 end;
161 161
  162 +function CreateOfflineRecognizerMoonshine(
  163 + Tokens: AnsiString;
  164 + Preprocessor: AnsiString;
  165 + Encoder: AnsiString;
  166 + UncachedDecoder: AnsiString;
  167 + CachedDecoder: AnsiString): TSherpaOnnxOfflineRecognizer;
  168 +var
  169 + Config: TSherpaOnnxOfflineRecognizerConfig;
  170 +begin
  171 + Initialize(Config);
  172 +
  173 + Config.ModelConfig.Moonshine.Preprocessor := Preprocessor;
  174 + Config.ModelConfig.Moonshine.Encoder := Encoder;
  175 + Config.ModelConfig.Moonshine.UncachedDecoder := UncachedDecoder;
  176 + Config.ModelConfig.Moonshine.CachedDecoder := CachedDecoder;
  177 +
  178 + Config.ModelConfig.Tokens := Tokens;
  179 + Config.ModelConfig.Provider := 'cpu';
  180 + Config.ModelConfig.NumThreads := 2;
  181 + Config.ModelConfig.Debug := False;
  182 +
  183 + Result := TSherpaOnnxOfflineRecognizer.Create(Config);
  184 +end;
  185 +
162 constructor TMyInitThread.Create(CreateSuspended : boolean; ModelDirectory: AnsiString); 186 constructor TMyInitThread.Create(CreateSuspended : boolean; ModelDirectory: AnsiString);
163 begin 187 begin
164 inherited Create(CreateSuspended); 188 inherited Create(CreateSuspended);
@@ -193,6 +217,11 @@ var @@ -193,6 +217,11 @@ var
193 NeMoTransducerEncoder: AnsiString; 217 NeMoTransducerEncoder: AnsiString;
194 NeMoTransducerDecoder: AnsiString; 218 NeMoTransducerDecoder: AnsiString;
195 NeMoTransducerJoiner: AnsiString; 219 NeMoTransducerJoiner: AnsiString;
  220 +
  221 + MoonshinePreprocessor: AnsiString;
  222 + MoonshineEncoder: AnsiString;
  223 + MoonshineUncachedDecoder: AnsiString;
  224 + MoonshineCachedDecoder: AnsiString;
196 begin 225 begin
197 VadFilename := ModelDir + 'silero_vad.onnx'; 226 VadFilename := ModelDir + 'silero_vad.onnx';
198 Tokens := ModelDir + 'tokens.txt'; 227 Tokens := ModelDir + 'tokens.txt';
@@ -292,6 +321,24 @@ begin @@ -292,6 +321,24 @@ begin
292 NeMoTransducerDecoder := ModelDir + 'nemo-transducer-decoder.onnx'; 321 NeMoTransducerDecoder := ModelDir + 'nemo-transducer-decoder.onnx';
293 NeMoTransducerJoiner := ModelDir + 'nemo-transducer-joiner.onnx'; 322 NeMoTransducerJoiner := ModelDir + 'nemo-transducer-joiner.onnx';
294 323
  324 + {
  325 + Please Visit
  326 + https://k2-fsa.github.io/sherpa/onnx/moonshine/models.html
  327 + to download a Moonshine model.
  328 +
  329 + Note that you have to rename model files after downloading. The following
  330 + is an example.
  331 +
  332 + mv preprocess.onnx moonshine-preprocessor.onnx
  333 + mv encode.int8.onnx moonshine-encoder.onnx
  334 + mv uncached_decode.int8.onnx moonshine-uncached-decoder.onnx
  335 + mv cached_decode.int8.onnx moonshine-cached-decoder.onnx
  336 + }
  337 + MoonshinePreprocessor := ModelDir + 'moonshine-preprocessor.onnx';
  338 + MoonshineEncoder := ModelDir + 'moonshine-encoder.onnx';
  339 + MoonshineUncachedDecoder := ModelDir + 'moonshine-uncached-decoder.onnx';
  340 + MoonshineCachedDecoder := ModelDir + 'moonshine-cached-decoder.onnx';
  341 +
295 if not FileExists(VadFilename) then 342 if not FileExists(VadFilename) then
296 begin 343 begin
297 Status := VadFilename + ' does not exist! Please download it from' + 344 Status := VadFilename + ' does not exist! Please download it from' +
@@ -344,6 +391,13 @@ begin @@ -344,6 +391,13 @@ begin
344 NeMoTransducerEncoder, NeMoTransducerDecoder, NeMoTransducerJoiner, 'nemo_transducer'); 391 NeMoTransducerEncoder, NeMoTransducerDecoder, NeMoTransducerJoiner, 'nemo_transducer');
345 Msg := 'NeMo transducer'; 392 Msg := 'NeMo transducer';
346 end 393 end
  394 + else if FileExists(MoonshinePreprocessor) and FileExists(MoonshineEncoder) and FileExists(MoonshineUncachedDecoder) and FileExists(MoonshineCachedDecoder) then
  395 + begin
  396 + Form1.OfflineRecognizer := CreateOfflineRecognizerMoonshine(Tokens,
  397 + MoonshinePreprocessor, MoonshineEncoder, MoonshineUncachedDecoder,
  398 + MoonshineCachedDecoder);
  399 + Msg := 'Moonshine';
  400 + end
347 else 401 else
348 begin 402 begin
349 Status := 'Please download at least one non-streaming speech recognition model first.'; 403 Status := 'Please download at least one non-streaming speech recognition model first.';
@@ -51,6 +51,20 @@ def get_models(): @@ -51,6 +51,20 @@ def get_models():
51 """, 51 """,
52 ), 52 ),
53 Model( 53 Model(
  54 + model_name="sherpa-onnx-moonshine-tiny-en-int8",
  55 + lang="en",
  56 + short_name="moonshine_tiny",
  57 + cmd="""
  58 + pushd $model_name
  59 + mv -v preprocess.onnx moonshine-preprocessor.onnx
  60 + mv -v encode.int8.onnx moonshine-encoder.onnx
  61 + mv -v uncached_decode.int8.onnx moonshine-uncached-decoder.onnx
  62 + mv -v cached_decode.int8.onnx moonshine-cached-decoder.onnx
  63 +
  64 + popd
  65 + """,
  66 + ),
  67 + Model(
54 model_name="sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17", 68 model_name="sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17",
55 lang="zh_en_ko_ja_yue", 69 lang="zh_en_ko_ja_yue",
56 short_name="sense_voice", 70 short_name="sense_voice",