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

开发场景需求
在"拍摄美颜相机"应用中,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();
}
posted @ 2025-06-17 20:01  yimapingchuan  阅读(20)  评论(0)    收藏  举报