HarmonyOS开发笔记:Speech Kit在美颜相机中的语音交互实现

126 阅读2分钟

开发场景需求

在"拍摄美颜相机"应用中,Speech Kit 提供完整的语音交互解决方案,主要实现:

语音控制拍摄:通过口令触发拍照/录像等操作

语音参数调节:实时调整美颜强度等参数

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

 

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

// 语音指令识别

// 基础语音监听:

typescript

 

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

 

// 初始化语音识别器

const recognizer = speech.createRecognizer({

  mode: speech.RecognizerMode.KEYWORD_SPOT,   // 关键词识别模式

  keyword: ['拍照', '开始美颜', '切换滤镜']   // 自定义唤醒词

});

 

// 注册结果回调

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

  switch(text) {

    case '拍照':

      Camera.capture();

      break;

    case '开始美颜':

      this.enableBeautyMode();

      break;

  }

});

 

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

try {

  await recognizer.start();

} catch (err) {

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

}

// 离线指令集:

typescript

 

// 加载本地语音模型(减小网络依赖)

recognizer.loadModel(speech.ModelType.OFFLINE, '/models/voice_commands.model')

  .then(() => {

    recognizer.setKeywords(['保存照片', '分享到微信']);   // 扩展指令集

  });

 

// 语音参数调节

// 实时数值调整:

typescript

 

// 监听连续数值变化

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

  const match = text.match(/美颜强度(增加|减少)(\d+)%/);

  if (match) {

    const delta = match[1] === '增加' ? +match[2] : -match[2];

    this.adjustBeautyLevel(delta);

  }

});

 

// 示例语音:"美颜强度增加20%"

// 多语言支持:

typescript

 

// 根据系统语言切换识别模型

const lang = I18n.getSystemLanguage();

recognizer.setLanguage(lang === 'zh' ? 'zh-CN' : 'en-US');

 

// 语音反馈系统

// 操作结果播报:

typescript

 

const ttsEngine = speech.createTtsEngine({

  volume: 0.7,

  speed: 1.1

});

 

function onPhotoSaved() {

  ttsEngine.speak('照片已保存', {

    queueMode: speech.TtsQueueMode.ENQUEUE   // 加入播放队列

  });

}

// 无障碍增强:

typescript

 

// 为UI元素添加语音描述

Button('磨皮强度')

  .accessibilityDescription('磨皮强度调节滑块,当前值50%')

  .onClick(() => {

    ttsEngine.speak('已调整磨皮效果');

  });

 

// 关键优化策略

// 环境噪声处理

typescript

 

// 启用AI降噪

recognizer.setParams({

  noiseSuppression: speech.NoiseSuppression.AI,

  voiceDetectionSensitivity: 0.8   // 语音检测敏感度

});

 

// 低功耗模式

typescript

 

// 电量低于20%时降低识别频率

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

  recognizer.setInterval(2000);   // 2秒检测一次

});

 

// 隐私保护

typescript

 

// 敏感指令二次确认

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

  if (text.includes('删除照片')) {

    showConfirmationDialog('确定要删除吗?');

  }

});

 

// 权限动态申请

typescript

 

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

 

async function checkMicrophonePermission() {

  const atManager = abilityAccessCtrl.createAtManager();

  try {

    await atManager.requestPermissionsFromUser(

      ['ohos.permission.MICROPHONE']

    );

    return true;

  } catch {

    return false;

  }

}

 

// 唤醒词冲突处理

typescript

 

// 检查是否与其他应用冲突

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

  .then((conflict) => {

    if (conflict) this.setAlternativeWakeupWord();

  });

 

// 内存泄漏预防

typescript

 

aboutToDisappear() {

  recognizer.off('result');   // 注销监听

  ttsEngine.release();

}`