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

目录

    • 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创建百度智能云平台应用

百度智能云链接

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

3.1下载百度语音识别SDK

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


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

4.1创建Android工程

android开发-百度语音识别Android SDK的简单使用_第7张图片
android开发-百度语音识别Android SDK的简单使用_第8张图片

4.2导入core模块

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

4.3配置app依赖core

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

4.4使用百度语音识别SDK

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


<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的简单使用_第20张图片
②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的简单使用_第21张图片
⑤实现EventListener接口,要注意这个接口是百度的这个
android开发-百度语音识别Android SDK的简单使用_第22张图片
实现接口的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的简单使用_第23张图片
⑥使用真机调试程序(我所用的genymotion模拟器是不支持语音输入的,不知道别的模拟器支不支持),前题你要开启你手机的开发者选项,并允许USB调试USB安装,不同手机的开启方法不同,自己上网查一下就好。
android开发-百度语音识别Android SDK的简单使用_第24张图片

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

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

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

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

你可能感兴趣的:(android,语音识别)