uniapp集成百度语音识别与指令匹配全流程指南

uniapp集成百度语音识别与指令匹配全流程指南

一、技术选型与前期准备

在uniapp中实现语音识别与指令匹配功能,需完成三方面准备:百度语音识别API接入uniapp权限配置指令匹配逻辑设计

1. 百度语音识别API接入

百度语音识别提供短语音识别(实时性高)与长语音识别(支持大文件)两种模式。开发前需完成以下步骤:

  • 注册百度AI开放平台账号,创建语音识别应用,获取API KeySecret Key
  • 选择识别模式:短语音识别适合指令场景(如”打开灯光”),长语音识别适合会议记录等场景。
  • 服务端签名生成:为保障安全性,需通过后端服务生成access_token(示例Node.js代码):
    ```javascript
    const crypto = require(‘crypto’);
    const axios = require(‘axios’);

async function getAccessToken(apiKey, secretKey) {
const auth = ${apiKey}:${secretKey};
const encodedAuth = Buffer.from(auth).toString(‘base64’);
const response = await axios.get(‘https://aip.baidubce.com/oauth/2.0/token‘, {
params: {
grant_type: ‘client_credentials’,
client_id: apiKey,
client_secret: secretKey
}
});
return response.data.access_token;
}

  1. ### 2. uniapp权限配置
  2. - **Android权限**:在`manifest.json`中添加录音权限:
  3. ```json
  4. "permission": {
  5. "android.permission.RECORD_AUDIO": {
  6. "description": "需要录音权限以实现语音识别"
  7. }
  8. }
  • iOS权限:在Info.plist中添加NSMicrophoneUsageDescription字段,说明录音用途。

二、语音识别核心实现

1. 录音与音频处理

使用uniapp的recorderManager实现录音功能,需注意以下要点:

  • 采样率设置:百度语音识别支持16kHz或8kHz采样率,推荐16kHz以提升识别准确率。
  • 音频格式转换:若设备录音为PCM格式,需转换为WAV或AMR格式(百度API支持格式)。
  • 录音时长控制:短语音识别建议限制在60秒内,避免超时。

示例录音代码:

  1. const recorderManager = uni.getRecorderManager();
  2. recorderManager.onStart(() => {
  3. console.log('录音开始');
  4. });
  5. recorderManager.onStop((res) => {
  6. const tempFilePath = res.tempFilePath;
  7. // 调用语音识别API
  8. recognizeSpeech(tempFilePath);
  9. });
  10. function startRecording() {
  11. recorderManager.start({
  12. format: 'wav',
  13. sampleRate: 16000,
  14. numberOfChannels: 1
  15. });
  16. }

2. 百度语音识别API调用

通过uni.uploadFile将音频文件上传至百度API,关键参数说明:

  • dev_pid:识别模型ID(1537对应普通话输入法模型)。
  • speech:音频文件二进制数据。
  • token:通过服务端获取的access_token

示例调用代码:

  1. async function recognizeSpeech(filePath) {
  2. const accessToken = await getAccessTokenFromServer(); // 从服务端获取token
  3. const uploadTask = uni.uploadFile({
  4. url: `https://vop.baidu.com/server_api?dev_pid=1537&token=${accessToken}`,
  5. filePath: filePath,
  6. name: 'speech',
  7. success: (res) => {
  8. const result = JSON.parse(res.data);
  9. handleRecognitionResult(result.result);
  10. },
  11. fail: (err) => {
  12. console.error('识别失败:', err);
  13. }
  14. });
  15. }

三、指令匹配与后续操作

1. 指令解析逻辑

识别结果为文本字符串,需通过以下步骤解析:

  • 分词处理:使用简单正则或NLP库(如jieba分词)提取关键词。
  • 意图识别:通过关键词匹配或语义分析确定用户意图。
  • 参数提取:从文本中提取操作参数(如”调暗灯光至50%”中的”50%”)。

示例指令匹配代码:

  1. const COMMAND_MAP = {
  2. '打开灯光': { action: 'turnOnLight', params: {} },
  3. '调暗灯光至(\\d+)%': {
  4. action: 'adjustLight',
  5. params: { brightness: (match) => parseInt(match[1]) }
  6. }
  7. };
  8. function handleRecognitionResult(text) {
  9. for (const [pattern, command] of Object.entries(COMMAND_MAP)) {
  10. const regex = typeof pattern === 'string' ?
  11. new RegExp(`^${pattern}$`) : pattern;
  12. const match = text.match(regex);
  13. if (match) {
  14. executeCommand(command.action, command.params(match));
  15. return;
  16. }
  17. }
  18. uni.showToast({ title: '未识别指令', icon: 'none' });
  19. }

2. 后续操作执行

根据匹配结果调用uniapp API或原生插件执行操作:

  • 设备控制:通过蓝牙/Wi-Fi模块发送指令(如调光、开关)。
  • 页面跳转:使用uni.navigateTo跳转至指定页面。
  • 数据查询:调用后端API获取数据并更新UI。

示例操作执行代码:

  1. function executeCommand(action, params) {
  2. switch (action) {
  3. case 'turnOnLight':
  4. uni.sendNativeEvent({ type: 'controlLight', value: true });
  5. break;
  6. case 'adjustLight':
  7. uni.sendNativeEvent({
  8. type: 'setLightBrightness',
  9. value: params.brightness
  10. });
  11. break;
  12. default:
  13. console.warn('未知指令:', action);
  14. }
  15. }

四、优化与异常处理

1. 性能优化

  • 音频压缩:使用WebAudio API或第三方库压缩音频,减少上传时间。
  • 本地缓存:缓存access_token(有效期30天),避免频繁请求。
  • 离线指令:支持基础指令的本地识别,提升无网环境体验。

2. 异常处理

  • 网络错误:重试机制+用户提示(如”网络不佳,请重试”)。
  • 识别失败:返回错误码(如100对应”音频过长”),引导用户重新录音。
  • 安全限制:敏感操作需二次确认(如删除数据)。

五、完整流程示例

  1. 用户点击”语音指令”按钮,触发startRecording()
  2. 录音6秒后自动停止,调用recognizeSpeech()上传音频。
  3. 百度API返回识别结果:”调暗灯光至50%”。
  4. handleRecognitionResult()匹配到指令,调用executeCommand()
  5. 通过原生插件将亮度值50%发送至智能设备。
  6. 设备响应后,uniapp显示操作成功提示。

六、总结与扩展

本方案实现了uniapp中语音识别到指令执行的全流程,核心价值在于:

  • 低门槛集成:通过Web API快速接入百度语音能力。
  • 灵活扩展:指令匹配逻辑可自定义,适应不同业务场景。
  • 跨平台支持:一套代码兼容Android/iOS/小程序。

未来可扩展方向:

  • 多语言支持:接入百度多语言识别模型。
  • 上下文管理:支持多轮对话(如”调暗后打开空调”)。
  • 声纹识别:结合用户声纹实现个性化指令。

通过以上步骤,开发者可在uniapp中高效实现语音交互功能,为用户提供更自然的操作体验。