给 Android 设备加个语音唤醒词:100KB 模型常驻监听,不费电不联网

电子说

1.4w人已加入

描述

# 给 Android 设备加个语音唤醒词:100KB 模型常驻监听,不费电不联网

## 为什么不直接买块语音模组

做硬件的朋友可能会问:现在海凌科、机芯智能的离线语音模组几块钱一片,为什么还要在 Android 上跑软件方案?

有时候 Android 设备不归你选——客户的硬件已经定了,主控就是一块安卓板。额外挂个模组需要飞线、改 PCB、调 BOM,老板不一定批。或者你做的其实是手机 App,纯软件,根本没法加外设。

这种情况就需要一个纯软件方案:不用改硬件、不打板子、一个 APK 搞定。

## 关键词识别(KWS)和通用 ASR 的区别

| | 通用 ASR | KWS |
|---|---------|-----|
| 能做什么 | 听懂任何话 | 只识别预设的几个词 |
| 模型大小 | 50-200 MB | **100 KB** |
| 是否常驻 | 不敢,耗电 | 可以,功耗 < 1mW |
| 离线可用 | 部分支持 | 完全离线 |
| 典型场景 | 自由对话 | 唤醒词 + 命令词 |

做车载助手、点餐机、智能开关面板这类 Android 终端,最常见的需求是"唤醒词 + 几个命令词",不是"自由对话"。这种情况用 KWS 就够了。

## 方案:onnx-wakeword

[onnx-wakeword](https://github.com/voicute/onnx-wakeword) 是一个轻量 KWS 推理引擎,Apache 2.0 开源,专为这个场景做的。

特点:

- 纯 ONNX Runtime,无其他依赖
- Android AAR 直接集成
- 内置五层防误触发逻辑
- 支持同时跑多个关键词模型

## Android 集成步骤

### 1. 添加依赖

```groovy
dependencies {
    implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.18.0'
}

2. 准备模型

把 ONNX 模型放到 assets/ 下:

assets/
├── melspectrogram.onnx    # Mel 频谱提取(公共)
├── open_light.onnx        # "打开灯光"
├── close_light.onnx       # "关闭灯光"
└── model_info.json        # 模型配置

模型从哪来?自己用 OpenWakeWord 训,或者去 听词 在线生成——输入关键词,几分钟出 ONNX。

3. 初始化引擎

WakeWordEngine engine = new WakeWordEngine(context);
engine.load("model_info.json", "melspectrogram.onnx");

engine.setCallback(new WakeWordCallback() {
    @Override
    public void onDetection(String word, float confidence) {
        switch (word) {
            case "打开灯光": turnOnLight(); break;
            case "关闭灯光": turnOffLight(); break;
        }
    }
});

engine.start();

4. 五层防误触——不用你管

引擎内置了五层过滤,开发者不用自己写:

干嘛的举例
L1连续帧确认键盘"哒"一声不触发
L2峰值/背景比安静环境底噪不幻觉
L3冷却不会同一句话重复触发
L4爆发封锁扬声器回声不会回路触发
L5能量跳变背景音乐不误触

实测安静环境误触发 < 1 次/24h,带背景音乐 1-2 次/几小时。回调里直接写你的业务逻辑,不需要关心误触。

实测数据

小米 14(骁龙 8 Gen2),Android 14:

指标数值
模型大小~130KB
单帧推理< 5ms
后台 CPU 占用< 1%
内存~20MB(含 ORT 运行时)
安静环境误触发< 1 次/24h

低端机型(骁龙 660)推理耗时约 15-20ms,照样远低于实时。

总结

不需要改硬件、不需要开模、不需要挂外设。一个 APK 搞定离线语音唤醒。100KB 模型常驻监听,几乎不耗电。

开源推理引擎:[github.com/voicute/onnx-wakeword]

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分