移动开发语音识别

本文介绍了如何利用讯飞的语音识别技术在Android平台上实现语音识别功能。从注册讯飞账号、获取APPID,到下载SDK并将其引入Android Studio项目,再到编写布局和初始化,详细阐述了每个步骤。此外,还提到了语音识别函数、解析和封装过程,以及运行应用所需的权限和环境。
摘要由CSDN通过智能技术生成

语音对我们的重要性

时代一直进步,现在很多技术也越来越新颖,语音技术的出现更是很大的释放了我们的双手,即便你有的字不会写但是会说,又或者你开车没法打字,当然我建议开车肯定不能玩手机,你都可以用语音识别功能进行语音识别,翻译成文字。

语音平台

现在各个公司平台技术都相当成熟,提供了各种sdk等,像谷歌,百度,讯飞等,一开始我是打算使用谷歌平台,但是我们访问他的话速度会比较慢也可能访问不了,所以我选择了国内的平台–讯飞跟百度,两个做使用,这里我做讯飞的介绍,当然你选择谷歌其他的都是ok的。

讯飞操作步骤

注册讯飞

首先我们需要登录 讯飞的网站进行注册登录,注册登录完之后创建我的应用,应用名称分类其他的都填一下在这里插入图片描述

获取创建应用

接着可以查看刚刚创建的应用,里面有APPID,APISecret,APIKey这些都是后面需要用到的的在这里插入图片描述

下载对应的文件

下载语音识别需要的SDK,这里我选择的是Android msc在这里插入图片描述
将下载的文件解压得到了如下所示的文件在这里插入图片描述

将下载的文件引入安卓工程

在andstudio里新建一个工程,将解压文件的libs底下的MSC.jar包复制到工程的libs,然后在点击jar包,右键add as Libary,然后就可以使用了,否则你是用不了的。在这里插入图片描述
接着这是一步很重要的步骤,你需要在工程底下新建一个jniLibs,然后将解压文件里的libs除jar包文件外的其他文件复制到jniLibs底下,这个坑是困扰了我好久,看讯飞的文档里写的是将.so文件放在lib底下就可以,但是就得做修改,否则会遇到21002这个错误,找不到.so在这里插入图片描述
在这里插入图片描述

这一步很多我看到的博客上都没有提到,可能老手本身比较熟悉,对于小白来说,没加这个插件很难发现,比如我,我是看视频解析的时候看到的,你想使用.so文件必须装 ,那就是得配置NDK,NDK可以直接在编译器里在线下载在这里插入图片描述

编写布局代码

布局代码很简单,就一个按钮跟一个TextView控件,按钮是用来启动语音识别功能的,TextView是用来显示语音翻译出的文字在这里插入代码片

<TextView
   android:id="@+id/textview_context"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   app:layout_constraintBottom_toBottomOf="parent"
   app:layout_constraintLeft_toLeftOf="parent"
   app:layout_constraintRight_toRightOf="parent"
   app:layout_constraintTop_toTopOf="parent" />

<Button
   android:id="@+id/button_input"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="语音输入"
   app:layout_constraintBottom_toBottomOf="parent"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   android:onClick="startSpeechClick"/>
   

初始化

首先先初始化,*****填你应用的APPID,这里强调一下,每个应该的SDK都有相对应的APPID,所以有可能你用别人的SDK,在用自己的APPID用不了

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化
        SpeechUtility.createUtility(this, SpeechConstant.APPID+"=5ed0cc97");
    }

语音识别函数

接下来写了一个函数来实现语音识别,这里我用的是RecognizerDialog,当然也可以使用SpeechRecognizer,讯飞语音识别可以支持英语,普通话,粤语等,看你需要什么,有开通什么

public void startSpeechClick(View view){
    RecognizerDialog mDialog = new RecognizerDialog(this, null);
    //2.设置accent、language等参数
    mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
    mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");

    mDialog.setListener(new RecognizerDialogListener() {
        @Override
        public void onResult(RecognizerResult recognizerResult, boolean isLast) {
            if (!isLast) {
                //解析语音
                //返回的result为识别后的汉字,直接赋值到TextView上即可
                String result = parseVoice(recognizerResult.getResultString());
                    textview_context.setText(result);
            }
        }

        @Override
        public void onError(SpeechError speechError) {

        }
    });
    //4.显示dialog,接收语音输入
    mDialog.show();
}

语音解析

接下来写的是语音解析,语音的解析使用的是json,因为我们需要在gradle里面加入 implementation ‘com.google.code.gson:gson:2.2.4’

public String parseVoice(String resultString) {
    Gson gson = new Gson();
    Voice voiceBean = gson.fromJson(resultString, Voice.class);

    StringBuffer sb = new StringBuffer();
    ArrayList<Voice.WSBean> ws = voiceBean.ws;
    for (Voice.WSBean wsBean : ws) {
        String word = wsBean.cw.get(0).w;
        sb.append(word);
    }
    return sb.toString();
}

语音封装

最后写的是语音的封装,用ArrayList进行收集

public class Voice {

    public ArrayList<WSBean> ws;

    public class WSBean {
        public ArrayList<CWBean> cw;
    }

    public class CWBean {
        public String w;
    }
}

在运行之前需要给手机应用赋予权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

运行

运行只能在真机上运行,虚拟机上运行的了,但是他听不了声音,而且需要联网

作者:谢镇群
原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值