模型下发组件仅提供了下载和更新模型文件的能力,如果业务方的 APP 已经具备了这样的功能,可以不使用模型下发组件的。我们可以把模型文件提供出来,由业务方自行托管。
模型下发组件部分接口需要在有网络的情况下进行,无网络或网络环境较差则可能失败。
SDK模型下发主要包含以下部分:
初始化环境依赖
初始化模型下发
检测模型是否存在
检测模型是否需要更新
下载/更新至最新模型
获取模型文件路径
完成网络环境等相关依赖配置。
此方法与 调用流程 中的 环境依赖 完全相同,进程生命周期执行一次即可。
SpeechEngineGenerator.PrepareEnvironment(getApplicationContext(), getApplication());
初始化模型下发模块。
SpeechResourceManager resourceManager = SpeechResourceManagerGenerator.getInstance(); // 设置模型下发服务地址 resourceManager.setAddress("https://sdk.bytespeech.com"); // 设置设备ID,用于线上问题定位,如不确定可以配置为"0" resourceManager.setDeviceId("0"); // 设置从火山申请得到的appid resourceManager.setAppId("APP ID"); // 设置APP版本号,建议设置为真实可用的版本号,方便我们定位模型下载的问题 resourceManager.setAppVersion("APP VERSION"); // 是否使用线上模型,无特殊需求设置为true resourceManager.setUseOnlineModel(true); // 初始化,传入context和模型下载根路径 resourceManager.initResourceManager(getApplicationContext(), "MODEL ROOT PATH");
检查模型文件是否存在,不论模型版本如何,只要模型文件存在且可用则返回成功。
ASR_MODEL_NAME 模型名称请从 发布信息 中获取。
SpeechResourceManager resourceManager = SpeechResourceManagerGenerator.getInstance(); if (resourceManager.checkResourceDownload(ASR_MODEL_NAME)) { Log.i("speechsdk", "模型文件存在"); }
检查模型文件是否有更新的版本,此方法需要使用网络。
ASR_MODEL_NAME 模型名称请从 发布信息 中获取。
SpeechResourceManager resourceManager = SpeechResourceManagerGenerator.getInstance(); resourceManager.checkResourceUpdate(ASR_MODEL_NAME, needUpdate -> { if (needUpdate) { Log.i("speechsdk", "模型文件需要更新"); } else { Log.i("speechsdk", "模型文件已为最新版本"); } });
下载/更新模型文件,此方法需要使用网络。
ASR_MODEL_NAME 模型名称请从 发布信息 中获取。
SpeechResourceManager resourceManager = SpeechResourceManagerGenerator.getInstance(); resourceManager.fetchResourceByName(ASR_MODEL_NAME, new SpeechResourceManager.FetchResourceListener() { @Override public void onSuccess() { Log.i("speechsdk", "模型文件下载完成"); } @Override public void onFailed(String errorMsg) { Log.i("speechsdk", "模型文件下载失败:" + errorMsg); } });
获取下载的模型文件路径。
此方法仅执行字符串拼接操作,不代表模型文件一定存在。
ASR_MODEL_NAME 模型名称请从 发布信息 中获取。
SpeechResourceManager resourceManager = SpeechResourceManagerGenerator.getInstance(); Log.i("speechsdk", "模型文件路径:" + resourceManager.getResourcePath(ASR_MODEL_NAME));