语音识别:实时语音转文字服务(200) 在鸿蒙HarmonyOS应用开发中实时语音转文字服务是提升人机交互效率的核心能力。依托鸿蒙原生的 Core Speech Kit 以及机器学习服务开发者可以构建低延迟、高隐私、多场景的语音识别应用。一、 核心架构与识别模式鸿蒙的语音识别服务支持端侧与云侧协同满足不同业务场景的需求端侧离线识别基于系统内置的轻量化语音大模型无需联网即可在本地完成音频特征提取与模型推理。该模式隐私安全性高原始音频不上传服务器且响应延迟极低≤300ms非常适合免提操作和弱网环境。云端实时转写针对超长语音不超过5小时或复杂场景可通过访问云端接口完成识别。云端服务支持输出标点符号并能生成带有时间戳的文本信息广泛应用于会议记录和直播字幕等场景。// SpeechEngineManager.ets import { speechRecognizer } from kit.CoreSpeechKit; import { BusinessError } from kit.BasicServicesKit; export class SpeechEngineManager { private asrEngine: speechRecognizer.SpeechRecognitionEngine | undefined undefined; // 1. 端侧离线识别模式低延迟、高隐私 public async initOfflineEngine() { const extraParam: Recordstring, Object { locate: CN, recognizerMode: short // 短语音模式适合指令和短句 }; const initParams: speechRecognizer.CreateEngineParams { language: zh-CN, online: 0, // 核心0 表示纯离线模式 extraParams: extraParam }; await this.createAndSetEngine(initParams); } // 2. 云端实时转写模式高精度、长文本 public async initCloudEngine() { const extraParam: Recordstring, Object { locate: CN, recognizerMode: long // 长语音模式支持长达8小时 }; const initParams: speechRecognizer.CreateEngineParams { language: zh-CN, online: 1, // 核心1 表示在线模式 extraParams: extraParam }; await this.createAndSetEngine(initParams); } private async createAndSetEngine(params: speechRecognizer.CreateEngineParams) { speechRecognizer.createEngine(params, (err: BusinessError, engine: speechRecognizer.SpeechRecognitionEngine) { if (!err) { this.asrEngine engine; console.info(语音识别引擎创建成功); } else { console.error(引擎创建失败: Code${err.code}, Msg${err.message}); } }); } }二、 核心功能与交互能力自定义唤醒与免提交互支持开发者自定义唤醒词如“小鸿蒙”实现APP后台驻留监听。用户说出唤醒词后系统自动激活识别能力支持“打开首页”、“关闭灯光”等高频语音指令实现动口不动手的交互体验。多方言与多语种适配除了标准的中文普通话支持中英文混说系统还具备实用级的方言识别能力支持粤语、四川话、东北话等主流方言的实时语音转写。同时云端服务还支持英语、法语等多语种识别。智能声纹与摘要在录音转写场景中系统支持声纹识别能够自动区分不同发言人的内容并按顺序分段显示。结合AI能力还能对转写文本进行智能摘要自动提炼关键信息与待办事项。// AdvancedSpeechFeatures.ets import { speechRecognizer } from kit.CoreSpeechKit; export class AdvancedSpeechFeatures { private asrEngine: speechRecognizer.SpeechRecognitionEngine | undefined undefined; constructor(engine: speechRecognizer.SpeechRecognitionEngine) { this.asrEngine engine; } // 1. 自定义唤醒词与免提交互 public setupWakeupWord() { // 设置唤醒词如小鸿蒙 this.asrEngine?.setWakeupWord(小鸿蒙); // 启动后台唤醒监听 this.asrEngine?.startWakeup(); // 监听唤醒成功事件自动开启后续语音识别 this.asrEngine?.on(wakeup, () { console.info(唤醒成功开始听取指令); // 此处可触发UI动画并调用 startListening() }); } // 2. 多方言适配以粤语为例 public async initDialectEngine() { const extraParam: Recordstring, Object { locate: CN, dialect: cantonese, // 核心切换为粤语识别 recognizerMode: auto }; const initParams: speechRecognizer.CreateEngineParams { language: zh-CN, online: 0, extraParams: extraParam }; // 重新创建方言引擎 speechRecognizer.createEngine(initParams, (err, engine) { if (!err) { this.asrEngine engine; console.info(粤语识别引擎初始化成功); } }); } }三、 性能优化与工程实践环境与音频质量要求语音识别对音频质量要求较高。在嘈杂环境如菜市场、地铁中建议开启“嘈杂环境增强”开关以智能抑制背景噪声同时发言者应保持中等语速每分钟220–260字避免连续快读或刻意拉长尾音。状态与生命周期管理实时语音转写服务目前不支持息屏识别在调测和使用时必须保持设备屏幕常亮。此外对于长音频的连续识别建议按议题或时间进行分段处理以降低长时识别带来的错误累积率。自定义词库优化针对包含专有名词、行业术语或新词热梗的特定场景开发者可引导用户提前在“AI字幕词库管理”中添加自定义词条。系统在识别时将优先匹配该词汇从而显著降低误写率。四、 语音识别实战Core Speech Kit 引擎初始化与流式识别在鸿蒙 ArkTS 开发中实现实时语音转文字的核心是调用kit.CoreSpeechKit中的speechRecognizer模块。权限配置与运行时申请语音识别强依赖麦克风输入。必须在module.json5中声明ohos.permission.MICROPHONE权限并在代码中通过abilityAccessCtrl动态向用户申请确保应用具备录音能力。创建识别引擎与配置参数通过speechRecognizer.createEngine异步创建识别引擎。在CreateEngineParams中可配置language如zh-CN、online在线优先或纯离线模式以及recognizerMode短语音模式short或长语音模式long。流式数据写入与回调监听引擎创建成功后需注册回调监听器。通过onPartialResult获取实时的中间识别结果用于 UI 上的动态打字效果通过onResult获取最终的完整句子。同时需将麦克风采集到的 PCM 音频流通过recognizer.send(data)持续写入引擎。// VoiceRecognitionService.ets import { speechRecognizer } from kit.CoreSpeechKit; import { audio } from kit.MediaKit; export class VoiceRecognitionService { private asrEngine: speechRecognizer.SpeechRecognitionEngine | null null; private audioCapturer: audio.AudioCapturer | null null; // 1. 创建识别引擎与配置参数 public async initEngine() { const extraParam: Recordstring, Object { locate: CN, recognizerMode: short // 短语音模式 }; const initParams: speechRecognizer.CreateEngineParams { language: zh-CN, online: 1, // 在线优先 extraParams: extraParam }; this.asrEngine await speechRecognizer.createEngine(initParams); this.setupListener(); } // 2. 注册回调监听器 private setupListener() { const listener: speechRecognizer.RecognitionListener { onStart: (sessionId, eventMessage) console.log(识别开始), onResult: (sessionId, result) { console.log(最终结果: ${result.result}); }, onError: (sessionId, errorCode, errorMessage) { console.error(识别错误: ${errorCode}, ${errorMessage}); }, onComplete: (sessionId, eventMessage) console.log(识别完成) }; this.asrEngine?.setListener(listener); } // 3. 启动麦克风采集并流式写入引擎 public async startStreaming() { // 启动识别会话 this.asrEngine?.startListening({ sessionId: session_001 }); // 创建麦克风采集器 const audioStreamInfo: audio.AudioStreamInfo { samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_16000, channels: audio.AudioChannel.CHANNEL_1, sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16, encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW }; this.audioCapturer await audio.createAudioCapturer({ audioStreamInfo, capturerInfo: { source: audio.SourceType.SOURCE_TYPE_MIC, capturerFlags: 0 } }); await this.audioCapturer.start(); // 持续读取音频数据并写入引擎 this.audioCapturer.on(readData, (buffer: ArrayBuffer) { this.asrEngine?.writeAudio(session_001, new Uint8Array(buffer)); }); } }五、 进阶场景自定义唤醒词与低功耗后台监听针对智能家居或车载等需要“动口不动手”的场景鸿蒙提供了基于端侧小模型的免提交互方案。自定义唤醒词配置在初始化语音引擎时通过extraParams传入自定义的唤醒词字符串及对应的置信度阈值。系统底层会分配极低功耗的 DSP 核心进行持续监听而不占用主 CPU 资源。智能休眠与低功耗策略为避免后台监听导致设备快速耗电系统内置了智能休眠策略。当环境处于静止且无语音震动时自动进入低功耗监听模式一旦检测到有效的人声特征毫秒级唤醒主识别引擎实现无感交互。唤醒事件分发当用户说出唤醒词后系统会触发onWakeUp回调。应用层可在此回调中执行 UI 提示如显示波纹动画并开启后续的指令识别或长语音转写会话。// WakeupManager.ets import { speechRecognizer } from kit.CoreSpeechKit; export class WakeupManager { private asrEngine: speechRecognizer.SpeechRecognitionEngine | null null; // 1. 配置自定义唤醒词并启动后台监听 public async startWakeupListening(wakeupWord: string) { const extraParam: Recordstring, Object { wakeupWord: wakeupWord, confidenceThreshold: 0.8 // 置信度阈值 }; this.asrEngine await speechRecognizer.createEngine({ language: zh-CN, online: 0, extraParams: extraParam }); // 监听唤醒事件 this.asrEngine.setListener({ onWakeup: (sessionId, eventMessage) { console.log(检测到唤醒词: ${wakeupWord}); // TODO: 触发 UI 波纹动画并开启后续指令识别 }, onError: (sessionId, code, msg) console.error(唤醒监听异常:, code, msg) } as any); // 注具体接口依最新 SDK 为准 // 启动后台唤醒监听 this.asrEngine.startWakeup(); } }在实际落地语音识别功能时需特别注意以下工程规范与硬件限制低配置穿戴设备的内存管理在智能手表等内存受限的设备上长语音识别易出现卡顿或 OOM内存溢出。必须采用“动态分片推理 内存复用机制”自动截断超长音频并实时释放推理缓存以适配低算力终端。复杂环境下的降噪增强在户外或嘈杂环境中人声识别准确率会显著下降。建议在配置中显式开启noiseSuppression true启用系统原生的 AI 降噪算法结合场景词库加权优化可将复杂环境下的识别精度提升 15% 以上。严格的引擎生命周期释放语音识别引擎SpeechRecognitionEngine属于重量级资源。在页面销毁aboutToDisappear或识别任务结束时必须严格调用engine.release()释放底层 NPU 和麦克风占用防止应用切后台后出现内存泄漏或麦克风被持续占用的异常。// AsrSafetyManager.ets import { speechRecognizer } from kit.CoreSpeechKit; export class AsrSafetyManager { // 1. 复杂环境下的降噪增强配置 public static getNoiseSuppressionParams(): Recordstring, Object { return { noiseSuppression: true, // 显式开启 AI 降噪 vadBegin: 2000, // 语音活动检测起点 vadEnd: 3000 // 语音活动检测终点 }; } // 2. 严格的引擎生命周期释放防止内存泄漏与麦克风占用 public static async safeReleaseEngine(engine: speechRecognizer.SpeechRecognitionEngine | null) { if (engine) { try { await engine.finish(session_001); // 结束当前会话 await engine.shutdown(); // 彻底释放引擎资源 console.info(ASR 引擎资源已安全释放); } catch (err) { console.error(ASR 引擎释放失败:, err); } } } }