当前位置: 首页 > news >正文

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

文章目录

  • 开发中使用——鸿蒙CoreSpeechKit语音识别
  • 一、不得不说"小艺"
  • 二、具体实现(只需四步)
    • 1.创建语音转文本引擎(SpeechRecognitionEngine)
    • 2.创建回调对象,用来识别语言
    • 3.设置相关参数
    • 4.调用语音识别方法
    • 5.停止识别
  • 三、如何使用
    • 1.得到语言引擎管理实例
    • 2.初始化语言引擎和配置
    • 3.开始语音识别
  • 四、使用技巧
  • 五、展示(Show your Time)
  • 六、参考文档
  • 七、代码奉上(仅供参考)


开发中使用——鸿蒙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参数配置请参考AudioInfolet 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 = dataBufferlet 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)

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

六、参考文档

官方文档

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

后续。。。

http://www.dtcms.com/a/360867.html

相关文章:

  • 复杂计算任务的智能轮询优化实战
  • 教育项目管理工具新趋势:可视化与自动化如何提升效率?
  • 使用ansible的playbook完成以下操作
  • TFS-2010《Fuzzy PCA-Guided Robust k-Means Clustering》
  • macOS中Homebrew安装PHP的详细步骤(五)
  • React学习教程,从入门到精通, React 入门指南:创建 React 应用程序的语法知识点(7)
  • 反物质量子比特初探
  • [免费]基于Python的气象天气预报数据可视化分析系统(Flask+echarts+爬虫) 【论文+源码+SQL脚本】
  • 【iOS】关键字复习
  • 【iOS】折叠cell
  • 量子電腦組裝
  • FunASR开源部署中文实时语音听写服务(CPU)
  • 配送算法19 Two Fast Heuristics for Online Order Dispatching
  • windows10专业版系统安装本地化mysql服务端
  • 【Docker】Docker的容器Container、镜像Image和卷Volume对比
  • Centos安装unoconv文档转换工具并在PHP中使用phpword替换word模板中的变量后,使用unoconv将word转换成pdf
  • openharmony之sandbox沙箱机制详解
  • Docker一键快速部署压测工具,高效测试 API 接口性能
  • datax将数据从starrocks迁移至starrocks
  • Java比较器
  • golang 14并发编程
  • 20250828的学习笔记
  • Socket-TCP 上位机下位机数据交互框架
  • 深入理解 HTTP 与 HTTPS:区别以及 HTTPS 加密原理
  • UART-TCP双向桥接服务
  • Flutter WebAssembly (Wasm) 支持 - 实用指南Flutter WebAssembly (Wasm) 支持 - 实用指南
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 聚焦智慧教育新趋势:AI+虚拟仿真技术加速未来学习转型
  • 算法面试题(上)
  • 【Java后端】Spring Boot 全局域名替换