当前位置: 首页 > 编程笔记 >

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

戚兴邦
2023-03-14
本文向大家介绍Android基于讯飞语音SDK实现语音识别,包括了Android基于讯飞语音SDK实现语音识别的使用技巧和注意事项,需要的朋友参考一下

一、准备工作

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

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

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

4、android手机

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

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

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

二、语音识别流程

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截图

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、结果截图:

 


以上就是本文的全部内容了,希望小伙伴们能够喜欢。

 类似资料:
  • 代码封装自科大语音讯飞无UI版本,通过1行代码来实现语音识别 1行代码来实现文字识别,在封装的.h文件中有集成说明。 测试方式:点击“识别语音”,然后对着说话,在Xcode的debug输出窗口可以看到识别的结果。见下面右图。 [Code4App.com]

  • 我使用RecognizerIntent并实现RecognitionListener,并实现其所有回调方法来执行语音命令。我试着调整参数EXTRA\u SPEECH\u INPUT\u MINIMUM\u LENGTH\u MILLIS、EXTRA\u SPEECH\u INPUT\u mably\u COMPLETE\u SILENCE\u LENGTH\u MILLIS和EXTRA\u SPEE

  • 本文向大家介绍Android实现语音识别代码,包括了Android实现语音识别代码的使用技巧和注意事项,需要的朋友参考一下 苹果的iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里面植入,并结合google 的云端技术将其发扬光大。 所以Google Voice Recognition在Android 的实现就变得

  • 我正在寻找一个Android语音识别库。我只需要它来理解“是/否”的答案(用不同的语言,如英语、德语、法语)。 有什么建议吗?

  • [可能重复]但我没有找到下面问题的答案。 在过去的两天里,我一直在做一些语音识别方面的研究,但我的问题没有得到答案: 是否可以将语音识别作为一项服务运行?我想实现这样的功能:虽然我的手机处于睡眠模式,但我需要拨打一个号码

  • 我想构建一个android应用程序,它可以识别我的声音,将其转换为文本,并显示我刚才在祝酒词中所说的内容。我可以通过使用一个按钮来完成这项工作,该按钮将为我启动语音识别器。但现在我想让它只在我的声音的基础上工作。 应用程序应触发语音识别器,仅当我开始说话时才开始听我说话,当它感觉到沉默时应停止听我说话。就像会说话的tom应用程序的功能一样。它记录了声音,但我想用语音识别器识别它。像这样的事情: 主