Add C++ runtime and Python APIs for Moonshine models (#1473)
This commit is contained in:
@@ -66,7 +66,21 @@ python3 ./python-api-examples/non_streaming_server.py \
|
||||
--wenet-ctc ./sherpa-onnx-zh-wenet-wenetspeech/model.onnx \
|
||||
--tokens ./sherpa-onnx-zh-wenet-wenetspeech/tokens.txt
|
||||
|
||||
(5) Use a Whisper model
|
||||
(5) Use a Moonshine model
|
||||
|
||||
cd /path/to/sherpa-onnx
|
||||
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-moonshine-tiny-en-int8.tar.bz2
|
||||
tar xvf sherpa-onnx-moonshine-tiny-en-int8.tar.bz2
|
||||
rm sherpa-onnx-moonshine-tiny-en-int8.tar.bz2
|
||||
|
||||
python3 ./python-api-examples/non_streaming_server.py \
|
||||
--moonshine-preprocessor=./sherpa-onnx-moonshine-tiny-en-int8/preprocess.onnx \
|
||||
--moonshine-encoder=./sherpa-onnx-moonshine-tiny-en-int8/encode.int8.onnx \
|
||||
--moonshine-uncached-decoder=./sherpa-onnx-moonshine-tiny-en-int8/uncached_decode.int8.onnx \
|
||||
--moonshine-cached-decoder=./sherpa-onnx-moonshine-tiny-en-int8/cached_decode.int8.onnx \
|
||||
--tokens=./sherpa-onnx-moonshine-tiny-en-int8/tokens.txt
|
||||
|
||||
(6) Use a Whisper model
|
||||
|
||||
cd /path/to/sherpa-onnx
|
||||
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-whisper-tiny.en.tar.bz2
|
||||
@@ -78,7 +92,7 @@ python3 ./python-api-examples/non_streaming_server.py \
|
||||
--whisper-decoder=./sherpa-onnx-whisper-tiny.en/tiny.en-decoder.onnx \
|
||||
--tokens=./sherpa-onnx-whisper-tiny.en/tiny.en-tokens.txt
|
||||
|
||||
(5) Use a tdnn model of the yesno recipe from icefall
|
||||
(7) Use a tdnn model of the yesno recipe from icefall
|
||||
|
||||
cd /path/to/sherpa-onnx
|
||||
|
||||
@@ -92,7 +106,7 @@ python3 ./python-api-examples/non_streaming_server.py \
|
||||
--tdnn-model=./sherpa-onnx-tdnn-yesno/model-epoch-14-avg-2.onnx \
|
||||
--tokens=./sherpa-onnx-tdnn-yesno/tokens.txt
|
||||
|
||||
(6) Use a Non-streaming SenseVoice model
|
||||
(8) Use a Non-streaming SenseVoice model
|
||||
|
||||
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
|
||||
tar xvf sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17.tar.bz2
|
||||
@@ -254,6 +268,36 @@ def add_tdnn_ctc_model_args(parser: argparse.ArgumentParser):
|
||||
)
|
||||
|
||||
|
||||
def add_moonshine_model_args(parser: argparse.ArgumentParser):
|
||||
parser.add_argument(
|
||||
"--moonshine-preprocessor",
|
||||
default="",
|
||||
type=str,
|
||||
help="Path to moonshine preprocessor model",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--moonshine-encoder",
|
||||
default="",
|
||||
type=str,
|
||||
help="Path to moonshine encoder model",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--moonshine-uncached-decoder",
|
||||
default="",
|
||||
type=str,
|
||||
help="Path to moonshine uncached decoder model",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--moonshine-cached-decoder",
|
||||
default="",
|
||||
type=str,
|
||||
help="Path to moonshine cached decoder model",
|
||||
)
|
||||
|
||||
|
||||
def add_whisper_model_args(parser: argparse.ArgumentParser):
|
||||
parser.add_argument(
|
||||
"--whisper-encoder",
|
||||
@@ -311,6 +355,7 @@ def add_model_args(parser: argparse.ArgumentParser):
|
||||
add_wenet_ctc_model_args(parser)
|
||||
add_tdnn_ctc_model_args(parser)
|
||||
add_whisper_model_args(parser)
|
||||
add_moonshine_model_args(parser)
|
||||
|
||||
parser.add_argument(
|
||||
"--tokens",
|
||||
@@ -876,6 +921,12 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
|
||||
assert len(args.whisper_encoder) == 0, args.whisper_encoder
|
||||
assert len(args.whisper_decoder) == 0, args.whisper_decoder
|
||||
assert len(args.tdnn_model) == 0, args.tdnn_model
|
||||
assert len(args.moonshine_preprocessor) == 0, args.moonshine_preprocessor
|
||||
assert len(args.moonshine_encoder) == 0, args.moonshine_encoder
|
||||
assert (
|
||||
len(args.moonshine_uncached_decoder) == 0
|
||||
), args.moonshine_uncached_decoder
|
||||
assert len(args.moonshine_cached_decoder) == 0, args.moonshine_cached_decoder
|
||||
|
||||
assert_file_exists(args.encoder)
|
||||
assert_file_exists(args.decoder)
|
||||
@@ -903,6 +954,12 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
|
||||
assert len(args.whisper_encoder) == 0, args.whisper_encoder
|
||||
assert len(args.whisper_decoder) == 0, args.whisper_decoder
|
||||
assert len(args.tdnn_model) == 0, args.tdnn_model
|
||||
assert len(args.moonshine_preprocessor) == 0, args.moonshine_preprocessor
|
||||
assert len(args.moonshine_encoder) == 0, args.moonshine_encoder
|
||||
assert (
|
||||
len(args.moonshine_uncached_decoder) == 0
|
||||
), args.moonshine_uncached_decoder
|
||||
assert len(args.moonshine_cached_decoder) == 0, args.moonshine_cached_decoder
|
||||
|
||||
assert_file_exists(args.paraformer)
|
||||
|
||||
@@ -921,6 +978,12 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
|
||||
assert len(args.whisper_encoder) == 0, args.whisper_encoder
|
||||
assert len(args.whisper_decoder) == 0, args.whisper_decoder
|
||||
assert len(args.tdnn_model) == 0, args.tdnn_model
|
||||
assert len(args.moonshine_preprocessor) == 0, args.moonshine_preprocessor
|
||||
assert len(args.moonshine_encoder) == 0, args.moonshine_encoder
|
||||
assert (
|
||||
len(args.moonshine_uncached_decoder) == 0
|
||||
), args.moonshine_uncached_decoder
|
||||
assert len(args.moonshine_cached_decoder) == 0, args.moonshine_cached_decoder
|
||||
|
||||
assert_file_exists(args.sense_voice)
|
||||
recognizer = sherpa_onnx.OfflineRecognizer.from_sense_voice(
|
||||
@@ -934,6 +997,12 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
|
||||
assert len(args.whisper_encoder) == 0, args.whisper_encoder
|
||||
assert len(args.whisper_decoder) == 0, args.whisper_decoder
|
||||
assert len(args.tdnn_model) == 0, args.tdnn_model
|
||||
assert len(args.moonshine_preprocessor) == 0, args.moonshine_preprocessor
|
||||
assert len(args.moonshine_encoder) == 0, args.moonshine_encoder
|
||||
assert (
|
||||
len(args.moonshine_uncached_decoder) == 0
|
||||
), args.moonshine_uncached_decoder
|
||||
assert len(args.moonshine_cached_decoder) == 0, args.moonshine_cached_decoder
|
||||
|
||||
assert_file_exists(args.nemo_ctc)
|
||||
|
||||
@@ -950,6 +1019,12 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
|
||||
assert len(args.whisper_encoder) == 0, args.whisper_encoder
|
||||
assert len(args.whisper_decoder) == 0, args.whisper_decoder
|
||||
assert len(args.tdnn_model) == 0, args.tdnn_model
|
||||
assert len(args.moonshine_preprocessor) == 0, args.moonshine_preprocessor
|
||||
assert len(args.moonshine_encoder) == 0, args.moonshine_encoder
|
||||
assert (
|
||||
len(args.moonshine_uncached_decoder) == 0
|
||||
), args.moonshine_uncached_decoder
|
||||
assert len(args.moonshine_cached_decoder) == 0, args.moonshine_cached_decoder
|
||||
|
||||
assert_file_exists(args.wenet_ctc)
|
||||
|
||||
@@ -966,6 +1041,12 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
|
||||
assert len(args.tdnn_model) == 0, args.tdnn_model
|
||||
assert_file_exists(args.whisper_encoder)
|
||||
assert_file_exists(args.whisper_decoder)
|
||||
assert len(args.moonshine_preprocessor) == 0, args.moonshine_preprocessor
|
||||
assert len(args.moonshine_encoder) == 0, args.moonshine_encoder
|
||||
assert (
|
||||
len(args.moonshine_uncached_decoder) == 0
|
||||
), args.moonshine_uncached_decoder
|
||||
assert len(args.moonshine_cached_decoder) == 0, args.moonshine_cached_decoder
|
||||
|
||||
recognizer = sherpa_onnx.OfflineRecognizer.from_whisper(
|
||||
encoder=args.whisper_encoder,
|
||||
@@ -980,6 +1061,12 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
|
||||
)
|
||||
elif args.tdnn_model:
|
||||
assert_file_exists(args.tdnn_model)
|
||||
assert len(args.moonshine_preprocessor) == 0, args.moonshine_preprocessor
|
||||
assert len(args.moonshine_encoder) == 0, args.moonshine_encoder
|
||||
assert (
|
||||
len(args.moonshine_uncached_decoder) == 0
|
||||
), args.moonshine_uncached_decoder
|
||||
assert len(args.moonshine_cached_decoder) == 0, args.moonshine_cached_decoder
|
||||
|
||||
recognizer = sherpa_onnx.OfflineRecognizer.from_tdnn_ctc(
|
||||
model=args.tdnn_model,
|
||||
@@ -990,6 +1077,21 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
|
||||
decoding_method=args.decoding_method,
|
||||
provider=args.provider,
|
||||
)
|
||||
elif args.moonshine_preprocessor:
|
||||
assert_file_exists(args.moonshine_preprocessor)
|
||||
assert_file_exists(args.moonshine_encoder)
|
||||
assert_file_exists(args.moonshine_uncached_decoder)
|
||||
assert_file_exists(args.moonshine_cached_decoder)
|
||||
|
||||
recognizer = sherpa_onnx.OfflineRecognizer.from_moonshine(
|
||||
preprocessor=args.moonshine_preprocessor,
|
||||
encoder=args.moonshine_encoder,
|
||||
uncached_decoder=args.moonshine_uncached_decoder,
|
||||
cached_decoder=args.moonshine_cached_decoder,
|
||||
tokens=args.tokens,
|
||||
num_threads=args.num_threads,
|
||||
decoding_method=args.decoding_method,
|
||||
)
|
||||
else:
|
||||
raise ValueError("Please specify at least one model")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user