手机听懂你说话,到底经历了什么?——鸿蒙端侧语音识别链路全解析【华为根技术】
手机听懂你说话,到底经历了什么?——鸿蒙端侧语音识别链路全解析
作者:Echo_Wish
一、引子:为什么手机能“听懂你说话”?
很多人每天都在用语音助手,比如:
- “小艺小艺,今天天气怎么样?”
- “帮我发一条微信。”
- “导航到公司。”
说出来可能你不信,很多人一直以为这背后一定是:
手机录音 → 发到云端 → 云端AI识别 → 返回结果
但在鸿蒙生态里,越来越多语音能力其实是:
端侧完成的。
也就是说:
声音 → 手机 → 识别 → 文本
整个过程甚至不需要网络。
这件事其实很重要,因为它意味着:
- 更低延迟
- 更高隐私
- 更低功耗
- 更稳定体验
今天咱就从工程角度,拆一拆:
鸿蒙端侧语音识别到底经历了什么链路。
我尽量用工程师能听懂的话讲清楚。
二、原理讲解:语音识别链路其实就四步
很多人觉得语音识别特别神秘,其实工程上可以拆成四步。
核心链路其实是:
麦克风采集
↓
音频预处理
↓
声学模型识别
↓
语言模型纠错
↓
输出文本
我们一个一个拆。
1 麦克风采集(Audio Capture)
第一步其实最简单:
手机先把声音变成数字信号。
声音本质是波形。
手机会采样:
采样率:16kHz
位深:16bit
换句话说:
每秒16000个采样点
在鸿蒙里通常使用:
AudioCapturer API
2 音频预处理
真实环境里的声音其实很脏:
- 背景噪音
- 回声
- 风声
- 键盘声
所以要先做几件事:
降噪 (Noise Reduction)
回声消除 (AEC)
端点检测 (VAD)
尤其是 VAD(Voice Activity Detection)。
它的作用是:
判断用户什么时候开始说话、什么时候停止。
否则系统会一直录音。
3 声学模型(Acoustic Model)
接下来才是真正的 AI。
声学模型做的事情很简单:
声音 → 拼音/音素
比如:
ni hao
但这里有一个问题:
同样一句话,每个人说的声音都不一样。
所以声学模型通常是:
CNN + RNN
或者
Transformer
在端侧一般是 轻量模型。
原因很现实:
手机算力有限。
4 语言模型(Language Model)
声学模型识别出来的可能是:
ni hao ma
但中文真正要输出的是:
你好吗
这个时候就需要 语言模型。
语言模型的作用:
拼音 → 最可能的中文句子
比如:
wo xiang mai yi zhang piao
可能是:
我想买一张票
而不是:
我想卖一张票
这一步其实就是:
概率最大化。
三、实战代码:鸿蒙语音识别 Demo
下面我们写一个最简单的 HarmonyOS 语音识别 Demo。
核心使用:
SpeechRecognizer API
先初始化识别器。
import speechRecognizer from '@ohos.ai.speechRecognizer';
let recognizer = speechRecognizer.createRecognizer();
配置识别参数:
let config = {
language: "zh-CN",
sampleRate: 16000,
resultMode: "partial"
};
开始识别:
recognizer.start(config);
监听识别结果:
recognizer.on('result', (result) => {
console.info("识别结果: " + result.text);
});
停止识别:
recognizer.stop();
完整逻辑其实就是:
用户说话
↓
麦克风采集
↓
端侧识别
↓
回调结果
一个最简单的语音助手 Demo 就出来了。
四、一个真实应用场景
很多人觉得语音识别只用于语音助手。
其实不是。
我最近见过一个特别有意思的鸿蒙应用:
会议记录助手。
流程是这样的:
会议声音
↓
端侧语音识别
↓
实时转文字
↓
自动生成会议纪要
整个链路:
麦克风
↓
端侧ASR
↓
文本
↓
端侧大模型总结
好处非常明显:
- 不上传会议内容
- 实时生成纪要
- 延迟极低
很多企业其实非常喜欢这种方案。
因为:
数据完全不出设备。
五、Echo_Wish式思考:未来语音 AI 的方向
做了这么多年技术,我越来越觉得:
未来 AI 有两个方向。
一个是云端大模型。
比如:
- GPT
- 通义
- 文心
负责:
复杂推理
复杂生成
另一个其实就是:
端侧 AI。
负责:
语音识别
图像识别
简单推理
原因很简单:
云端 AI 有三个天然问题:
延迟
隐私
成本
而端侧 AI 正好解决这些问题。
鸿蒙现在在做的一件很重要的事情其实是:
把 AI 变成系统能力。
就像当年的:
GPS
摄像头
蓝牙
开发者不需要自己写一套语音识别。
直接调用系统能力:
SpeechRecognizer.start()
就能获得 AI 能力。
这其实是一个很大的变化。
以前:
AI = 一套复杂系统
未来:
AI = 系统API
当 AI 真正变成操作系统能力的时候,开发者才会真正用起来。
而鸿蒙端侧语音识别,其实就是这个方向的一个缩影。
- 点赞
- 收藏
- 关注作者
评论(0)