Add Lazarus example for Moonshine models. (#1532)

This commit is contained in:
Fangjun Kuang
2024-11-13 00:04:16 +08:00
committed by GitHub
parent 4fab3f2e2f
commit a16c9aff8b
4 changed files with 78 additions and 8 deletions

View File

@@ -159,6 +159,30 @@ begin
Result := TSherpaOnnxOfflineRecognizer.Create(Config);
end;
function CreateOfflineRecognizerMoonshine(
Tokens: AnsiString;
Preprocessor: AnsiString;
Encoder: AnsiString;
UncachedDecoder: AnsiString;
CachedDecoder: AnsiString): TSherpaOnnxOfflineRecognizer;
var
Config: TSherpaOnnxOfflineRecognizerConfig;
begin
Initialize(Config);
Config.ModelConfig.Moonshine.Preprocessor := Preprocessor;
Config.ModelConfig.Moonshine.Encoder := Encoder;
Config.ModelConfig.Moonshine.UncachedDecoder := UncachedDecoder;
Config.ModelConfig.Moonshine.CachedDecoder := CachedDecoder;
Config.ModelConfig.Tokens := Tokens;
Config.ModelConfig.Provider := 'cpu';
Config.ModelConfig.NumThreads := 2;
Config.ModelConfig.Debug := False;
Result := TSherpaOnnxOfflineRecognizer.Create(Config);
end;
constructor TMyInitThread.Create(CreateSuspended : boolean; ModelDirectory: AnsiString);
begin
inherited Create(CreateSuspended);
@@ -193,6 +217,11 @@ var
NeMoTransducerEncoder: AnsiString;
NeMoTransducerDecoder: AnsiString;
NeMoTransducerJoiner: AnsiString;
MoonshinePreprocessor: AnsiString;
MoonshineEncoder: AnsiString;
MoonshineUncachedDecoder: AnsiString;
MoonshineCachedDecoder: AnsiString;
begin
VadFilename := ModelDir + 'silero_vad.onnx';
Tokens := ModelDir + 'tokens.txt';
@@ -292,6 +321,24 @@ begin
NeMoTransducerDecoder := ModelDir + 'nemo-transducer-decoder.onnx';
NeMoTransducerJoiner := ModelDir + 'nemo-transducer-joiner.onnx';
{
Please Visit
https://k2-fsa.github.io/sherpa/onnx/moonshine/models.html
to download a Moonshine model.
Note that you have to rename model files after downloading. The following
is an example.
mv preprocess.onnx moonshine-preprocessor.onnx
mv encode.int8.onnx moonshine-encoder.onnx
mv uncached_decode.int8.onnx moonshine-uncached-decoder.onnx
mv cached_decode.int8.onnx moonshine-cached-decoder.onnx
}
MoonshinePreprocessor := ModelDir + 'moonshine-preprocessor.onnx';
MoonshineEncoder := ModelDir + 'moonshine-encoder.onnx';
MoonshineUncachedDecoder := ModelDir + 'moonshine-uncached-decoder.onnx';
MoonshineCachedDecoder := ModelDir + 'moonshine-cached-decoder.onnx';
if not FileExists(VadFilename) then
begin
Status := VadFilename + ' does not exist! Please download it from' +
@@ -344,6 +391,13 @@ begin
NeMoTransducerEncoder, NeMoTransducerDecoder, NeMoTransducerJoiner, 'nemo_transducer');
Msg := 'NeMo transducer';
end
else if FileExists(MoonshinePreprocessor) and FileExists(MoonshineEncoder) and FileExists(MoonshineUncachedDecoder) and FileExists(MoonshineCachedDecoder) then
begin
Form1.OfflineRecognizer := CreateOfflineRecognizerMoonshine(Tokens,
MoonshinePreprocessor, MoonshineEncoder, MoonshineUncachedDecoder,
MoonshineCachedDecoder);
Msg := 'Moonshine';
end
else
begin
Status := 'Please download at least one non-streaming speech recognition model first.';