|
| 1 | +// sherpa-onnx/jni/offline-diacritization.cc |
| 2 | +// |
| 3 | +// Copyright (c) 2026 Matias Lin |
| 4 | + |
| 5 | +#include "sherpa-onnx/csrc/offline-diacritization.h" |
| 6 | + |
| 7 | +#include <string> |
| 8 | + |
| 9 | +#include "sherpa-onnx/csrc/macros.h" |
| 10 | +#include "sherpa-onnx/jni/common.h" |
| 11 | + |
| 12 | +namespace sherpa_onnx { |
| 13 | + |
| 14 | +static OfflineDiacritizationConfig GetOfflineDiacritizationConfig( |
| 15 | + JNIEnv *env, jobject config, bool *ok) { |
| 16 | + OfflineDiacritizationConfig ans; |
| 17 | + |
| 18 | + jclass cls = env->GetObjectClass(config); |
| 19 | + jfieldID fid; |
| 20 | + |
| 21 | + fid = env->GetFieldID( |
| 22 | + cls, "model", "Lcom/k2fsa/sherpa/onnx/OfflineDiacritizationModelConfig;"); |
| 23 | + jobject model_config = env->GetObjectField(config, fid); |
| 24 | + jclass model_config_cls = env->GetObjectClass(model_config); |
| 25 | + |
| 26 | + SHERPA_ONNX_JNI_READ_STRING(ans.model.catt_encoder, cattEncoder, |
| 27 | + model_config_cls, model_config); |
| 28 | + |
| 29 | + SHERPA_ONNX_JNI_READ_STRING(ans.model.catt_decoder, cattDecoder, |
| 30 | + model_config_cls, model_config); |
| 31 | + |
| 32 | + SHERPA_ONNX_JNI_READ_INT(ans.model.num_threads, numThreads, model_config_cls, |
| 33 | + model_config); |
| 34 | + |
| 35 | + SHERPA_ONNX_JNI_READ_BOOL(ans.model.debug, debug, model_config_cls, |
| 36 | + model_config); |
| 37 | + |
| 38 | + SHERPA_ONNX_JNI_READ_STRING(ans.model.provider, provider, model_config_cls, |
| 39 | + model_config); |
| 40 | + |
| 41 | + *ok = true; |
| 42 | + return ans; |
| 43 | +} |
| 44 | + |
| 45 | +} // namespace sherpa_onnx |
| 46 | + |
| 47 | +SHERPA_ONNX_EXTERN_C |
| 48 | +JNIEXPORT jlong JNICALL |
| 49 | +Java_com_k2fsa_sherpa_onnx_OfflineDiacritization_newFromAsset( |
| 50 | + JNIEnv *env, jobject /*obj*/, jobject asset_manager, jobject _config) { |
| 51 | +#if __ANDROID_API__ >= 9 |
| 52 | + AAssetManager *mgr = AAssetManager_fromJava(env, asset_manager); |
| 53 | + if (!mgr) { |
| 54 | + SHERPA_ONNX_LOGE("Failed to get asset manager: %p", mgr); |
| 55 | + return 0; |
| 56 | + } |
| 57 | +#endif |
| 58 | + bool ok = false; |
| 59 | + auto config = sherpa_onnx::GetOfflineDiacritizationConfig(env, _config, &ok); |
| 60 | + |
| 61 | + if (!ok) { |
| 62 | + SHERPA_ONNX_LOGE("Please read the error message carefully"); |
| 63 | + return 0; |
| 64 | + } |
| 65 | + |
| 66 | + SHERPA_ONNX_LOGE("config:\n%s", config.ToString().c_str()); |
| 67 | + |
| 68 | + auto model = new sherpa_onnx::OfflineDiacritization( |
| 69 | +#if __ANDROID_API__ >= 9 |
| 70 | + mgr, |
| 71 | +#endif |
| 72 | + config); |
| 73 | + |
| 74 | + return (jlong)model; |
| 75 | +} |
| 76 | + |
| 77 | +SHERPA_ONNX_EXTERN_C |
| 78 | +JNIEXPORT jlong JNICALL |
| 79 | +Java_com_k2fsa_sherpa_onnx_OfflineDiacritization_newFromFile(JNIEnv *env, |
| 80 | + jobject /*obj*/, |
| 81 | + jobject _config) { |
| 82 | + bool ok = false; |
| 83 | + auto config = sherpa_onnx::GetOfflineDiacritizationConfig(env, _config, &ok); |
| 84 | + |
| 85 | + if (!ok) { |
| 86 | + SHERPA_ONNX_LOGE("Please read the error message carefully"); |
| 87 | + return 0; |
| 88 | + } |
| 89 | + |
| 90 | + SHERPA_ONNX_LOGE("config:\n%s", config.ToString().c_str()); |
| 91 | + |
| 92 | + if (!config.Validate()) { |
| 93 | + SHERPA_ONNX_LOGE("Errors found in config!"); |
| 94 | + return 0; |
| 95 | + } |
| 96 | + |
| 97 | + auto model = new sherpa_onnx::OfflineDiacritization(config); |
| 98 | + |
| 99 | + return (jlong)model; |
| 100 | +} |
| 101 | + |
| 102 | +SHERPA_ONNX_EXTERN_C |
| 103 | +JNIEXPORT void JNICALL Java_com_k2fsa_sherpa_onnx_OfflineDiacritization_delete( |
| 104 | + JNIEnv * /*env*/, jobject /*obj*/, jlong ptr) { |
| 105 | + delete reinterpret_cast<sherpa_onnx::OfflineDiacritization *>(ptr); |
| 106 | +} |
| 107 | + |
| 108 | +SHERPA_ONNX_EXTERN_C |
| 109 | +JNIEXPORT jstring JNICALL |
| 110 | +Java_com_k2fsa_sherpa_onnx_OfflineDiacritization_addDiacritics(JNIEnv *env, |
| 111 | + jobject /*obj*/, |
| 112 | + jlong ptr, |
| 113 | + jstring text) { |
| 114 | + auto diacrt = |
| 115 | + reinterpret_cast<const sherpa_onnx::OfflineDiacritization *>(ptr); |
| 116 | + |
| 117 | + const char *ptext = env->GetStringUTFChars(text, nullptr); |
| 118 | + |
| 119 | + std::string result = diacrt->AddDiacritics(ptext); |
| 120 | + |
| 121 | + env->ReleaseStringUTFChars(text, ptext); |
| 122 | + |
| 123 | + return SafeNewStringUTF(env, result); |
| 124 | +} |
0 commit comments