从 Core Speech Kit 看端侧离线语音识别
Harmony Intelligence AI 开放能力第五期聚焦 Core Speech Kit 的语音识别。上一期拆解的是 Core Vision Kit 通用文字识别;这一期的重点是把中文音频转成文本,并且整套识别流程在端侧闭环完成,不依赖云侧算力。无网、弱网、飞行模式下,长短语音识别都可以稳定生效。
能力规格方面,语音识别面向开发者提供标准化音频转文本服务:支持中文普通话,也覆盖中文语境下的英文;模型形态为离线;适配 Phone、Tablet、PC/2in1;短语音模式不超过 60s,长语音模式不超过 8h;输入可以是 PCM 音频文件,也可以是实时语音。热词支持系统热词和会话热词双配置,热词总数不超过 200,两类共享总配额,每个热词长度范围为[2,20]。
端侧还是云侧:先看断网与数据边界
原文给了一个很明确的选型标准:端侧与云侧语音识别不存在技术优劣,区别在业务场景。若业务要求“断网可用、数据不脱离设备”,优先端侧;若更看重多语种、超高精度识别,则云侧更合适。端侧识别全流程本地运算,原始音频与识别结果不上传服务器,适合隐私敏感、网络不稳定场景;云侧依托远端算力,适合多语种、超高精度需求。这个判断可以直接落到架构取舍:会议记录、现场访谈、无障碍字幕、离线指令等场景,端侧闭环更稳;多语种客服、大规模转写等场景则要评估云侧。
三大核心能力与开发关键点
1. 本地离线识别。设备侧预置专属离线模型,音频解析、识别推理、文本转换全流程本地完成,不依赖网络。
2. 双音频输入适配。同时支持麦克风实时语音和标准 PCM 音频文件。PCM 音频需满足 16000Hz 采样率、单声道、16bit 位深。配合短语音(≤60s)和长语音(≤8h)两种模式,覆盖实时交互与长时音频归档转写。
3. 两层热词修正专有词。系统热词 sysGeneralLexicon 在创建引擎时配置,对整个应用的识别过程生效;会话热词 sessionGeneralLexicon 在开始识别时配置,优先级更高,单次会话生效。热词只优化专有词汇识别精度,不能抵消环境噪声干扰,嘈杂场景建议前置收音降噪。
典型落地场景
日常工作场景中,可以离线转写会议、访谈和现场沟通内容,也可以通过语音填表完成“语音→文本→提取字段→自动填写表单”,或者语音搜索本地内容。无障碍与实时字幕场景中,无网环境下把音频实时转成文字,结合 AI 字幕能力生成实时字幕,既服务听障用户,也适合不便外放音频的场景。离线记录与口述场景中,既支持麦克风实时收音,也支持本地 PCM 音频文件识别,可用于会议录音、口述笔记、长时音频素材留存;搭配实体抽取能力,还能识别语音里的时间、地点等关键信息,用于生成日历待办或结构化整理会议要点。无网语音指令交互则可用于地下室、机舱、野外等断网环境,解析本地语音指令,扩展终端离线操控。社交场景中,可用于聊天、客服售后语音录入;出境出行、少数民族地区交流时,可结合翻译软件完成语音转当地文字。
最小接入示例:创建引擎、设置回调、开始识别
通过 @kit.CoreSpeechKit 导入 speechRecognizer,核心分三步:创建引擎、设置结果回调、开始识别。下面代码保留原文最小接入示意:- import { speechRecognizer } from '@kit.CoreSpeechKit';
- import { BusinessError } from '@kit.BasicServicesKit';
- // 1. 创建离线引擎:online=1 表示离线,recognizerMode 选 short 或 long
- const initParams: speechRecognizer.CreateEngineParams = {
- language: 'zh-CN',
- online: 1,
- extraParams: {
- locate: 'CN',
- recognizerMode: 'short',
- sysGeneralLexicon: ['鸿蒙', '方舟'] // 系统热词,可选,整个应用生命周期生效
- }
- };
- speechRecognizer.createEngine(initParams, (err: BusinessError, engine: speechRecognizer.SpeechRecognitionEngine) => {
- if (err) {
- // 创建失败,常见错误码见文末 FAQ,如 1002200001 表示引擎创建失败
- return;
- }
- // 2. 设置回调,onResult 里取识别文本
- engine.setListener({
- onStart: () => {},
- onEvent: () => {},
- onResult: (_sessionId: string, result: speechRecognizer.SpeechRecognitionResult) => {
- console.info(`识别结果:${result.result}`);
- },
- onComplete: () => {},
- onError: (_sessionId: string, code: number, message: string) => {
- console.error(`识别出错:${code} ${message}`);
- }
- });
- // 3. 开始识别:recognitionMode 0 为麦克风,1 为写入 PCM 音频流
- engine.startListening({
- sessionId: 'demo-session',
- audioInfo: {
- audioType: 'pcm',
- sampleRate: 16000,
- soundChannel: 1,
- sampleBit: 16
- },
- extraParams: {
- recognitionMode: 0,
- maxAudioDuration: 20000,
- sessionGeneralLexicon: ['张三'] // 会话热词,优先级高于系统热词
- }
- });
- });
复制代码 麦克风识别时 recognitionMode 设为 0;转写 PCM 文件时设为 1,并通过 writeAudio 按 640 或 1280 字节分片写入,分别对应 20ms 或 40ms 间隔。长语音需要把 recognizerMode 改为 long,并通过 finish 主动终止会话。单次写入字节数必须严格匹配规范,writeAudio 单次传入音频数据仅允许 640 字节或 1280 字节,分片间隔必须匹配。这里也体现了端侧语音识别接入的两个排障重点:一是引擎创建失败时先看错误码,例如 1002200001 表示引擎创建失败;二是 PCM 写入分片不符合规范时,识别链路容易异常。
性能、隐私与工程取舍
相较于传统云侧语音识别,端侧离线识别主要解决三类问题:网络依赖、数据泄露和交互滞后。隐私上,语音采集、音频解析、文本转换全流程在设备本地完成,原始音频数据、识别结果均不上传云侧服务器,数据不出设备,适配高敏感语音场景的合规需求。时延上,端侧不走“上传—推理—回传”的长链路,依托本地算力实时推理,可实现毫秒级识别输出,规避网络波动造成的字幕卡顿和转写滞后。开发接入上,开发者无需自研底层声学模型,直接调用系统级 API 即可构建离线语音识别能力,缩短开发周期,降低研发与运维成本。
对开发者而言,这套能力的价值是开箱即用、多终端稳健兼容和云侧资源减负。系统模型经过多终端、多业务场景打磨,一次开发、多端部署,落地兼容性更强;识别运算全部本地化,不占用云侧带宽与算力资源,能降低服务器运维压力与长期运营成本。对消费者而言,极速响应、无网场景覆盖和本地隐私闭环是直接体验收益:实时字幕、边说边转、语音指令响应更自然,飞行模式、地下室、偏远地区也能使用。
接入检查清单
最后把开发要点收束成一份检查清单:确认语种和音频输入类型;创建引擎时决定 short 还是 long;PCM 文件必须 16000Hz、单声道、16bit;麦克风识别 recognitionMode 用 0,PCM 写入用 1;writeAudio 只按 640 或 1280 字节分片,并匹配 20ms 或 40ms 间隔;长语音结束用 finish;专有词先用系统热词和会话热词双配置,注意两类热词总数不超过 200、单个长度 2 到 20;噪声环境不要只依赖热词,先做前置降噪;多端适配优先参考官方开发指南、API 参考、FAQ 和在线课堂中的完整工程。 |