Android 离线语音控制实战:不用云 ASR 识别固定命令

2026 年 8 月 · Android 8+ · ONNX Runtime · KWS

如果 App 只需识别“拍照、停止、下一页、返回”等固定命令,可以在手机本地运行多关键词模型,检测后直接调用 UI 方法,无需上传音频或生成完整转录。

准备模型和工程

先生成包含目标命令的 ONNX 多关键词模型,再打开开源仓库的 android/ Android Studio Demo。工程已经包含麦克风采集、Mel 特征、ONNX 推理和检测后处理。

git clone https://github.com/voicute/onnx-wakeword.git
# 用 Android Studio 打开 android/

把命令映射为 UI 动作

private void handleCommand(String word) {
    switch (word) {
        case "拍照": capturePhoto(); break;
        case "下一页": showNextPage(); break;
        case "返回": onBackPressed(); break;
        case "停止": stopCurrentAction(); break;
    }
}

推理线程检测到关键词后,应切换到主线程更新界面。识别词表与业务权限应分离:删除、支付、解锁等动作不能因为一次语音检测直接执行。

权限和生命周期

调试顺序

  1. 确认模型和配置文件成功加载。
  2. 确认音频为 16 kHz、16-bit、单声道且不是全零。
  3. 先观察目标词和安静环境的原始分数。
  4. 再调整连续帧、阈值、冷却和能量过滤。
  5. 最后用相似词、电视声和不同说话人做回归测试。
当前实现边界:开源 Android Demo 使用 ONNX Runtime。平台可以导出 TFLite,但仓库目前没有完整的 Android TFLite SDK,不应混为一谈。
生成 Android 多命令词模型