目录

  • 1.引言
  • 2.开发环境
  • 3.准备开发环境
    • 3.1安装Android studio
    • 3.2创建百度智能云平台应用
    • 3.1下载百度语音识别SDK
  • 4.实现语音识别的简单案例
    • 4.1创建Android工程
    • 4.2导入core模块
    • 4.3配置app依赖core
    • 4.4使用百度语音识别SDK

1.引言

在人际交往中,言语是最自然并且最直接的方式之一。随着技术的进步,越来越多的人们也期望计算机能够具备与人进行言语沟通的能力,因此,语音识别这一技术也越来越受到关注。尤其,随着深度学习技术应用在语音识别技术中,使得语音识别的性能得到了显著提升,也使得语音识别技术的普及成为了现实。今天,我就用百度语音识别SDK做一个简单的使用案例。


2.开发环境

Android studio 3.6.1;
百度语音识别Android SDK3.1.6;


3.准备开发环境

3.1安装Android studio

Android studio安装教程

3.2创建百度智能云平台应用

百度智能云链接

①登录百度智能云之后点击创建应用开始创建平台应用

②打开左侧导航栏找到语音技术

③进入到概览界面中,点击创建应用

④填写新应用相关信息

⑤点击立即创建后再点击查看应用详情,此处的AppID,AppID,Secret Key与包名都是后续需要使用到的,到时直接复制黏贴即可

3.1下载百度语音识别SDK

语音识别Android SDK下载地址。
下载后解压到本地。解压后会发现是个安卓工程,若想要把该工程跑起来可以自己看看其中的README文档。想要深入了解,可看百度语音开放平台Android SDK用户指南。


4.实现语音识别的简单案例

4.1创建Android工程


4.2导入core模块

①File→New→Import Module

②找到之前解压出的文件中的core文件夹,选择OK→Finish

③此时查看项目目录下的settings.gradle, 可以看见core module已经被加载,同时可以看见core目录的图标,说明导入成功

4.3配置app依赖core

①右击app目录选择Open Module Settings

②在打开的界面选择Dependencies→app→+号→Module Dependency

③在弹出的界面勾选core后点击OK,然后选择Apply


④此时观察build.gradle(module :app)文件,发现自动添加了如下一行
implementation project(path: ‘:core’)

⑤根据app/build.gradle(module :app)更改core/build.gradle(module :core)部分版本号。因为我用的API Level是29所以我改成29,你的不一定和我一样,以你的app/build.gradle(module :app)文件中内容为准。

⑥在你的core\manifests\AndroidManifest.xml文件里,替换你的appId 丶appKey与secretKey为之前你在百度智能云上创建的应用的对应信息

4.4使用百度语音识别SDK

①修改布局文件app\res\layout\activity_main.xml,简单写一个界面即可

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><EditTextandroid:id="@+id/edittext"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="请点击开始录音"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/btn_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="开始录音"app:layout_constraintEnd_toStartOf="@+id/edittext"app:layout_constraintTop_toTopOf="@+id/btn_stop" /><Buttonandroid:id="@+id/btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="116dp"android:text="停止录音"app:layout_constraintStart_toEndOf="@+id/edittext"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

试运行看看实际效果

②android 6.0 以上版本权限申请。语音识别要用到麦克风,这个使用权限是需要动态申请的。

    /*** 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);}}/*** 权限申请回调,可以作进一步处理* @param requestCode* @param permissions* @param grantResults*/@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {// 此处为android 6.0以上动态授权的回调,用户自行实现。}

③初始化控件与语音识别的核心SDK

    protected EditText txtResult;//识别结果protected Button startBtn;//开始识别,持续一定时间不说话会自动停止,需要再次打开protected Button stopBtn;//停止识别,立即停止,直接输出已经识别的内容private EventManager asr;//语音识别核心库
 /*** 初始化控件*/private void initView() {txtResult = (EditText) findViewById(R.id.edittext);startBtn = (Button) findViewById(R.id.btn_start);stopBtn = (Button) findViewById(R.id.btn_stop);startBtn.setOnClickListener(new View.OnClickListener() {//点击开始按钮@Overridepublic void onClick(View v) {asr.send(SpeechConstant.ASR_START, null, null, 0, 0);}});stopBtn.setOnClickListener(new View.OnClickListener() {//点击停止按钮@Overridepublic void onClick(View v) {asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);}});}

④在onCreate方法中调用

 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initPermission();//初始化EventManager对象asr = EventManagerFactory.create(this, "asr");//注册自己的输出事件类asr.registerListener(this); //  EventListener 中 onEvent方法}

此时会有错误提示,因为我们还没有实现EventListener这个借口,接下来我们就实现这个接口

⑤实现EventListener接口,要注意这个接口是百度的这个

实现接口的onEvent方法

    /*** 自定义输出事件类 EventListener 回调方法*/@Overridepublic void onEvent(String name, String params, byte[] data, int offset, int length) {if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) {// 识别相关的结果都在这里if (params == null || params.isEmpty()) {return;}if (params.contains("\"final_result\"")) {// 一句话的最终识别结果String regrex = "\\[(.*?),";  //使用正则表达式抽取我们需要的内容Pattern pattern = Pattern.compile(regrex);Matcher matcher = pattern.matcher(params);if (matcher.find()) {int a  = matcher.group(0).indexOf("[");int b  = matcher.group(0).indexOf(",");txtResult.setText(matcher.group(0).substring(a+2,b-3));}}}}

因为返回的结果并不是单纯是识别出的我们所说的话,还有别的内容,所以需要使用正则表达式抽取内容,不抽取的话返回内容如下,明显并不是我们想要的结果

⑥使用真机调试程序(我所用的genymotion模拟器是不支持语音输入的,不知道别的模拟器支不支持),前题你要开启你手机的开发者选项,并允许USB调试与USB安装,不同手机的开启方法不同,自己上网查一下就好。

将手机用数据线连接电脑后会在此处显示你的设备,选中你的手机并运行程序即可

运行测试


大功告成,注意本文只实现了在线识别,没有网络的时候是无法使用的。离线识别功能百度语音识别SDK也支持,不过离线识别只支持预定义的短语。本文只介绍了一个简单的使用例子,要深入学习百度语音识别SDK的使用建议学习下方百度官方技术文档。

参考文档:
csdn:Android百度语音识别
百度官方技术文档:语音技术

项目完整代码:
github:https://github.com/newass001/Android/tree/master/asrtest

作者:余阳臻
原文地址: https://blog.csdn.net/yuyangzhen_/article/details/106738912

android开发-百度语音识别Android SDK的简单使用相关推荐

  1. 百度鹰眼android开发,百度鹰眼Android SDK 运行配置

    下载百度鹰眼轨迹Android SDK V2.1.10示例代码 ,也可能是其他版本; 代码导入Eclispse 或者Android studio,还不能运行,需要配置 开发者申请的移动端AK:api_ ...

  2. qt for android开发百度地图(一步步带图详解)

    qt for android开发百度地图 前言:qt for android开发百度地图,其实找了很多资料,基本上没有,就自己折磨弄了出来,这个过程还是很曲折的,折磨了一两个星期,没有资料,就两个字' ...

  3. Android开发——百度地图定位

    Android开发--百度地图定位 项目需求 项目内容 注册和获取秘钥 获取项目SHA1码 获取项目AK码 AS依赖配置 AS源码 AndroidManifest文件 布局文件 DemoApplica ...

  4. Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材

    AndroidDevTools AndroidSDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6:mirrors.opencas.cn端口:80 IPV4/IPV6:mirr ...

  5. Android开发之语音识别

    Android开发之语音识别 开发背景 RecognizerIntent相关知识 代码解释 完整代码 项目运行及问题解决 开发背景 最近了解了一下Android Q(安卓10),得知Android Q ...

  6. Android集成百度语音识别到HelloWorld需要注意什么?(保姆级教学)

    Android集成百度语音识别怎么避坑? 首先先放一张集成失败的图(记得一定要用真机,因为它不支持VAD,我这里使用Pixel2): 首先你去百度搜索"百度语音识别",或者点击我下 ...

  7. 在一个空的Eclipse中安装Android开发的ADT和SDK

    在一个空的Eclipse中安装Android开发的ADT和SDK 一.eclipse中安装adt插件(http://jingyan.baidu.com/article/8cdccae99b564a31 ...

  8. android开发分页查询,Android开发中实现分页效果的简单步骤

    分页加载在程序开发中是必备的,但是我们实现这个功能并不仅仅为了美观,用户体验也是很重要的,爱站技术频道下面就带大家了解Android开发中实现分页效果的简单步骤,感兴趣的小伙伴们参考看看吧! 具体内容 ...

  9. Android 开发工具集合 - (Android Dev Tools)

    收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. 欢迎大家推荐自己在Android开发过程中用的好用的工具. ...

最新文章

  1. matlab直方图绘制
  2. 【shell 大系】Linux Shell常用技巧
  3. 全网首译 : 初学者终极指南—掌握Scrum敏捷框架—第1章
  4. 电子科技大学通信原理视频教程 瓦特芯收藏
  5. AXIS2整合spring需要的jar,以及大部分缺少jar所报的异常
  6. 1017. A除以B (20)
  7. python地图图表和3d_Python地图可视化三大秘密武器
  8. About abstract class.
  9. 毕业三五年,怎么拿到百万年薪?
  10. “中国十大名校”之争!
  11. 学习WPF/Silverligter网站及资源
  12. 硬盘容量和计算机容量的换算,t和g的换算(硬盘容量G跟T的换算)
  13. upgrade pip‘ command
  14. 标准结构篇:7)塑料齿轮轮系设计总章
  15. 网络间谍:你的共享文件夹网络监视器
  16. 威斯康星大学硕士计算机科学,2020年威斯康星大学密尔沃基分校排名TFE Times美国最佳计算机科学硕士专业排名第90...
  17. 下三角输出和上三角输出
  18. 访问HTTPS请求遇到SSL信任问题
  19. 方舟编译器HelloWorld
  20. 解析:人人都可以做***的勒索模式RaaS到底什么来头?

热门文章

  1. 365天英语口语学习_15,打电话
  2. 夜光带你走进通信网络(七) 新的领域
  3. Donald Trump’s takeover of his party is near complete
  4. 继电器放二极管作用(使用肖特基二极管,开关快,反向并联构成回路)
  5. android 仿美团联动,仿美团弹出分类选择框(左右两个listview联动)
  6. ReactiveCocoa实战: 模仿 花瓣,重写 LeanCloud Rest Api的iOS REST Client.
  7. 阿里云STS认证,golang版本
  8. 华南农业大学 计算机科学与技术,2016年华南农业大学计算机科学与技术专业最低分是多少?...
  9. 硬件设计 之 PCIe常用知识
  10. php直播平台源码基于 Nginx 搭建(rtmp、http)直播服务器