33// Copyright (c) 2023 Xiaomi Corporation
44
55#include " sherpa-onnx/csrc/offline-recognizer-impl.h"
6- #include " sherpa-onnx/csrc/ort-env.h"
76
87#include < memory>
98#include < sstream>
109#include < string>
1110#include < utility>
1211#include < vector>
1312
13+ #include " sherpa-onnx/csrc/ort-env.h"
14+
1415#if __ANDROID_API__ >= 9
1516
1617#include " android/asset_manager.h"
6869#if SHERPA_ONNX_ENABLE_QNN
6970#include " sherpa-onnx/csrc/qnn/offline-paraformer-model-qnn.h"
7071#include " sherpa-onnx/csrc/qnn/offline-recognizer-parakeet-ctc-qnn-impl.h"
72+ #include " sherpa-onnx/csrc/qnn/offline-recognizer-parakeet-tdt-qnn-impl.h"
7173#include " sherpa-onnx/csrc/qnn/offline-recognizer-transducer-qnn-impl.h"
7274#include " sherpa-onnx/csrc/qnn/offline-recognizer-zipformer-ctc-qnn-impl.h"
7375#include " sherpa-onnx/csrc/qnn/offline-sense-voice-model-qnn.h"
@@ -191,6 +193,9 @@ std::unique_ptr<OfflineRecognizerImpl> OfflineRecognizerImpl::Create(
191193 return std::make_unique<
192194 OfflineRecognizerSenseVoiceTplImpl<OfflineSenseVoiceModelQnn>>(
193195 config);
196+ } else if (IsQnnTransducerArtifact (config.model_config .transducer ) &&
197+ config.model_config .model_type == " nemo_transducer" ) {
198+ return std::make_unique<OfflineRecognizerParakeetTdtQnnImpl>(config);
194199 } else if (IsQnnTransducerArtifact (config.model_config .transducer )) {
195200 return std::make_unique<OfflineRecognizerTransducerQnnImpl>(config);
196201 } else if (!config.model_config .zipformer_ctc .model .empty () ||
@@ -208,15 +213,14 @@ std::unique_ptr<OfflineRecognizerImpl> OfflineRecognizerImpl::Create(
208213 .empty ()) {
209214 return std::make_unique<OfflineRecognizerParakeetCtcQnnImpl>(config);
210215 } else if (!config.model_config .whisper .encoder .empty () ||
211- !config.model_config .whisper .qnn_config .context_binary
212- .empty ()) {
216+ !config.model_config .whisper .qnn_config .context_binary .empty ()) {
213217 return std::make_unique<
214218 OfflineRecognizerWhisperTplImpl<OfflineWhisperModelQnn>>(config);
215219 } else {
216220 SHERPA_ONNX_LOGE (
217- " Only SenseVoice, Paraformer, offline transducer, Zipformer CTC, "
218- " NeMo CTC (Parakeet), and Whisper models are currently supported by "
219- " QNN for non-streaming ASR." );
221+ " Only SenseVoice, Paraformer, Zipformer transducer, Zipformer CTC, "
222+ " NeMo CTC (Parakeet), Parakeet TDT, and Whisper models are "
223+ " currently supported by QNN for non-streaming ASR." );
220224 SHERPA_ONNX_EXIT (-1 );
221225 return nullptr ;
222226 }
@@ -554,8 +558,9 @@ std::unique_ptr<OfflineRecognizerImpl> OfflineRecognizerImpl::Create(
554558 mgr, config);
555559 } else if (IsQnnTransducerArtifact (config.model_config .transducer )) {
556560 SHERPA_ONNX_LOGE (
557- " QNN offline transducer does not support loading from asset manager. "
558- " Please copy model files to writable storage and use file paths." );
561+ " QNN Zipformer transducer does not support loading from asset "
562+ " manager. Please copy model files to writable storage and use file "
563+ " paths." );
559564 SHERPA_ONNX_EXIT (-1 );
560565 return nullptr ;
561566 } else if (!config.model_config .zipformer_ctc .model .empty () ||
@@ -574,15 +579,14 @@ std::unique_ptr<OfflineRecognizerImpl> OfflineRecognizerImpl::Create(
574579 .empty ()) {
575580 return std::make_unique<OfflineRecognizerParakeetCtcQnnImpl>(mgr, config);
576581 } else if (!config.model_config .whisper .encoder .empty () ||
577- !config.model_config .whisper .qnn_config .context_binary
578- .empty ()) {
582+ !config.model_config .whisper .qnn_config .context_binary .empty ()) {
579583 return std::make_unique<
580584 OfflineRecognizerWhisperTplImpl<OfflineWhisperModelQnn>>(mgr, config);
581585 } else {
582586 SHERPA_ONNX_LOGE (
583- " Only SenseVoice, Paraformer, offline transducer, Zipformer CTC, "
584- " NeMo CTC (Parakeet), and Whisper models are currently supported by "
585- " QNN for non-streaming ASR." );
587+ " Only SenseVoice, Paraformer, Zipformer transducer, Zipformer CTC, "
588+ " NeMo CTC (Parakeet), Parakeet TDT, and Whisper models are "
589+ " currently supported by QNN for non-streaming ASR." );
586590 SHERPA_ONNX_EXIT (-1 );
587591 return nullptr ;
588592 }
0 commit comments