■ Android集成百度语音识别

实现这个功能的目的,是我看见我公司硬件工程师给客户回答问题的时候用公司研发的APP,每次都是手动输入打字,看着他带着老花镜的样子,于心不忍,毕竟咱就是干这个的.

实现效果
在这里插入图片描述

集成 百度语音实时识别
https://ai.baidu.com/sdk#asr
在这里插入图片描述
AndroidManifest.xml 文件

   <uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 蓝牙录音使用,不需要可以去除 --><uses-permission android:name="android.permission.BROADCAST_STICKY" /><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"tools:ignore="GoogleAppIndexingWarning"><!-- 百度控制台申请的KEY --><meta-dataandroid:name="com.baidu.speech.APP_ID"android:value="22611822"/><meta-dataandroid:name="com.baidu.speech.API_KEY"android:value="YoR10GzzuZ58FYLpQ1utD5vy"/><meta-dataandroid:name="com.baidu.speech.SECRET_KEY"android:value="gGQvipUXC0dSSGmAQNMeHCMKTW4fGGrH"/><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>

build.gradle

    packagingOptions{doNotStrip "*/*/libvad.dnn.so"doNotStrip "*/*/libbd_easr_s1_merge_normal_20151216.dat.so"}

集成jar包

dependencies {
//...省略implementation files('libs\\bdasr_V3_20191210_81acdf5.jar')
}

在这里插入图片描述
到这里基本就可以集成了百度语音实时识别,但是这里有个坑.就是语音申请的时候得领取配额
在这里插入图片描述
一定要领取配额,不然一顿 4004,一开始我以为是集成错误导致了,包名检查了N次…

使用方法
这里我直接附上我写的代码了

protected TextView txtResult;private EventManager asr;protected boolean enableOffline = false; // 测试Unit 2.0 功能,必须一直联网private EditText etText;private LinearLayout llView;private CustomPopWindow mCustomPopWindowCause;private TextView tvContent;private TextView tvState;private LinearLayout llClick;/*** 基于SDK集成2.2 发送开始事件* 点击开始按钮* 测试参数填在这里*/@SuppressLint("HandlerLeak")private void start() {Map<String, Object> params = new LinkedHashMap<String, Object>();String event = null;event = SpeechConstant.ASR_START; // 替换成测试的eventif (enableOffline) {params.put(SpeechConstant.DECODER, 2);}// 基于SDK集成2.1 设置识别参数params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);params.put(SpeechConstant.PID, 15374); // 或 19364 Unit  2.0 固定pid,仅支持中文普通话params.put(SpeechConstant.NLU, "enable");params.put(SpeechConstant.VAD_ENDPOINT_TIMEOUT, 0); // 长语音String json = null; // 可以替换成自己的jsonjson = new JSONObject(params).toString(); // 这里可以替换成你需要测试的jsonasr.send(event, json, null, 0, 0);Log.e("X000", json + "");}/*** 点击停止按钮* 基于SDK集成4.1 发送停止事件*/private void stop() {asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); //}/*** enableOffline设为true时,在onCreate中调用* 基于SDK离线命令词1.4 加载离线资源(离线时使用)*/private void loadOfflineEngine() {Map<String, Object> params = new LinkedHashMap<String, Object>();params.put(SpeechConstant.DECODER, 2);params.put(SpeechConstant.ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH, "assets://baidu_speech_grammar.bsg");asr.send(SpeechConstant.ASR_KWS_LOAD_ENGINE, new JSONObject(params).toString(), null, 0, 0);}/*** enableOffline为true时,在onDestory中调用,与loadOfflineEngine对应* 基于SDK集成5.1 卸载离线资源步骤(离线时使用)*/private void unloadOfflineEngine() {asr.send(SpeechConstant.ASR_KWS_UNLOAD_ENGINE, null, null, 0, 0); //}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.common_mini);EventBus.getDefault().register(this);initView();initPermission();// 基于sdk集成1.1 初始化EventManager对象asr = EventManagerFactory.create(this, "asr");// 基于sdk集成1.3 注册自己的输出事件类asr.registerListener(this); //  EventListener 中 onEvent方法if (enableOffline) {loadOfflineEngine(); // 测试离线命令词请开启, 测试 ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH 参数时开启}}// 基于sdk集成1.2 自定义输出事件类 EventListener 回调方法// 基于SDK集成3.1 开始回调事件@Overridepublic void onEvent(String name, String params, byte[] data, int offset, int length) {if (params != null && !params.isEmpty()) {try {JSONObject object = new JSONObject(params);JSONArray jsonArray = object.getJSONArray("results_recognition");StringBuffer str = new StringBuffer();if (jsonArray != null || jsonArray.length() != 0) {for (int i = 0; i < jsonArray.length(); i++) {String msg = jsonArray.getString(i);str.append(msg + " ");}tvContent.setText(str.toString());}} catch (JSONException e) {e.printStackTrace();}}}private void initView() {txtResult = (TextView) findViewById(R.id.txtResult);etText = findViewById(R.id.et_text);llView = findViewById(R.id.ll_layout);findViewById(R.id.btn_x).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ShowVoice();}});}@Subscribe(threadMode = ThreadMode.MAIN)public void ConsultEvent(XYTextEvent item) {String context = item.getContext();String trim = etText.getText().toString().trim();if (!trim.isEmpty()) {etText.setText(trim + context);} else {etText.setText(context);}}/*** 展示语音*/@SuppressLint("ClickableViewAccessibility")private void ShowVoice() {final View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_windows, null);mCustomPopWindowCause = new CustomPopWindow.PopupWindowBuilder(MainActivity.this).setView(contentView).enableBackgroundDark(true) //弹出popWindow时,背景是否变暗.setBgDarkAlpha(0.6f) // 控制亮度.enableOutsideTouchableDissmiss(true).create();mCustomPopWindowCause.showAtLocation(llView, Gravity.FILL, 0, 0);tvContent = contentView.findViewById(R.id.tv_content);tvState = contentView.findViewById(R.id.tv_state);llClick = contentView.findViewById(R.id.ll_click);//触摸手势事件llClick.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:tvState.setText("正在说...~");llClick.setBackgroundResource(R.drawable.ra_bg);start();break;case MotionEvent.ACTION_UP:tvState.setText("按住说话~");llClick.setBackgroundResource(R.drawable.re_bg);stop();EventBus.getDefault().post(new XYTextEvent(tvContent.getText().toString()));mCustomPopWindowCause.dissmiss();//  etText.setText(tvContent.getText().toString());break;}return true;}});}/*** android 6.0 以上需要动态申请权限*/private void initPermission() {String permissions[] = {Manifest.permission.RECORD_AUDIO,Manifest.permission.ACCESS_NETWORK_STATE,Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE};ArrayList<String> toApplyList = new ArrayList<String>();for (String perm : permissions) {if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {toApplyList.add(perm);// 进入到这里代表没有权限.}}String tmpList[] = new String[toApplyList.size()];if (!toApplyList.isEmpty()) {ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);}}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {// 此处为android 6.0以上动态授权的回调,用户自行实现。}@Overrideprotected void onPause() {super.onPause();asr.send(SpeechConstant.ASR_CANCEL, "{}", null, 0, 0);}@Overrideprotected void onDestroy() {super.onDestroy();// 基于SDK集成4.2 发送取消事件asr.send(SpeechConstant.ASR_CANCEL, "{}", null, 0, 0);if (enableOffline) {unloadOfflineEngine(); // 测试离线命令词请开启, 测试 ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH 参数时开启}// 基于SDK集成5.2 退出事件管理器// 必须与registerListener成对出现,否则可能造成内存泄露asr.unregisterListener(this);if (EventBus.getDefault().isRegistered(this))EventBus.getDefault().unregister(this);}

附带三方库

    implementation 'com.github.pinguo-zhouwei:CustomPopwindow:2.1.1'implementation 'org.greenrobot:eventbus:3.1.1'

后记 :功能实现了,老工程师很开心.他跟我说他之所以打字,是因为他在给客户回答问题的时候得思索一下…
至于语音输入功能,他说现在的输入法都有这个功能了.要不你打字的时候,试一下长按空格键…-_-||

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

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

相关文章

百度云助力微信小程序图文识别,让你的应用更加高效智能

前言 如今人们对于信息的获取需求越来越高&#xff0c;而图像识别技术的发展为我们带来了更加便捷高效的信息获取方式。微信小程序作为一种新型的应用形态&#xff0c;越来越受到用户的青睐。而本文将为大家介绍微信小程序基于百度云的图文识别技术。让我们一起来看看微信小程序…

chatGPT 和AlphaGo下围棋,谁赢?垂域大模型有戏么?

这边来的少&#xff0c;但发个文章通报下近况&#xff0c;长期做AI产研、投融资工作后&#xff0c;后续主要在企业数字化与大模型结合的方向上&#xff0c;后续进展还是请关注&#xff1a;琢磨事。 上一篇提到最终大模型的格局很可能是有一个偏通用大模型&#xff0c;比如chatG…

chatgpt赋能python:用Python实现高效搜索文献

用Python实现高效搜索文献 作为研究学者&#xff0c;面对日益增多的文献量&#xff0c;如何高效地搜索文献成为了一大难题。然而&#xff0c;Python的强大功能和丰富的科学计算库为我们提供了一种新的解决方案。本文将介绍如何使用Python进行文献搜索&#xff0c;帮助广大学者…

浅浅了解一下SSM框架,全网最新

一.SSM框架初体验 作为当下流行的企业开发MVC开源框架&#xff0c;SSM框架是我们Java程序猿必须熟练掌握的知识点, SSM框架是spring MVC &#xff0c;spring和mybatis框架的整合. SSM框架是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#x…

浅浅的分享一下2022年ISCC

WEB 冬奥会&#xff1a;你来参加2022届冬奥会&#xff0c;想知道冬奥会的主办方想告诉你什么吗&#xff1f;题目入口&#xff1a;59.110.159.206:7060 我们根据审计可知需要我们构造 josn 然后 get 传参&#xff0c;需要绕过的地方&#xff1a; 1.is_numeric()对 year 的过滤…

冷热数据浅浅见

冷热数据浅浅见 一、前言二、冷热数据的标准&#xff08;判断&#xff09;三、判断冷热数据的算法3.1 基于数据结构特点的判断算法3.1.1 传统的方法3.1.2 改进的方法 3.2 基于统计学上的判断算法3.3 基于机器学习的判断算法 四、总结五、参考 一、前言 这个星期看了关于目前数…

商汤日日新大模型90天大升级!CEO现场整活,主打突破想象力

金磊 发自 WAIC量子位 | 公众号 QbitAI 商汤“日日新”AI大模型&#xff0c;如其名&#xff0c;真的做到了日日新。 这不&#xff0c;从发布到现在&#xff0c;时隔仅仅3个月&#xff0c;商汤便正式宣布&#xff1a; 商汤日日新&#xff08;SenseNova&#xff09;大模型体系全面…

一张快照就能还原出一段视频!AAAI 2023论文提出快照压缩成像新算法 | 开源

飞晔 投稿量子位 | 公众号 QbitAI 随着光学算法发展&#xff0c;如今我们用低维传感器也能“捕获”高维信号了。 举个例子&#xff0c;这是我们用2D传感器拍到的一张“照片”&#xff0c;看起来充满了噪声数据&#xff1a; 然而&#xff0c;正是通过这张“照片”所包含的数据&a…

微信春节大数据出炉:《三体》阅读量第一 ;曝iOS 17应用商店将向第三方开放;斯坦福大学推出DetectGPT|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

chatgpt赋能python:Python如何输出彩色的文字

Python如何输出彩色的文字 介绍 Python是一种高级编程语言&#xff0c;它广泛用于数据处理、人工智能、机器学习等各种领域。在Python编程中&#xff0c;输出信息是非常重要的部分。而有时&#xff0c;我们可能希望将输出的信息以不同的颜色呈现&#xff0c;以便更好地区分不…

视觉媒体通信——无损视频播放器

0 前言 我想&#xff0c;看这篇文章的朋友十有八九是在大三下选了这门课。那么我首先祝贺你们&#xff0c;即将结束美好的大学时光。以前听说这门课很难&#xff0c;但是这门课最大的诱惑就是没有期末考试~&#xff0c;所以我当初就选了。我也很担心自己不会做&#xff0c;但是…

chatgpt赋能python:Python绘制彩色线条的详细教程

Python绘制彩色线条的详细教程 简介 Python作为一门高级编程语言&#xff0c;可以用于许多不同领域的应用程序。其中&#xff0c;绘图是Python中很有用的一个应用领域。本文将介绍如何使用Python绘制彩色线条的方法&#xff0c;以及这对于数据可视化有多么重要。 方法 使用…

chatgpt赋能python:Python彩色转黑白简介

Python彩色转黑白简介 Python是一种高级编程语言&#xff0c;提供了许多内置功能和库来进行图像处理。其中之一就是彩色转黑白。彩色图像是RGB&#xff08;红色&#xff0c;绿色和蓝色&#xff09;通道的混合&#xff0c;而黑白图像则只有灰度值。 在本篇文章中&#xff0c;我…

chatgpt赋能Python-python_print_彩色

Python打印彩色文本&#xff1a;给你的代码添加亮丽的色彩 如果你是一位具备10年Python编程经验的工程师&#xff0c;那么你一定知道在Python中如何使用print函数输出文本。但是&#xff0c;你是否知道如何打印出彩色的文本&#xff1f;这样一来&#xff0c;你的代码就会变得更…

chatgpt赋能python:Python彩色字体介绍

Python彩色字体介绍 Python是一种高级编程语言&#xff0c;启发式风格的语法使其成为学习编程的理想选择。本文将介绍如何在Python代码中使用彩色字体。如果您是Python编程初学者&#xff0c;这篇文章将对您有所帮助。 什么是彩色字体&#xff1f; 彩色字体是一种添加颜色信…

chatgpt赋能python:Python彩色图像处理

Python彩色图像处理 Python是一门富有表现力语法和丰富库的语言&#xff0c;因此它成为了许多图像处理和计算机视觉任务的首选语言。其中&#xff0c;Python彩色图像处理已经被广泛应用&#xff0c;如图像滤波&#xff0c;图像分割&#xff0c;图像增强等。本文将介绍Python彩…

chatgpt赋能python:Python绘制彩色蟒蛇

Python绘制彩色蟒蛇 如果你曾经看过蟒蛇的图片&#xff0c;那么你会发现这种动物的图案非常独特。如何使用Python编程语言&#xff0c;绘制出这种非常具有特征的蟒蛇形状呢&#xff1f;在这篇文章中&#xff0c;我们将会介绍如何使用Python绘制彩色蟒蛇的方法。 加载必要的库…

chatgpt赋能python:Python色彩空间转换-介绍

Python 色彩空间转换 - 介绍 在图像处理中&#xff0c;色彩空间指的是颜色表示的方式。常见的色彩空间有 RGB、HSV、YUV 等。在图像处理中&#xff0c;经常需要进行不同色彩空间之间的转换。Python 提供了强大的图像处理库 Pillow&#xff0c;可以进行色彩空间的转换。 Pytho…

Unity实战篇 | 接入 声网SDK 实现 音频通话 —— 自己动手做一个 语音聊天房

目录 🐱‍🏍前言🎂Unity 接入 声网SDK 实现 音频通话第1️⃣步,创建声网应用第2️⃣步,获取相应的SDK第3️⃣步,将SDK接入Unity中第4️⃣步:搭建一个测试场景,编写测试代码第5️⃣步:音频通话API第6️⃣步:效果测试🎨总结🐱‍🏍前言 最近正好在网上看到声网…

声网Agora Lipsync技术剖析:通过实时语音驱动人像模拟真人说话

元宇宙的火热让人们对未来虚拟世界的形态充满了幻想&#xff0c;此前我们为大家揭秘了声网自研的3D空间音频技术如何在虚拟世界中完美模拟现实听觉体验&#xff0c;增加玩家沉浸感。今天我们暂时离开元宇宙&#xff0c;回到现实世界&#xff0c;来聊聊声网自研的 Agora Lipsync…