开发中使用——鸿蒙CoreSpeechKit语音识别

文章目录


开发中使用------鸿蒙CoreSpeechKit语音识别

不再是一个安安静静的"APP",做一个可以发出声音,甚至讲话、与人进行交互,是一个APP孜孜不倦的追求和最终理想。------------一个APP的独白。

一、不得不说"小艺"

  • 渊源:华为手机自带语言助手"小艺",也是一个语言AI,手机系统自带,同样支持鸿蒙Next(你懂得)。

  • 特点:短语音模式不超过60s,长语音模式不超过8h。

  • 场景:手机/平板等设备在无网状态下,为听障人士或不方便收听音频场景提供音频转文本能力。(无网络也用,就说牛不牛)。

  • 语言:支持的语种中文普通话(其实英文也可以识别)。

  • 支持的模型类型:离线。

  • AI: 实打实的AI,这是基于手机系统提供的CoreSpeechKit基础语言服务,属于AI模块。

    有下图为证。

二、具体实现(只需四步)

  • 实现原理,要初始化语音转文本的引擎(SpeechRecognitionEngine),然后给它配置参数、配置回调;然后就可以使用它进行操作了,让它干活了。

1.创建语音转文本引擎(SpeechRecognitionEngine)

调用createEngine接口,创建SpeechRecognitionEngine实例。并初始化引擎。使用callback异步回调。

复制代码
  createEngine(){
    // 创建引擎,通过callback形式返回
    // 设置创建引擎参数
    this.extraParam = {"locate": "CN", "recognizerMode": "short"};

    let initParamsInfo: speechRecognizer.CreateEngineParams = {
      language: 'zh-CN',
      online: 1,
      extraParams: this.extraParam
    };

    // 调用createEngine方法
    speechRecognizer.createEngine(initParamsInfo, (err: BusinessError, speechRecognitionEngine: speechRecognizer.SpeechRecognitionEngine) => {
      if (!err) {
        console.info('Succeeded in creating engine.');
        // 接收创建引擎的实例
        this.asrEngine = speechRecognitionEngine;
      } else {
        console.error(`Failed to create engine. Code: ${err.code}, message: ${err.message}.`);
      }
    });
  }

2.创建回调对象,用来识别语言

回调中,能一步步打印识别的内容。

复制代码
  initListener(){
    // 创建回调对象
    this.setListener = {
      // 开始识别成功回调
      onStart(sessionId: string, eventMessage: string) {
        console.info(`onStart, sessionId: ${sessionId} eventMessage: ${eventMessage}`);
      },
      // 事件回调
      onEvent(sessionId: string, eventCode: number, eventMessage: string) {
        console.info(`onEvent, sessionId: ${sessionId} eventCode: ${eventCode} eventMessage: ${eventMessage}`);
      },
      // 识别结果回调,包括中间结果和最终结果
      onResult(sessionId: string, result: speechRecognizer.SpeechRecognitionResult) {
        console.info(`onResult, sessionId: ${sessionId} result: ${JSON.stringify(result)}`);
        console.info('识别结果',JSON.stringify(result));

      },
      // 识别完成回调
      onComplete(sessionId: string, eventMessage: string) {
        console.info(`onComplete, sessionId: ${sessionId} eventMessage: ${eventMessage}`);
      },
      // 错误回调,错误码通过本方法返回
      // 返回错误码1002200002,开始识别失败,重复启动startListening方法时触发
      // 更多错误码请参考错误码参考
      onError(sessionId: string, errorCode: number, errorMessage: string) {
        console.error(`onError, sessionId: ${sessionId} errorCode: ${errorCode} errorMessage: ${errorMessage}`);
      },
    }
    // 设置回调
    this.asrEngine?.setListener(this.setListener);
  }

3.设置相关参数

分别为音频文件转文字和麦克风转文字功能设置开始识别的相关参数。

复制代码
private startListeningForRecording() {
    let audioParam: speechRecognizer.AudioInfo = { audioType: 'pcm', sampleRate: 16000, soundChannel: 1, sampleBit: 16 }//audioInfo参数配置请参考AudioInfo
    let extraParam: Record<string, Object> = {
      "recognitionMode": 0,
      "vadBegin": 2000,
      "vadEnd": 3000,
      "maxAudioDuration": 20000
    }
    let recognizerParams: speechRecognizer.StartParams = {
      sessionId: this.sessionId,
      audioInfo: audioParam,
      extraParams: extraParam
    }
    console.info('startListening start');
    this.asrEngine?.startListening(recognizerParams);
  }

4.调用语音识别方法

让它干活,调用播报方法,开发者可以通过修改speakParams主动设置播报策略

复制代码
  public async startRecording() {
    try {
      this.startListeningForRecording();
      // 录音获取音频
      let data: ArrayBuffer;
      console.info(TAG, 'create capture success');
      this.mAudioCapturer.init((dataBuffer: ArrayBuffer) => {
        console.info(TAG, 'start write');
        console.info(TAG, 'ArrayBuffer ' + JSON.stringify(dataBuffer));
        data = dataBuffer
        let uint8Array: Uint8Array = new Uint8Array(data);
        console.info(TAG, 'ArrayBuffer uint8Array ' + JSON.stringify(uint8Array));
        // 写入音频流
        this.asrEngine?.writeAudio(this.sessionId, uint8Array);
      });
    } catch (err) {
      // this.generatedText = `Message: ${err.message}.`;
      console.info(TAG,err.message);
    }
  };

5.停止识别

让它结束时,当需要停止时,有下面几种方式。

复制代码
/**
   * 结束识别
   */
  public finishRecognizer(){
    this.asrEngine?.finish(this.sessionId);
  }


  /**
   * 取消识别
   */
  public cancelRecognizer(){
    this.asrEngine?.cancel(this.sessionId);
  }


  /**
   * 释放识别引擎资源
   */
  public shutdownEngine(){
    this.asrEngine?.shutdown();
  }

三、如何使用

1.得到语言引擎管理实例

我是将上述的方法,整理出了一个单例类TextToSpeechManager,方便在APP中全局使用。

复制代码
private speechManager = SpeechRecognizerManager.getInstance();

2.初始化语言引擎和配置

在将要进入页面时,在方法aboutToAppear()中进行初始化。

复制代码
aboutToAppear() {
  /// 初始化语音识别引擎
  this.speechManager.createEngine();
    this.sleep(500).then(()=>{
      this.speechManager.getInstance().initListener();
    });
}

3.开始语音识别

复制代码
await this.speechManager.startRecording();

四、使用技巧

我是用到了就写一下,后面用到了再进行补充。

五、展示(Show your Time)

我不知道怎么上传视频,还是算了吧。就上传一张图片吧。

六、参考文档

官方文档

七、代码奉上(仅供参考)

后续。。。

相关推荐
爱笑的眼睛118 小时前
HarmonyOS 应用开发:基于API 12+的现代开发实践
华为·harmonyos
水印云9 小时前
视频提取文字用什么软件好?分享6款免费的视频转文字软件!
人工智能·音视频·语音识别
安卓开发者9 小时前
鸿蒙NEXT表单选择组件详解:Radio与Checkbox的使用指南
华为·harmonyos
爱笑的眼睛119 小时前
HarmonyOS 应用开发深度实践:深入 Stage 模型与 ArkTS 声明式 UI
华为·harmonyos
爱笑的眼睛119 小时前
HarmonyOS应用开发深度解析:基于Stage模型与ArkTS的现代实践
华为·harmonyos
cici158749 小时前
matlab-神经网络的语音识别
神经网络·matlab·语音识别
HarderCoder9 小时前
重学仓颉-13并发编程完全指南
harmonyos
开发小能手嗨啊9 小时前
「鸿蒙系统的编程基础」——探索鸿蒙开发
harmonyos·鸿蒙·鸿蒙开发·开发教程·纯血鸿蒙·南向开发·北向开发
HarderCoder9 小时前
重学仓颉-12错误处理完全指南
harmonyos