阿里语音识别看这一篇就够了

先看效果

效果视频

首先到阿里页面创建项目

传送门:https://help.aliyun.com/document_detail/71936.htm?spm=a2c4g.11186623.0.0.12a03787uqgGAh#2572188

下载sdk引入到项目并且依赖

传送门:https://gw.alipayobjects.com/os/bmw-prod/d5d24de6-599d-41ac-aad7-3bfa6fc38f42.zip?spm=a2c4g.11186623.0.0.12a037872vUnOu&file=d5d24de6-599d-41ac-aad7-3bfa6fc38f42.zip

解压ZIP包,在app/libs目录下获取AAR格式的SDK包,将AAR包集成到您的工程项目中进行依赖。

获取Token

Token需要请求服务器获取,可以跟后台沟通获取方式 以及后台给你返回的格式 ,如果只是玩玩demo 可以使用官网给的测试Token
传送门:https://help.aliyun.com/document_detail/450514.htm?spm=a2c4g.11186623.0.0.12a0344eej4i75#587dee8029x7r

以上准备工作结束接下来开始集成

集成还是很简单的基本上官网讲的还是很全面的
需要注意的几个点是在使用语音识别之前必须获取录音权限 否则识别失败。

接下来看主要代码封装成简单的工具类

public class AutomaticSpeechRecognitionUtils implements INativeNuiCallback {private static final String TAG = AutomaticSpeechRecognitionUtils.class.getName();private NativeNui nui_instance = new NativeNui();private final static int WAVE_FRAM_SIZE = 20 * 2 * 1 * 16000 / 1000; //20ms audio for 16k/16bit/monopublic final static int SAMPLE_RATE = 16000;private AudioRecord mAudioRecorder;private AutomaticSpeechRecognitionListener mAutomaticSpeechRecognitionListener;private Context mContext;private boolean mInit = false;//初始化是否成功/*** @date 8/17/22 4:02 PM* @description 请求token并且初始化**/public void voiceInitToken(Context context, AutomaticSpeechRecognitionListener automaticSpeechRecognitionListener) {this.mContext = context;this.mAutomaticSpeechRecognitionListener = automaticSpeechRecognitionListener;int time = (int) (System.currentTimeMillis() / 1000); //获取当前时间if (time > (SearchVoiceSp.getInstance(UKidsApplication.getInstance()).getSearchVoiceTime())) {RetrofitManager.getInstance().getAutomaticSpeechRecognition(new UkidsObserver<VoiceRecognitionEntity>() {@Overridepublic void onSubscribe(Disposable d) {super.onSubscribe(d);}@Overridepublic void onNext(VoiceRecognitionEntity voiceRecognitionEntity) {super.onNext(voiceRecognitionEntity);if (voiceRecognitionEntity != null) {String token = voiceRecognitionEntity.getToken();int expire = voiceRecognitionEntity.getExpire();SearchVoiceSp.getInstance(UKidsApplication.getInstance()).setSearchVoiceToken(token);SearchVoiceSp.getInstance(UKidsApplication.getInstance()).setSearchVoiceTime(expire);Log.i(TAG, "voiceInitToken onNext " + token);voiceInit(token);}}@Overridepublic void onError(Throwable e) {super.onError(e);mInit = false;if (mAutomaticSpeechRecognitionListener != null)mAutomaticSpeechRecognitionListener.initError();Log.i(TAG, "voiceInitToken onError " + e.toString());}@Overridepublic void onComplete() {super.onComplete();}});} else {String searchVoiceToken = SearchVoiceSp.getInstance(UKidsApplication.getInstance()).getSearchVoiceToken();voiceInit(searchVoiceToken);}}public boolean isInitVoice() {return mInit;}/*** @param* @date 8/17/22 2:46 PM* @description 初始化**/private void voiceInit(String token) {//获取工作路径String asset_path = CommonUtils.getModelPath(mContext);Log.i(TAG, "use workspace " + asset_path);String debug_path = mContext.getExternalCacheDir().getAbsolutePath() + "/debug_" + System.currentTimeMillis();FileUtils.createDir(debug_path);//这里主动调用完成SDK配置文件的拷贝if (CommonUtils.copyAssetsData(mContext)) {Log.i(TAG, "copy assets data done");} else {Log.i(TAG, "copy assets failed");return;}//初始化SDK,注意用户需要在Auth.getAliYunTicket中填入相关ID信息才可以使用。int ret = nui_instance.initialize(this, genInitParams(asset_path, debug_path, token), Constants.LogLevel.LOG_LEVEL_VERBOSE, true);Log.i(TAG, "是否初始化成功" + ret);//设置相关识别参数,具体参考API文档nui_instance.setParams(genParams());if (ret == Constants.NuiResultCode.SUCCESS) {mInit = true;if (mAutomaticSpeechRecognitionListener != null)mAutomaticSpeechRecognitionListener.initSucceed();} else {mInit = false;if (mAutomaticSpeechRecognitionListener != null)mAutomaticSpeechRecognitionListener.initError();}}/*** @param* @description 初始化录音功能**/public void initAudioRecorder() {if (mAudioRecorder == null) {//录音初始化,录音参数中格式只支持16bit/单通道,采样率支持8K/16KmAudioRecorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, SAMPLE_RATE,AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, WAVE_FRAM_SIZE * 4);}}/*** @date 8/17/22 2:46 PM* @description 开始识别**/public void startDialog() {if (nui_instance != null && mInit) {int ret = nui_instance.startDialog(Constants.VadMode.TYPE_P2T,genDialogParams());Log.i(TAG, "start done with " + ret);} else {ToastUtil.showShortToast(mContext, "初始化失败");}}/*** @param* @description 停止识别**/public void stopDialog() {if (nui_instance != null && mInit) {long ret = nui_instance.stopDialog();Log.i(TAG, "cancel dialog " + ret + " end");} else {ToastUtil.showShortToast(mContext, "初始化失败");}}/*** @date 8/17/22 2:46 PM**/public void cancelDialog() {if (nui_instance != null && mInit) {long ret = nui_instance.cancelDialog();Log.i(TAG, "cancel dialog " + ret + " end");} else {ToastUtil.showShortToast(mContext, "初始化失败");}}/*** @description 释放**/public void releaseVoice() {if (nui_instance != null) {nui_instance.release();}if (mAudioRecorder != null) {mAudioRecorder.release();mAudioRecorder = null;}}private String genDialogParams() {String params = "";try {JSONObject dialog_param = new JSONObject();params = dialog_param.toString();} catch (JSONException e) {e.printStackTrace();}Log.i(TAG, "dialog params: " + params);return params;}private String genParams() {String params = "";try {JSONObject nls_config = new JSONObject();nls_config.put("enable_intermediate_result", true);//            参数可根据实际业务进行配置//nls_config.put("enable_punctuation_prediction", true);//nls_config.put("enable_inverse_text_normalization", true);nls_config.put("enable_voice_detection", true);nls_config.put("max_start_silence", 2000);nls_config.put("max_end_silence", 500);//nls_config.put("customization_id", "test_id");//nls_config.put("vocabulary_id", "test_id");//nls_config.put("sample_rate", 16000);//nls_config.put("sr_format", "opus");JSONObject parameters = new JSONObject();parameters.put("nls_config", nls_config);//需要请求的语音服务类型,一句话识别为“0”。parameters.put("service_type", Constants.kServiceTypeASR);// 如果有HttpDns则可进行设置// parameters.put("direct_ip", FileUtils.getDirectIp());params = parameters.toString();Log.i(TAG, "genParams: " + params);} catch (JSONException e) {e.printStackTrace();}return params;}private String genInitParams(String workPath, String debugPath, String token) {String str = "";try {JSONObject object = new JSONObject();object.put("app_key", "QhjdgLiaAFM3j8qY");object.put("token", token);object.put("url", "wss://nls-gateway.aliyuncs.com/ws/v1");object.put("device_id", FileUtils.getDeviceId());object.put("workspace", workPath);object.put("debug_path", debugPath);object.put("sample_rate", "16000");object.put("format", "opus");//            object.put("save_wav", "true");str = object.toString();} catch (JSONException e) {e.printStackTrace();}Log.i(TAG, "InsideUserContext:" + str);return str;}//结果回掉@Overridepublic void onNuiEventCallback(Constants.NuiEvent nuiEvent, int i, int i1, KwsResult kwsResult, AsrResult asrResult) {Log.i(TAG, "event=" + nuiEvent);if (nuiEvent == Constants.NuiEvent.EVENT_ASR_RESULT) {//最终识别结果String json = asrResult.asrResult;Log.i(TAG, "event=end" + json);if (mAutomaticSpeechRecognitionListener != null) {mAutomaticSpeechRecognitionListener.accomplish(getResult(json));}} else if (nuiEvent == Constants.NuiEvent.EVENT_ASR_PARTIAL_RESULT) {//识别中结果String json = asrResult.asrResult;Log.i(TAG, "event=start" + json);if (mAutomaticSpeechRecognitionListener != null) {mAutomaticSpeechRecognitionListener.inProgress(getResult(json));}} else if (nuiEvent == Constants.NuiEvent.EVENT_ASR_ERROR) {//根据错误码信息判断出错原因HashMap<String, String> map = new HashMap<>();map.put("code", String.valueOf(i));UMengUtils.onEvent(UKidsApplication.getInstance(), "U23_voice_sdkerror", map);if (mAutomaticSpeechRecognitionListener != null) {mAutomaticSpeechRecognitionListener.accomplish("");}} else if (nuiEvent == Constants.NuiEvent.EVENT_DIALOG_EX) {UMengUtils.onEvent(UKidsApplication.getInstance(), "U23_voice_fault");if (mAutomaticSpeechRecognitionListener != null) {mAutomaticSpeechRecognitionListener.accomplish("");}}}private String getResult(String json) {AutomaticSpeechRecognitionEntity automaticSpeechRecognitionEntity = GsonUtils.fromJson(json, AutomaticSpeechRecognitionEntity.class);AutomaticSpeechRecognitionEntity.PayloadBean payload = automaticSpeechRecognitionEntity.getPayload();String result = payload.getResult();return result;}@Overridepublic int onNuiNeedAudioData(byte[] bytes, int i) {int ret = 0;if (mAudioRecorder.getState() != AudioRecord.STATE_INITIALIZED) {Log.e(TAG, "audio recorder not init");return -1;}ret = mAudioRecorder.read(bytes, 0, i);return ret;}@Overridepublic void onNuiAudioStateChanged(Constants.AudioState audioState) {Log.i(TAG, "onNuiAudioStateChanged");if (mAudioRecorder != null)if (audioState == Constants.AudioState.STATE_OPEN) {Log.i(TAG, "audio recorder start");mAudioRecorder.startRecording();} else if (audioState == Constants.AudioState.STATE_CLOSE) {Log.i(TAG, "audio recorder close");mAudioRecorder.release();} else if (audioState == Constants.AudioState.STATE_PAUSE) {Log.i(TAG, "audio recorder pause");mAudioRecorder.stop();}}//语音值回调@Overridepublic void onNuiAudioRMSChanged(float v) {}@Overridepublic void onNuiVprEventCallback(Constants.NuiVprEvent nuiVprEvent) {}}

基本就是这样

参数说明

语音服务的地址根据自己需求配置
在这里插入图片描述
交互图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

基本就这些

错误码详情查看官网文档

传送门:https://help.aliyun.com/document_detail/173298.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/59960.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSP学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)

cc学院 毕业设计&#xff08;论文&#xff09;开题报告 题 目&#xff1a; 基于JSP的学生学籍管理系统 学 科 部&#xff1a; 信工学科部 专 业&#xff1a; 计算机科学与技术 班 级&#xff1a; 学 号&#xff1a; 姓 名&#xff1a; 指导教师&#xff1a; 填表日期&…

​chatGPT超智慧AI非常强大,其运行原理是什么?

chatGPT是一种基于人工智能技术的聊天机器人&#xff0c;其功能原理如下&#xff1a; 1. 数据收集&#xff1a;chatGPT通过网络爬虫等方式收集大量的语料库&#xff0c;包括对话、文章、新闻等。 2. 训练模型&#xff1a;chatGPT使用深度学习技术&#xff0c;将收集到的语料库…

三体模拟器(python)

原文来自本人博客&#xff1a;三体模拟器&#xff08;python&#xff09; vpython vpython库是一个能做3D动画的第三方库&#xff0c;安装起来很容易&#xff0c;利用anacanda或者pycharm都能简单安装 导入vpython from vpython import *设置画布参数 scene.forward vect…

用Python画一个3D太阳系

用Python画一个平面的太阳系得到一些朋友的欣赏&#xff0c;然后有同学提出了绘制三维太阳系的要求。 从Python画图的角度来说&#xff0c;三维太阳系其实并不难&#xff0c;问题在于八大行星对黄道面的倾斜太小&#xff0c;所以尽管画个三维的图&#xff0c;但就观感而言&…

宇宙都要毁灭了你还在玩汉诺塔?(动画讲解汉诺塔问题)

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 前言 &#x1f496;作者&#xff1a;龟龟不断向前 ✨简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; …

物理研学论文MATLAB仿真——地月火箭三体问题的数值求解(平面圆形限制性三体问题的研究)

在二十世纪第一次数学家大会上&#xff0c;希尔伯特提出了“完美数学问题”准则&#xff0c;随后他举了两个例子&#xff0c;一个是费马猜想&#xff0c;另一个就是N体问题。近现代研究最多的就是三体问题。 三体问题就是三个天体在万有引力作用下的运动问题。三个天体的质量、…

关于计算机与教育的英语作文,信息技术对教育的影响英文作文

关于”信息技术对教育的影响“的英语作文范文2篇,作文题目:The influence of information technology on Education。以下是关于信息技术对教育的影响的小学英语范文,每篇作文均为真题范文带翻译。 高分英语作文1:The influence of information technology on Education Us…

维普导出参考文献

勾选需要导出参考文献的文章&#xff0c;点击“导出题录” 选择“参考文献”&#xff0c;点击“复制”或“导出”即可

同时处理知网、万方、维普数据库——CiteSpace、Ucinet、Vosviewer等

同时处理知网、万方、维普数据库——CiteSpace、Ucinet、Vosviewer等 全网独家[下文有视频教程] 《CiteSpace、Ucinet、Vosviewer、gephi等文献计量与可视化软件同时处理知网、万方、维普数据库》&#xff0c;结果更加客观、科学、权威&#xff01; 目前&#xff0c;我们利用…

Zotero 导入中文数据库文献(知网、百度学术、万方和维普数据)

首先打开 github 页面。下载 zip 文件并解压。 zotero 导入中国知网等文献网站学术插件下载地址 打开 zotero 软件&#xff0c;依次打开 编辑 - 首选项 - 高级 - 文件和文件夹 - 打开数据文件夹。 找到本地磁盘文件夹&#xff0c;找到插件文件夹&#xff0c;将 js 文件复制到 …

会议记录管理系统(1)

A.系统分析 B.数据库设计流程 C.搭建系统架构的方法 D.ADODB类库技术的应用 E.熟悉ADODB类库操作mySql的使用方法 F.webBrowser预览与打印 G.生成excel报表 H.分类查询实现的应用 I.文件上传的实现方法 1.开发背景 2.需求分析 3.系统分析 - 系统目标 - 首页设…

小爱音箱mini无法响应的解决方法

1、按音箱的“暂停键”5秒。 2、听到“已进入设置模式”后&#xff0c;橙色灯常亮时在手机上打开小爱音箱app 3、重新设置网络&#xff1a; 选择路由器&#xff0c;路由器链接密码后&#xff0c;当语音提示已连接&#xff0c;说明设置完成。

BI工具如何提升工作效率:以瓴羊Quick BI、观远BI为例

最近一段时间&#xff0c;ChatGPT的横空出世让越来越多的人意识到了数字科技对于人们生活方式、工作方式的巨大变革作用。事实上&#xff0c;在企业中这样的例子早就十分常见。比如瓴羊Quick BI、观远BI等商业智能工具的出现和应用&#xff0c;就为现代企业的管理运营和工作效率…

【QT + OsgEarth】(一)-- 环境配置

OSG概述 OpenSceneGraph(简称OSG)使用OpenGL技术开发&#xff0c;是一套基于Ct平台的应用程序接口(API)&#xff0c;它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。它作为中间件(middleware)为应用软件提供了各种高级渲染特性&#xff0c;IO&#xff0c…

Windows环境下配置CGAL

环境版本 CGAL-5.5 下载地址&#xff1a;https://github.com/CGAL/cgal/releases/tag/v5.5 Tips: 在该网址下同时下载<GMP and MPFR libraries for Windows 64bits>&#xff0c;并将下载后该文件下的gmp复制到CGAL的auxiliary进行覆盖。 Boost-1-18-0 下载地址&#xff1…

面向黑马头条学习

一&#xff1a;创建项目 进去选择第三个&#xff0c;人工选择&#xff1a; 二&#xff1a;加入git版本管理 查看git日志&#xff1a; github首次创建vuecli &#xff0c;自己提交了第一次代码 第二步&#xff0c;将本地仓库添加远程仓库地址 add后的origin后面地址 的名字&…

黑马头条简述

黑马头条 技术栈&#xff1a;springcloudgateway微服务之前架构的网关服务&#xff0c;实现微服务注册的api请求路由&#xff0c;控制流速和熔断处理 Springbootalibaba Nacos作为项目中注册中心和配置中心 Mybatis-plus作为持久层提升开发效率 Kafka完成内部系统消息通知&…

黑马头条-day02

文章目录 前言一、文章列表加载1.1 需求分析1.2 表结构分析1.3 导入文章数据库1.4 实现思路1.5 接口定义1.6 功能实现 二、freemarker2.1 freemarker简介2.2 环境搭建&&快速入门2.2.1 创建测试工程 2.3 freemarker基础2.3.1 基础语法种类2.3.2 集合指令2.3.3 if指令2.3…

百度沈抖:文心一言将通过百度智能云对外提供服务

2月17日&#xff0c;在2023 AI工业互联网高峰论坛上&#xff0c;百度智能云宣布“文心一言”将通过百度智能云对外提供服务&#xff0c;为产业带来AI普惠。 百度集团执行副总裁、百度智能云事业群总裁沈抖表示&#xff0c;“文心一言”是基于百度智能云技术打造出来的大模型&a…

大模型落地比趋势更重要,NLP+金融如何看得见、摸得着?

全球很多人都开始相信&#xff0c;以ChatGPT为代表的大模型&#xff0c;将带来一场NLP领域乃至整个人工智能的技术革命&#xff0c;影响遍及各行各业。 那么&#xff0c;金融机构和科技企业&#xff0c;应该以怎样的姿态迈入新的洪流&#xff1f; 前不久&#xff0c;有“中国智…