目录

  • 前言
  • 语音识别技术概述
  • 关于语音识别
  • 使用场景
  • 实现语音识别
  • 自定义语音识别
  • 结束语

前言

在智能设备普及的今天,语音识别技术已成为提升用户体验的关键功能之一,也是现代移动应用开发的必备功能,而HarmonyOS作为新一代的智能终端操作系统,提供了强大的语音识别能力,允许开发者轻松集成语音识别功能到自己的应用中。那么本文就来详细介绍如何在HarmonyOS应用中实现语音识别功能,包括技术选型、实现步骤和代码示例。

语音识别技术概述

先来介绍语音识别技术,也称为自动语音识别(Automatic Speech Recognition, ASR),是指将用户的语音输入转换为文本信息的过程。在HarmonyOS中,可以通过集成华为机器学习服务(HMS Machine Learning Service)中的语音识别服务来实现这一功能。

关于语音识别

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

使用场景

再来分享一下语音识别的使用场景,也就是将一段音频信息(短语音模式不超过60s,长语音模式不超过8h)转换为文本,音频信息可以为pcm音频文件或者实时语音。

实现语音识别

步骤1:引入类
在使用语音识别时,将实现语音识别相关的类添加至工程,具体操作如下所示:

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

步骤2:初始化

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

let asrEngine: speechRecognizer.SpeechRecognitionEngine;
let sessionId: string = '123456';
// 创建引擎,通过callback形式返回
// 设置创建引擎参数
let extraParam: Record<string, Object> = {"locate": "CN", "recognizerMode": "short"};
let initParamsInfo: speechRecognizer.CreateEngineParams = {
  language: 'zh-CN',
  online: 1,
  extraParams: extraParam
};
// 调用createEngine方法
speechRecognizer.createEngine(initParamsInfo, (err: BusinessError, speechRecognitionEngine: speechRecognizer.SpeechRecognitionEngine) => {
  if (!err) {
    // 接收创建引擎的实例
    asrEngine = speechRecognitionEngine;
  } else {

  }
});

步骤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);

步骤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<string, Object> = {
    "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格式音频文件。具体操作如下所示:

et uint8Array: Uint8Array = new Uint8Array();
// 可以通过如下方式获取音频流:1、通过录音获取音频流;2、从音频文件中读取音频流
// 两种方式示例均已实现:demo参考
// 写入音频流,音频流长度仅支持640或1280
asrEngine.writeAudio(sessionId, uint8Array);

步骤6:查询语言类型

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

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

}).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生态中扮演越来越重要的角色,越来越多的开发者在鸿蒙应用中接入语音识别的功能,为用户带来更加丰富和便捷的体验。


灵芸小骏
9k 声望846 粉丝

移动开发者。