鸿蒙开发实录:Core Speech Kit在美颜相机中的语音交互实现

103 阅读2分钟

开发场景需求

在“拍摄美颜相机”应用中,Core Speech Kit 提供语音识别与合成能力,实现以下功能:

语音控制拍摄:通过口令(如“拍照”“开始美颜”)触发操作。

语音播报状态:完成拍摄后播报“照片已保存”。

无障碍支持:为视障用户提供语音引导。

  ` // 核心实现与代码示例

// 语音控制拍照

// 初始化语音识别:

typescript

 

import speech from '@ohos.multimedia.speech';  

 

// 初始化语音识别引擎

const recognizer = speech.createRecognizer({  

  mode: speech.RecognizerMode.FREE_FORM, // 自由格式识别

  language: 'zh-CN' // 中文普通话

});  

 

// 注册关键词监听

recognizer.on('result', (text: string) => {  

  if (text.includes('拍照')) {  

    Camera.takePhoto();  

  } else if (text.includes('切换滤镜')) {  

    this.nextFilter();  

  }  

});  

 

// 开始监听(需用户授权)

try {  

  await recognizer.start();  

} catch (err) {  

  console.error(语音识别失败: ${err.code});  

}  

// 权限声明(module.json5):

json

 

"requestPermissions": [  

  { "name": "ohos.permission.MICROPHONE" },  

  { "name": "ohos.permission.SPEECH_RECOGNITION" }  

]  

 

// 语音状态反馈

// 使用TTS播报结果:

typescript

 

const ttsEngine = speech.createTtsEngine({  

  volume: 0.8,   // 音量80%

  speed: 1.2     // 语速1.2倍

});  

 

// 照片保存后播报

function onPhotoSaved() {  

  ttsEngine.speak('照片已保存,您要分享吗?', {  

    queueMode: speech.TtsQueueMode.CLEAR // 打断当前播报

  });  

}  

// 支持多语言播报:

typescript

 

// 根据系统语言切换语音

const systemLang = I18n.getSystemLanguage();  

ttsEngine.setLanguage(systemLang === 'zh' ? 'zh-CN' : 'en-US');  

 

// 无障碍语音引导

// 描述UI元素:

typescript

 

Button('美颜强度调节')  

  .accessibilityDescription('双击可调整美颜强度,当前值50%')  

  .onClick(() => {  

     // 操作完成后语音反馈

    ttsEngine.speak('已调整到70%');  

  });  

// 监听系统无障碍事件:

typescript

 

accessibility.on('accessibilityStateChange', (enabled) => {  

  if (enabled) {  

     // 启用详细语音引导

    this.voiceGuidanceMode = true;  

  }  

});  

 

// 关键优化策略

// 离线语音支持

typescript

 

// 加载本地语音模型

recognizer.loadModel(speech.ModelType.WAKEUP, '/data/wakeup.model')  

  .then(() => {  

    recognizer.setWakeupWord(['嘿相机']); // 自定义唤醒词

  });  

 

// 降噪处理

typescript

 

// 启用AI降噪(需设备支持)

recognizer.setParams({  

  noiseSuppression: speech.NoiseSuppression.AI,  

  voiceDetection: true // 只响应人声

});  

 

// 低功耗模式

typescript

 

// 设备电量低于20%时降低识别精度

power.on('batteryLow', () => {  

  recognizer.setMode(speech.RecognizerMode.KEYWORD_SPOT); // 仅关键词唤醒

});  

 

// 权限动态申请

typescript

 

// 检查并请求麦克风权限

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';  

 

const atManager = abilityAccessCtrl.createAtManager();  

try {  

  await atManager.requestPermissionsFromUser(  

    ['ohos.permission.MICROPHONE']  

  );  

} catch (err) {  

  prompt.showToast({ message: '请开启麦克风权限' });  

}  

 

// 唤醒词冲突处理

typescript

 

// 检测是否与其他应用唤醒词冲突

recognizer.checkWakeupConflict(['嘿相机'])  

  .then((conflict) => {  

    if (conflict) {  

      this.setWakeupWord(['拍照啦']); // 替换冲突词

    }  

  });  

 

// 资源释放

typescript

 

aboutToDisappear() {  

  recognizer.destroy(); // 防止内存泄漏

  ttsEngine.off();  

}`