HarmonyOS开发:使用语音识别的步骤演示

引言

在当下的生活与工作场景中,语音识别技术早已渗透到方方面面 —— 从手机上的语音助手快速拨打电话、发送消息,到智能音箱根据语音指令播放音乐、查询天气,再到办公场景里通过语音转文字功能高效记录会议纪要,其应用的广泛性不言而喻。而 HarmonyOS 在语音识别领域展现出了强大的技术实力,为用户带来了全方位的支持。它不仅能够精准识别普通话,满足大多数用户的日常需求,还兼容多种方言以及外语,极大地拓宽了使用范围,让不同语言背景的用户都能便捷使用。更为关键的是,它具备出色的离线识别能力,这意味着即便处于没有网络覆盖的环境,比如偏远地区、地下车库等,用户依然可以顺利实现语音识别,避免了因网络问题导致的功能失效。凭借着高准确性的识别结果和快速的响应速度,HarmonyOS 中的语音识别技术无疑会为用户的生活和工作增添诸多便利,显著提升整体效率。基于此,本文将深入剖析在 HarmonyOS 应用中实现语音识别功能的具体方法,涵盖技术选型的考量、详细的实现步骤以及实用的代码示例,助力开发者更好地掌握这一功能的开发要点。

语音识别技术简介

语音识别技术,也称为自动语音识别(Automatic Speech Recognition, ASR),是指将用户的语音输入转换为文本信息的过程。在HarmonyOS中,可以通过集成华为机器学习服务(HMS Machine Learning Service)中的语音识别服务来实现这一功能。将一段音频信息(短语音模式不超过60s,长语音模式不超过8h)转换为文本,音频信息可以为pcm音频文件或者实时语音。

关于语音识别

在HarmonyOS中,语音识别有以下步骤:
1.权限申请:在应用的配置文件中添加必要的权限。
2.集成语音识别服务:使用系统提供的API集成语音识别服务。
3.配置识别参数:设置识别的语言、场景等参数。
4.启动和停止识别:根据用户的操作启动和停止语音识别。
5.处理识别结果:将识别的文本信息进行后续处理。

实现语音识别

1.引入类

首先,在使用语音识别时,将实现语音识别相关的类添加至工程,具体如下所示:

import { speechRecognizer } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';

2.初始化

然后调用createEngine方法,对引擎进行初始化,并创建SpeechRecognitionEngine实例。createEngine方法提供了两种调用形式,当前以其中一种作为示例,具体操作如下所示:

import { speechRecognizer } from '@kit.CoreSpeechKit';
import { BusinessError } from '@kit.BasicServicesKit';

3.实例化对象

接着在得到SpeechRecognitionEngine实例对象后,实例化RecognitionListener对象,调用setListener方法设置回调,用来接收语音识别相关的回调信息,具体操作如下所示:

let setListener: speechRecognizer.RecognitionListener = {
  // 开始识别成功回调
  onStart(sessionId: string, eventMessage: string) {
  },
  // 事件回调
  onEvent(sessionId: string, eventCode: number, eventMessage: string) {
  },
  // 识别结果回调,包括中间结果和最终结果
  onResult(sessionId: string, result: speechRecognizer.SpeechRecognitionResult) {
  },
  // 识别完成回调
  onComplete(sessionId: string, eventMessage: string) {
  },
  // 错误回调,错误码通过本方法返回,返回错误码1002200002,开始识别失败,重复启动startListening方法时触发
  onError(sessionId: string, errorCode: number, errorMessage: string) {
  },
}
// 设置回调
asrEngine.setListener(setListener);// 创建回调对象
let setListener: speechRecognizer.RecognitionListener = {
  // 开始识别成功回调
  onStart(sessionId: string, eventMessage: string) {

  },
  // 事件回调
  onEvent(sessionId: string, eventCode: number, eventMessage: string) {

  },
  // 识别结果回调,包括中间结果和最终结果
  onResult(sessionId: string, result: speechRecognizer.SpeechRecognitionResult) {

  },
  // 识别完成回调
  onComplete(sessionId: string, eventMessage: string) {

  },
  // 错误回调,错误码通过本方法返回,返回错误码1002200002,开始识别失败,重复启动startListening方法时触发

  onError(sessionId: string, errorCode: number, errorMessage: string) {

  },
}
// 设置回调
asrEngine.setListener(setListener);

4.设置参数

接着分别为音频文件转文字和麦克风转文字功能设置开始识别的相关参数,调用startListening方法,开始合成,具体操作如下所示:

// 开始识别
private startListeningForWriteAudio() {
  // 设置开始识别的相关参数
  let recognizerParams: speechRecognizer.StartParams = {
    sessionId: this.sessionId,
    audioInfo: { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 } //audioInfo参数配置请参考AudioInfo
  }
  // 调用开始识别方法
  asrEngine.startListening(recognizerParams);
};

private startListeningForRecording() {
  let audioParam: speechRecognizer.AudioInfo = { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 }
  let extraParam: Record = {
    "recognitionMode": 0,
    "vadBegin": 2000,
    "vadEnd": 3000,
    "maxAudioDuration": 20000
  }
  let recognizerParams: speechRecognizer.StartParams = {
    sessionId: this.sessionId,
    audioInfo: audioParam,
    extraParams: extraParam
  }
  asrEngine.startListening(recognizerParams);
};

5.写入音频流

传入音频流,调用writeAudio方法,开始写入音频流。读取音频文件时,开发者需预先准备一个pcm格式音频文件,具体操作如下所示:

let uint8Array: Uint8Array = new Uint8Array();
// 可以通过如下方式获取音频流:1、通过录音获取音频流;2、从音频文件中读取音频流。写入音频流,音频流长度仅支持640或1280
asrEngine.writeAudio(sessionId, uint8Array);

6.查询语言语种(可选)

当需要查询语音识别服务支持的语种信息,可调用。listLanguages方法。listLanguages方法提供了两种调用形式,当前以其中一种作为示例,具体操作如下所示:

// 设置查询相关的参数
let languageQuery: speechRecognizer.LanguageQuery = {
  sessionId: sessionId
};
// 调用listLanguages方法
asrEngine.listLanguages(languageQuery).then((res: Array) => {

}).catch((err: BusinessError) => {

});

7.结束识别(可选)

接着是当需要结束识别时,可调用finish方法,具体操作如下:

// 结束识别
asrEngine.finish(sessionId);

8.取消识别(可选)
当需要取消识别时,可调用cancel方法,具体如下所示:

// 取消识别
asrEngine.cancel(sessionId);

9.释放资源(可选)

当需要释放语音识别引擎资源时,可调用shutdown方法,具体操作如下所示:

// 释放识别引擎资源
asrEngine.shutdown();

10.配置权限

需要在module.json5配置文件中添加ohos.permission.MICROPHONE权限,确保麦克风使用正常,具体操作如下所示:

//...
"requestPermissions": [
  {
    "name" : "ohos.permission.MICROPHONE",
    "reason": "$string:reason",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when":"inuse"
    }
  }
],
//...

自定义语音识别

除了上面基本的语音识别功能,开发者还可以根据应用的需求自定义语音识别行为,比如:
实时转写:在语音输入时实时显示识别结果。
命令识别:识别特定的语音命令并触发相应的操作。

最后

通过前面关于语音识别技术的详细分享,相信大家已经对这项技术的真实能力与应用价值有了清晰且全面的认识。它绝非停留在概念层面的噱头,而是实实在在推动设备智能化升级的核心动力 —— 从让智能终端听懂人类语言,到根据指令自主完成复杂操作,语音识别技术正在不断打破人与设备之间的交互壁垒,让每一次指令传递都更加自然流畅。这种技术突破不仅显著提升了设备的智能化水平,更从根本上优化了用户的使用体验,让我们在与科技产品打交道时,少了几分操作的繁琐,多了几分如同与 “智能伙伴” 对话般的轻松惬意。

经过本文对 HarmonyOS 应用中语音识别功能实现方法的系统介绍,从技术选型的权衡到具体步骤的拆解,再到代码示例的演示,相信各位开发者已经能够清晰掌握在实际项目中落地这项功能的关键要点。更重要的是,这些知识能够转化为实际开发中的行动力,帮助大家在面对不同场景需求时,灵活调整技术方案,让语音识别功能更好地服务于应用的核心目标,真正做到学以致用。

从行业发展的视角来看,随着人工智能与物联网技术的持续迭代,语音识别作为人机交互的核心入口,在 HarmonyOS 全场景生态中的战略地位将愈发凸显。它会深度融入智能家居、智能办公、车载系统等更多场景,通过与其他技术的协同创新,为用户带来更丰富、更便捷、更个性化的服务体验 —— 比如跨设备的语音指令联动、基于上下文的智能语义理解等。在此也衷心期待,各位开发者能在鸿蒙原生开发的浪潮中,充分挖掘语音识别技术的潜力,将其与自身应用场景深度结合,共同推动 HarmonyOS 生态的繁荣发展,让更多用户感受到科技进步带来的美好生活。

你可能感兴趣的:(HarmonyOS开发:使用语音识别的步骤演示)