Android基于讯飞语音SDK实现语音识别

作者:hebedich 时间:2023-09-26 23:39:05 

一、准备工作

1、你需要android手机应用开发基础

2、科大讯飞语音识别SDK android版

3、科大讯飞语音识别开发API文档

4、android手机

关于科大讯飞SDK及API文档,请到科大语音官网下载:http://www.xfyun.cn/

当然SDK和API有多个版本可选,按照你的需要下载,其次,下载需要填写资料申请注册,申请通过或可获得Appid

如下图,申请一个APPID,就可以了。

Android基于讯飞语音SDK实现语音识别

二、语音识别流程

1、创建识别控件

函数原型

Public RecognizerDialog(Context context,String params)

其中Context表示当前上下文环境,传this即可

Params有参数详见API文档

2、用Appid登录到科大讯飞服务器(自动连接,需要联网)

主要用到SpeechUser(com.iflytek.speech包下)类下的getUser().login()函数

其中getUser()表示获取用户对象,可以实现用户登录,注销等操作

Login函数原型

Public boolean login(Context context,String usr,String pwd,String

参数详见API文档

3、读取语言识别语法

详见API文档

4、设置识别参数及识别 *

通过RecognizerDialog下的setEngine()方法设置参数

函数原型

public void setEngine(String engine,String params,String grammar)

详细的参数请参考API文档

5、识别结果回调

需要实现RecognizerDialogListener接口,其中有两个方法需要重写,分别是

1)public void onResults(ArrayList<RecognizerResult> results,boolean isLast)

其中result是RecognizerResult对象的集合,RecognizerResult的属性有

String text 识别文本

Int confidence 识别可信度

2)public void onEnd(SpeechError error)

6、识别结果处理(自行处理)

自己将文本进行处理。

三、详细开发过程

1、新建Android项目

和普通的android项目一样,只是需要加入科大讯飞语言SDK包,主要包括

Msc.jar及libmsc.so动态库文件,项目lib截图

Android基于讯飞语音SDK实现语音识别

2、布局

这里只进行简单的布局,只设置一个按钮作为语言识别按钮及一个文本组件用作显示识别结果,布局文件如下:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical"
 tools:context="${relativePackage}.${activityClass}" >

<EditText
   android:id="@+id/editText"
   android:layout_width="fill_parent"
   android:layout_height="300dp"
   android:gravity="top"
   android:inputType="textMultiLine" >

<requestFocus />
  </EditText>
  <Button
    android:id="@+id/button_start"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="点击开始说话" />

</LinearLayout>

3、Main.java代码如下:


public class Main extends Activity {

// 组件
 private Button button = null;
 private TextView result = null;
 private Toast mToast = null;

// 语音识别
 private final String APP_ID = "这里改成自己的APP_ID";
 private RecognizerDialog recognizerDialog = null;

@Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   super.setContentView(R.layout.main);

button = (Button) super.findViewById(R.id.button_start);
   result = (TextView) super.findViewById(R.id.editText);

// 初始化识别
   mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
   mToast.setMargin(0f, 0.2f);
   recognizerDialog = new RecognizerDialog(this, "appid=" + APP_ID);
   SpeechUser.getUser().login(this, null, null, "appid=" + APP_ID, loginListener);

this.button.setOnClickListener(new Btn());

}

private class Btn implements OnClickListener {

@Override
   public void onClick(View v) {

//MainActivity.this.voice.setImageResource(R.drawable.voicelight);
     recognizerDialog.setListener(mRecoListener);
     recognizerDialog.setEngine(null, "grammar_type=abnf", grammarText);
     recognizerDialog.show();
   }
 }

// 语音识别用户登录 *
 private SpeechListener loginListener = new SpeechListener() {

@Override
   public void onData(byte[] arg0) {
   }

@Override
   public void onEvent(int arg0, Bundle arg1) {
   }

@Override
   public void onEnd(SpeechError arg0) {
     // TODO Auto-generated method stub
     if (arg0 != null) {
       mToast.setText("登录失败");
       mToast.show();
     } else {
       mToast.setText("登录成功");
       mToast.show();
     }
   }
 };

// 识别结果回调
 private RecognizerDialogListener mRecoListener = new RecognizerDialogListener() {

@Override
   public void onEnd(SpeechError error) {
     //MainActivity.this.voice.setImageResource(R.drawable.voice);
   }

@Override
   public void onResults(ArrayList<RecognizerResult> results, boolean isLast) {
     // TODO Auto-generated method stub
     String text = "";
     text = results.get(0).text;
     mToast.setText("识别结果为:" + text);
     mToast.show();
     result.setText("识别结果为:" + text);
   }

};

}

4、需要的权限:


 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.RECORD_AUDIO"/>
 <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"/>

5、结果截图:

 Android基于讯飞语音SDK实现语音识别

Android基于讯飞语音SDK实现语音识别

标签:Android,语音识别
0
投稿

猜你喜欢

  • 登录验证全局控制的几种方式总结(session)

    2022-09-03 15:25:41
  • JavaSE实现猜拳游戏

    2023-12-22 07:21:19
  • android自定义进度条渐变圆形

    2022-07-15 02:04:14
  • C#多线程系列之资源池限制

    2022-01-02 17:11:04
  • Java 高并发八:NIO和AIO详解

    2023-01-29 15:50:51
  • 谈谈Java类型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType

    2022-10-18 17:43:07
  • 拉钩网java笔试题分享

    2022-02-13 08:48:25
  • C#获取Description特性的扩展类详解

    2022-06-04 13:27:24
  • Android Studio三方引用报错但是项目可以运行的解决方案

    2022-06-05 19:28:56
  • java8 集合之Stack详解及实例

    2023-08-02 16:04:07
  • Mybatis利用OGNL表达式处理动态sql的方法教程

    2022-11-26 22:22:02
  • 玩转Android之Drawable的使用

    2023-07-01 22:42:46
  • 解决在Unity中使用FairyGUI遇到的坑

    2023-10-27 13:04:24
  • Java集合之Map接口的实现类精解

    2023-10-07 15:10:37
  • Java网络编程之TCP通信完整代码示例

    2022-10-18 21:42:57
  • .Net WInform开发笔记(五)关于事件Event

    2023-11-22 01:00:18
  • Android 中View.onDraw(Canvas canvas)的使用方法

    2022-11-16 16:40:48
  • java编写简易贪吃蛇游戏

    2021-08-03 02:53:49
  • Java使用5个线程计算数组之和

    2022-07-25 21:41:37
  • java equals函数用法详解

    2022-07-31 06:40:20
  • asp之家 软件编程 m.aspxhome.com