欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-14 13:05:30
...

1.引言

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


2.开发环境

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


3.准备开发环境

3.1安装Android studio

Android studio安装教程

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

百度智能云链接

①登录百度智能云之后点击创建应用开始创建平台应用
android开发-百度语音识别Android SDK的简单使用
②打开左侧导航栏找到语音技术
android开发-百度语音识别Android SDK的简单使用
③进入到概览界面中,点击创建应用
android开发-百度语音识别Android SDK的简单使用
④填写新应用相关信息
android开发-百度语音识别Android SDK的简单使用
⑤点击立即创建后再点击查看应用详情,此处的AppID,AppID,Secret Key与包名都是后续需要使用到的,到时直接复制黏贴即可
android开发-百度语音识别Android SDK的简单使用

3.1下载百度语音识别SDK

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


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

4.1创建Android工程

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

4.2导入core模块

①File→New→Import Module
android开发-百度语音识别Android SDK的简单使用
②找到之前解压出的文件中的core文件夹,选择OK→Finish
android开发-百度语音识别Android SDK的简单使用
③此时查看项目目录下的settings.gradle, 可以看见core module已经被加载,同时可以看见core目录的图标,说明导入成功
android开发-百度语音识别Android SDK的简单使用

4.3配置app依赖core

①右击app目录选择Open Module Settings
android开发-百度语音识别Android SDK的简单使用
②在打开的界面选择Dependencies→app→+号→Module Dependency
android开发-百度语音识别Android SDK的简单使用
③在弹出的界面勾选core后点击OK,然后选择Apply
android开发-百度语音识别Android SDK的简单使用
android开发-百度语音识别Android SDK的简单使用
④此时观察build.gradle(module :app)文件,发现自动添加了如下一行
implementation project(path: ‘:core’)
android开发-百度语音识别Android SDK的简单使用
⑤根据app/build.gradle(module :app)更改core/build.gradle(module :core)部分版本号。因为我用的API Level是29所以我改成29,你的不一定和我一样,以你的app/build.gradle(module :app)文件中内容为准。
android开发-百度语音识别Android SDK的简单使用
⑥在你的core\manifests\AndroidManifest.xml文件里,替换你的appId 丶appKey与secretKey为之前你在百度智能云上创建的应用的对应信息
android开发-百度语音识别Android SDK的简单使用

4.4使用百度语音识别SDK

①修改布局文件app\res\layout\activity_main.xml,简单写一个界面即可
android开发-百度语音识别Android SDK的简单使用
代码如下:

<?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">

    <EditText
        android: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" />

    <Button
        android: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" />

    <Button
        android: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开发-百度语音识别Android SDK的简单使用
②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
     */
    @Override
    public 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() {//点击开始按钮
            @Override
            public void onClick(View v) {
                asr.send(SpeechConstant.ASR_START, null, null, 0, 0);
            }
        });
        stopBtn.setOnClickListener(new View.OnClickListener() {//点击停止按钮
            @Override
            public void onClick(View v) {
                asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0);
            }
        });
    }

④在onCreate方法中调用

 @Override
    protected 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这个借口,接下来我们就实现这个接口
android开发-百度语音识别Android SDK的简单使用
⑤实现EventListener接口,要注意这个接口是百度的这个
android开发-百度语音识别Android SDK的简单使用
实现接口的onEvent方法

    /**
     * 自定义输出事件类 EventListener 回调方法
     */
    @Override
    public 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));
                }
            }
        }

    }

因为返回的结果并不是单纯是识别出的我们所说的话,还有别的内容,所以需要使用正则表达式抽取内容,不抽取的话返回内容如下,明显并不是我们想要的结果
android开发-百度语音识别Android SDK的简单使用
⑥使用真机调试程序(我所用的genymotion模拟器是不支持语音输入的,不知道别的模拟器支不支持),前题你要开启你手机的开发者选项,并允许USB调试USB安装,不同手机的开启方法不同,自己上网查一下就好。
android开发-百度语音识别Android SDK的简单使用

将手机用数据线连接电脑后会在此处显示你的设备,选中你的手机并运行程序即可
android开发-百度语音识别Android SDK的简单使用
运行测试
android开发-百度语音识别Android SDK的简单使用
android开发-百度语音识别Android SDK的简单使用
大功告成,注意本文只实现了在线识别,没有网络的时候是无法使用的。离线识别功能百度语音识别SDK也支持,不过离线识别只支持预定义的短语。本文只介绍了一个简单的使用例子,要深入学习百度语音识别SDK的使用建议学习下方百度官方技术文档。

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

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

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