当前位置: 首页 > 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.xdnf.cn/news/1420345.html

相关文章:

  • 基于MCP架构的OpenWeather API服务端设计与实现
  • C#在物联网GPS经纬度转换为百度地图地址
  • 亚马逊云代理商:如何选择适合的AWS EC2实例类型?
  • CVE Push Service | 高危漏洞实时情报自动化推送工具
  • Vue基础知识-使用监视属性watch和计算属性computed实现列表过滤+排序
  • 【golang长途旅行第35站】Redis
  • docker中的命令(六)
  • 针对redis中的热数据该怎么处理
  • ✝常用表格✝
  • Simulink库文件-一种低通滤波模块搭建方法
  • 【stm32】定时器(超详细)
  • 重构导航之核:高德地图的深度学习架构解析 导论:从数字化世界到可计算世界
  • 手搓3D轮播图组件以及倒影效果
  • Shell 编程 —— 正则表达式与文本处理实战
  • 如何用 Kotlin 在 Android 手机开发一个文字游戏,并加入付费机制?
  • 基于运营商投诉工单的分析系统设计与实现
  • Kotlin
  • 秋招笔记-8.29
  • 哈希表-1.两数之和-力扣(LeetCode)
  • 电路学习(四)半导体
  • LeetCode 165. 比较版本号 - 优雅Java解决方案
  • LangChain开源LLM集成:从本地部署到自定义生成的低成本落地方案
  • 人工智能——课程考核
  • 移动开发如何给不同手机屏幕做适配
  • Shell脚本编程:函数、数组与正则表达式详解
  • [SWPUCTF 2018]SimplePHP
  • 如何用AI视频增强清晰度软件解决画质模糊问题
  • 【音视频】WebRTC QoS 概述
  • 子串:滑动窗口最大值
  • Flutter 完全组件化的项目结构设计实践