100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > android开发-百度语音识别Android SDK的简单使用

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

时间:2023-05-16 03:57:08

相关推荐

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

目录

1.引言2.开发环境3.准备开发环境3.1安装Android studio3.2创建百度智能云平台应用3.1下载百度语音识别SDK4.实现语音识别的简单案例4.1创建Android工程4.2导入core模块4.3配置app依赖core4.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="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/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 = pile(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:/newass001/Android/tree/master/asrtest

作者:余阳臻

原文地址: /yuyangzhen_/article/details/106738912

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。