115115 --model-type nemo_transducer \
116116 /path/to/test.mp4
117117
118+ (9) For FireRedAsr CTC models
119+
120+ ./python-api-examples/generate-subtitles.py \
121+ --silero-vad-model=./silero_vad.onnx \
122+ --fire-red-asr-ctc=./sherpa-onnx-fire-red-asr2-ctc-zh_en-int8-2026-02-25/model.int8.onnx \
123+ --tokens=./sherpa-onnx-fire-red-asr2-ctc-zh_en-int8-2026-02-25/tokens.txt \
124+ --num-threads=2 \
125+ /path/to/test.mp4
126+
127+ (10) For FunASR Nano models
128+
129+ ./python-api-examples/generate-subtitles.py \
130+ --silero-vad-model=./silero_vad.onnx \
131+ --funasr-nano-encoder-adaptor=./sherpa-onnx-funasr-nano-int8-2025-12-30/encoder_adaptor.int8.onnx \
132+ --funasr-nano-llm=./sherpa-onnx-funasr-nano-int8-2025-12-30/llm.int8.onnx \
133+ --funasr-nano-tokenizer=./sherpa-onnx-funasr-nano-int8-2025-12-30/Qwen3-0.6B \
134+ --funasr-nano-embedding=./sherpa-onnx-funasr-nano-int8-2025-12-30/embedding.int8.onnx \
135+ --num-threads=2 \
136+ /path/to/test.mp4
137+
118138Please refer to
119139https://k2-fsa.github.io/sherpa/onnx/index.html
120140to install sherpa-onnx and to download non-streaming pre-trained models
@@ -205,6 +225,41 @@ def get_args():
205225 help = "Path to the CTC model.onnx from WeNet" ,
206226 )
207227
228+ parser .add_argument (
229+ "--fire-red-asr-ctc" ,
230+ default = "" ,
231+ type = str ,
232+ help = "Path to the FireRedAsr CTC model.onnx" ,
233+ )
234+
235+ parser .add_argument (
236+ "--funasr-nano-encoder-adaptor" ,
237+ default = "" ,
238+ type = str ,
239+ help = "Path to FunASR Nano encoder_adaptor.onnx" ,
240+ )
241+
242+ parser .add_argument (
243+ "--funasr-nano-llm" ,
244+ default = "" ,
245+ type = str ,
246+ help = "Path to FunASR Nano llm.onnx" ,
247+ )
248+
249+ parser .add_argument (
250+ "--funasr-nano-tokenizer" ,
251+ default = "" ,
252+ type = str ,
253+ help = "Path to FunASR Nano tokenizer directory (e.g., Qwen3-0.6B)" ,
254+ )
255+
256+ parser .add_argument (
257+ "--funasr-nano-embedding" ,
258+ default = "" ,
259+ type = str ,
260+ help = "Path to FunASR Nano embedding.onnx" ,
261+ )
262+
208263 parser .add_argument (
209264 "--num-threads" ,
210265 type = int ,
@@ -358,6 +413,8 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
358413 assert len (args .whisper_decoder ) == 0 , args .whisper_decoder
359414 assert len (args .fire_red_asr_encoder ) == 0 , args .fire_red_asr_encoder
360415 assert len (args .fire_red_asr_decoder ) == 0 , args .fire_red_asr_decoder
416+ assert len (args .fire_red_asr_ctc ) == 0 , args .fire_red_asr_ctc
417+ assert len (args .funasr_nano_encoder_adaptor ) == 0 , args .funasr_nano_encoder_adaptor
361418 assert len (args .moonshine_preprocessor ) == 0 , args .moonshine_preprocessor
362419 assert len (args .moonshine_encoder ) == 0 , args .moonshine_encoder
363420 assert (
@@ -388,6 +445,8 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
388445 assert len (args .whisper_decoder ) == 0 , args .whisper_decoder
389446 assert len (args .fire_red_asr_encoder ) == 0 , args .fire_red_asr_encoder
390447 assert len (args .fire_red_asr_decoder ) == 0 , args .fire_red_asr_decoder
448+ assert len (args .fire_red_asr_ctc ) == 0 , args .fire_red_asr_ctc
449+ assert len (args .funasr_nano_encoder_adaptor ) == 0 , args .funasr_nano_encoder_adaptor
391450 assert len (args .moonshine_preprocessor ) == 0 , args .moonshine_preprocessor
392451 assert len (args .moonshine_encoder ) == 0 , args .moonshine_encoder
393452 assert (
@@ -412,6 +471,8 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
412471 assert len (args .whisper_decoder ) == 0 , args .whisper_decoder
413472 assert len (args .fire_red_asr_encoder ) == 0 , args .fire_red_asr_encoder
414473 assert len (args .fire_red_asr_decoder ) == 0 , args .fire_red_asr_decoder
474+ assert len (args .fire_red_asr_ctc ) == 0 , args .fire_red_asr_ctc
475+ assert len (args .funasr_nano_encoder_adaptor ) == 0 , args .funasr_nano_encoder_adaptor
415476 assert len (args .moonshine_preprocessor ) == 0 , args .moonshine_preprocessor
416477 assert len (args .moonshine_encoder ) == 0 , args .moonshine_encoder
417478 assert (
@@ -432,6 +493,8 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
432493 assert len (args .whisper_decoder ) == 0 , args .whisper_decoder
433494 assert len (args .fire_red_asr_encoder ) == 0 , args .fire_red_asr_encoder
434495 assert len (args .fire_red_asr_decoder ) == 0 , args .fire_red_asr_decoder
496+ assert len (args .fire_red_asr_ctc ) == 0 , args .fire_red_asr_ctc
497+ assert len (args .funasr_nano_encoder_adaptor ) == 0 , args .funasr_nano_encoder_adaptor
435498 assert len (args .moonshine_preprocessor ) == 0 , args .moonshine_preprocessor
436499 assert len (args .moonshine_encoder ) == 0 , args .moonshine_encoder
437500 assert (
@@ -455,6 +518,8 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
455518 assert_file_exists (args .whisper_decoder )
456519 assert len (args .fire_red_asr_encoder ) == 0 , args .fire_red_asr_encoder
457520 assert len (args .fire_red_asr_decoder ) == 0 , args .fire_red_asr_decoder
521+ assert len (args .fire_red_asr_ctc ) == 0 , args .fire_red_asr_ctc
522+ assert len (args .funasr_nano_encoder_adaptor ) == 0 , args .funasr_nano_encoder_adaptor
458523 assert len (args .moonshine_preprocessor ) == 0 , args .moonshine_preprocessor
459524 assert len (args .moonshine_encoder ) == 0 , args .moonshine_encoder
460525 assert (
@@ -476,6 +541,8 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
476541 elif args .moonshine_preprocessor :
477542 assert len (args .fire_red_asr_encoder ) == 0 , args .fire_red_asr_encoder
478543 assert len (args .fire_red_asr_decoder ) == 0 , args .fire_red_asr_decoder
544+ assert len (args .fire_red_asr_ctc ) == 0 , args .fire_red_asr_ctc
545+ assert len (args .funasr_nano_encoder_adaptor ) == 0 , args .funasr_nano_encoder_adaptor
479546 assert_file_exists (args .moonshine_preprocessor )
480547 assert_file_exists (args .moonshine_encoder )
481548 assert_file_exists (args .moonshine_uncached_decoder )
@@ -500,6 +567,32 @@ def create_recognizer(args) -> sherpa_onnx.OfflineRecognizer:
500567 decoding_method = args .decoding_method ,
501568 debug = args .debug ,
502569 )
570+ elif args .fire_red_asr_ctc :
571+ assert len (args .funasr_nano_encoder_adaptor ) == 0 , args .funasr_nano_encoder_adaptor
572+
573+ assert_file_exists (args .fire_red_asr_ctc )
574+
575+ recognizer = sherpa_onnx .OfflineRecognizer .from_fire_red_asr_ctc (
576+ model = args .fire_red_asr_ctc ,
577+ tokens = args .tokens ,
578+ num_threads = args .num_threads ,
579+ decoding_method = args .decoding_method ,
580+ debug = args .debug ,
581+ )
582+ elif args .funasr_nano_encoder_adaptor :
583+ assert_file_exists (args .funasr_nano_encoder_adaptor )
584+ assert_file_exists (args .funasr_nano_llm )
585+ assert_file_exists (args .funasr_nano_tokenizer )
586+ assert_file_exists (args .funasr_nano_embedding )
587+
588+ recognizer = sherpa_onnx .OfflineRecognizer .from_funasr_nano (
589+ encoder_adaptor = args .funasr_nano_encoder_adaptor ,
590+ llm = args .funasr_nano_llm ,
591+ embedding = args .funasr_nano_embedding ,
592+ tokenizer = args .funasr_nano_tokenizer ,
593+ num_threads = args .num_threads ,
594+ debug = args .debug ,
595+ )
503596 else :
504597 raise ValueError ("Please specify at least one model" )
505598
@@ -528,7 +621,8 @@ def __str__(self):
528621
529622def main ():
530623 args = get_args ()
531- assert_file_exists (args .tokens )
624+ if not args .funasr_nano_encoder_adaptor :
625+ assert_file_exists (args .tokens )
532626 if args .silero_vad_model :
533627 assert_file_exists (args .silero_vad_model )
534628 elif args .ten_vad_model :
0 commit comments