离线模型管理
离线模型管理
离线模式需要预先下载模型文件。业务侧优先使用 TmkTranslationSDK 暴露的离线模型接口,不需要直接调用底层离线库。
默认离线模型目录
fun defaultOfflineModelRootDirectory(): String
fun defaultOfflineModelRootDirectory(context: Context): String
说明:
-
无参重载要求 SDK 已初始化。
-
Context重载可在sdkInit前查询下载目录。 -
创建离线通道时可通过
setModelRootDirectory(modelRootDir)显式传入。
downloadOfflineModels(...)
下载指定语言对所需的离线模型资源。
fun downloadOfflineModels(
context: Context,
srcLang: String,
dstLang: String,
scenario: Scenario = Scenario.ONE_TO_ONE,
needMt: Boolean = true,
needTts: Boolean = true,
listener: TmkOfflineModelDownloadListener? = null,
)
另有不带 context 的重载,以及可传 modelRootDirectory 的重载。
前置条件:
-
已调用
sdkInit(context, config)。 -
已调用
verifyAuth(callback)。 -
isOfflineTranslationSupported()返回true。
如果前置条件不满足,SDK 会通过 listener.onOfflineModelError(code, message) 显式回调原因,不会静默失败。
downloadChineseEnglishOfflineModels(...)
下载中英双向离线模型。
fun downloadChineseEnglishOfflineModels(listener: TmkOfflineModelDownloadListener? = null)
fun downloadChineseEnglishOfflineModels(context: Context, listener: TmkOfflineModelDownloadListener? = null)
fun downloadChineseEnglishOfflineModels(modelRootDirectory: String, listener: TmkOfflineModelDownloadListener? = null)
fun downloadChineseEnglishOfflineModels(context: Context, modelRootDirectory: String, listener: TmkOfflineModelDownloadListener? = null)
兼容命名 downloadChineseEnglish(...) 与上述能力等价。
cancelOfflineModelDownload()
取消当前正在进行的离线模型下载。
fun cancelOfflineModelDownload()
取消属于用户主动行为,业务侧不应弹 fatal 错误框,应恢复下载按钮或显示已取消状态。
getOfflineModelPackageInfos(...)
查询指定语言对关联的离线模型资源包状态。
fun getOfflineModelPackageInfos(
context: Context,
srcLang: String,
dstLang: String,
scenario: Scenario = Scenario.ONE_TO_ONE,
needMt: Boolean = true,
needTts: Boolean = true,
): List<TmkOfflineModelPackageInfo>
另有不带 context 的重载,以及可传 modelRootDirectory 的重载。
模型就绪检查接口
单类模型就绪检查
可分别检查 ASR、MT、TTS 模型及 TTS 公共数据包是否就绪:
fun isAsrModelReady(langCode: String, modelRootDirectory: String? = null): Boolean
fun isMtModelReady(srcLang: String, dstLang: String, modelRootDirectory: String? = null): Boolean
fun isTtsModelReady(langCode: String, modelRootDirectory: String? = null): Boolean
fun isTtsDataReady(modelRootDirectory: String? = null): Boolean
说明:
-
isAsrModelReady:检查指定语言的 ASR 模型是否就绪。 -
isMtModelReady:检查指定源/目标语言对的 MT 模型是否就绪。 -
isTtsModelReady:检查指定语言的 TTS 模型是否就绪。 -
isTtsDataReady:检查公共 TTS 数据包是否就绪。 -
语言代码会按主语言标签归一(如
zh-CN、zh-HK归一为zh)。 -
每个方法都提供带 context 的重载(首个参数为
context: Context),可在sdkInit之前查询;不带 context 时使用 SDK 初始化时的Context。 -
modelRootDirectory传null时使用默认模型根目录。
组合就绪检查
按场景一次性检查某语言对所需的全部模型:
同步检查:
fun isOfflineModelReady(
context: Context,
srcLang: String,
dstLang: String,
scenario: Scenario = Scenario.ONE_TO_ONE,
needMt: Boolean = true,
needTts: Boolean = true,
): Boolean
异步检查:
fun checkOfflineModelReadyAsync(
context: Context,
srcLang: String,
dstLang: String,
scenario: Scenario = Scenario.ONE_TO_ONE,
needMt: Boolean = true,
needTts: Boolean = true,
completion: (Boolean) -> Unit,
)
异步回调会切回主线程。
离线场景所需模型说明
收听模式 Scenario.LISTEN
默认需要:
-
源语言 ASR,例如
asr/zh -
源到目标 MT,例如
mt/zh2en -
目标语言 TTS,例如
tts/en -
TTS 公共数据,例如
tts/tmk-tts-data
如通过 addExtraParams("enable_mt", "false") 或 addExtraParams("enable_tts", "false") 关闭翻译或 TTS,对应模型需求会减少。
一对一模式 Scenario.ONE_TO_ONE
默认需要双向模型:
-
左右语言 ASR,例如
asr/zh、asr/en -
双向 MT,例如
mt/zh2en、mt/en2zh -
左右语言 TTS,例如
tts/zh、tts/en -
TTS 公共数据,例如
tts/tmk-tts-data
离线通道创建示例
离线收听
val modelRootDir = TmkTranslationSDK.defaultOfflineModelRootDirectory(context)
val channelConfig = TmkTransChannelConfig.Builder()
.setRoom(room)
.setMode(TranslationMode.OFFLINE)
.setScenario(Scenario.LISTEN)
.setSourceLang("zh-CN")
.setTargetLang("en-US")
.setSampleRate(16000)
.setChannelNum(1)
.setModelRootDirectory(modelRootDir)
.build()
离线一对一
val modelRootDir = TmkTranslationSDK.defaultOfflineModelRootDirectory(context)
val channelConfig = TmkTransChannelConfig.Builder()
.setRoom(room)
.setMode(TranslationMode.OFFLINE)
.setScenario(Scenario.ONE_TO_ONE)
.setSourceLang("zh-CN")
.setTargetLang("en-US")
.setSpeakers(
listOf(
TmkSpeaker(SpeakerChannel.LEFT, SpeakerGender.FEMALE),
TmkSpeaker(SpeakerChannel.RIGHT, SpeakerGender.MALE),
)
)
.setOfflineAudioChannelMode(TmkOfflineAudioChannelMode.STEREO)
.setSampleRate(16000)
.setChannelNum(2)
.setModelRootDirectory(modelRootDir)
.build()
离线模型下载监听器
TmkOfflineModelPackageState
| 枚举 | 说明 |
|---|---|
READY | 资源包已完整就绪 |
NEEDS_DOWNLOAD | 资源包未下载 |
NEEDS_UPDATE | 资源包需要更新 |
RESUMABLE | 存在断点文件,可继续下载 |
DOWNLOADING | 正在下载 |
UNZIPPING | 正在解压 |
FAILED | 下载或解压失败 |
CANCELLED | 下载已取消 |
TmkOfflineModelPackageInfo
| 字段 | 说明 |
|---|---|
packageKey | 包键,例如 asr/zh、mt/zh2en |
type | 包类型,例如 asr、mt、tts |
name | 包名称 |
state | 包状态 |
index / total | 当前包序号与总包数 |
downloadedBytes / totalBytes | 下载进度;未知总大小时 totalBytes = -1 |
unzipProgress | 解压进度,取值 0.0~1.0 |
localDirectory | 本地目录 |
TmkOfflineModelDownloadListener
interface TmkOfflineModelDownloadListener {
fun onOfflineModelEvent(name: String, args: Any?) = Unit
fun onOfflineModelDownloadProgress(
fileName: String,
index: Int,
total: Int,
downloaded: Long,
fileTotal: Long,
) = Unit
fun onOfflineModelUnzipProgress(fileName: String, progress: Double) = Unit
fun onOfflineModelReady() = Unit
fun onOfflineModelPackageInfosChanged(
packages: List<TmkOfflineModelPackageInfo>,
) = Unit
fun onOfflineModelError(code: Int, message: String) = Unit
}
SDK 保证这些回调都在主线程触发,可直接更新 UI。