跳到主要内容
版本:Latest

离线模型管理

离线模型管理

离线模式需要预先下载模型文件。业务侧优先使用 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-CNzh-HK 归一为 zh)。

  • 每个方法都提供带 context 的重载(首个参数为 context: Context),可在 sdkInit 之前查询;不带 context 时使用 SDK 初始化时的 Context

  • modelRootDirectorynull 时使用默认模型根目录。

组合就绪检查

按场景一次性检查某语言对所需的全部模型:

同步检查:

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/zhasr/en

  • 双向 MT,例如 mt/zh2enmt/en2zh

  • 左右语言 TTS,例如 tts/zhtts/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/zhmt/zh2en
type包类型,例如 asrmttts
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。