前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >讯飞语音

讯飞语音

作者头像
xiangzhihong
发布2018-01-29 16:51:13
1.3K0
发布2018-01-29 16:51:13
举报
文章被收录于专栏:向治洪向治洪

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

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

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

4、android手机

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

当然SDK和API有多个版本可选,按照你的需要下载,其次,下载需要填写资料申请注册,申请通过或可获得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、读取语言识别语法

通过abnf文件并读取该文件,实现指定的语言识别语法,比如为了识别并计算国内两个城市之间的距离,abnf文件的内容可以是如下

代码语言:js
复制
"#ABNF 1.0 gb2312;
language zh-CN;
mode voice;
root $main;
$main = $place1 到$place2 ;
$place1 = 北京 | 武汉 | 南京 | 天津 | 天京 | 东京;
$place2 = 上海 | 合肥;"
Abnf文件的读取参考后面的具体开发实例
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、布局

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

代码语言:js
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/color"
    tools:context=".MainActivity" >
    <ImageView
      android:id="@+id/voice"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="100dp"
      android:src="@drawable/voice"/>
    
     <TextView
        android:id="@+id/result"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:layout_gravity="center_vertical"
        android:layout_width="fill_parent"
        android:text="提示:请说出你所在的城市"/>
    
</LinearLayout>
3、识别语法文件

这里只是简答的识别所说的城市名,其中指定了“北京”、“上海”、“广州”、“深圳”、“厦门”

代码语言:js
复制
#ABNF 1.0 gb2312;
language zh-CN;
mode voice;
root $main;
$main = $where ;
$where = 北京 | 上海 | 广州 | 深圳 | 厦门;
4、MainActivity程序

代码如下,请参考上面的语言识别流程

代码语言:js
复制
package com.example.androidclient;
 
import java.io.InputStream;
import java.util.ArrayList;
 
import com.iflytek.speech.RecognizerResult;
import com.iflytek.speech.SpeechError;
import com.iflytek.speech.SpeechListener;
import com.iflytek.speech.SpeechUser;
import com.iflytek.ui.RecognizerDialog;
import com.iflytek.ui.RecognizerDialogListener;
 
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity{
    //组件
    private ImageView voice = null;
    private TextView result = null;
    private Toast mToast = null;
    
    //语音识别
    private final String APP_ID = "514fb8d7";
    private final static String KEY_GRAMMAR_ID = "grammar_id";
    private RecognizerDialog recognizerDialog = null;
    private String grammarText = null;
    private String grammarID = null;
    
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_main);
        
        this.voice = (ImageView)super.findViewById(R.id.voice);
        this.result = (TextView)super.findViewById(R.id.result);
        
        //初始化识别
        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);
        
        // 读取保存的语法ID
        SharedPreferences preference = this.getSharedPreferences("abnf",MODE_PRIVATE);
        grammarID =preference.getString(KEY_GRAMMAR_ID, null);
        grammarText = readAbnfFile();
        
        
        this.voice.setOnClickListener(new Voice());
        
    }
 
    
    private class Voice 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 onEnd(SpeechError error) {
            if(error != null)
            {
                mToast.setText("登录失败");
                mToast.show();
            }
            else
            {
                mToast.setText("登录成功");
                mToast.show();
            }
        }
 
        @Override
        public void onEvent(int arg0, Bundle arg1) {
        }        
    };
    
    //读取语音识别语法
    private String readAbnfFile()
    {
        int len = 0;
        byte []buf = null;
        String grammar = "";
        try {
            InputStream in = getAssets().open("gm_continuous_digit.abnf");            
            len  = in.available();
            buf = new byte[len];
            in.read(buf, 0, len);
            grammar = new String(buf,"gb2312");
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        return grammar;
 
    }
    //识别结果回调
    private RecognizerDialogListener mRecoListener = new RecognizerDialogListener()
    {
        @Override
        public void onResults(ArrayList<RecognizerResult> results,boolean isLast) {
            String text = "";
            text = results.get(0).text;
            mToast.setText("识别结果为:"+text);
            mToast.show();
            result.setText("识别结果为:"+text);
        }
 
        @Override
        public void onEnd(SpeechError error) {
            MainActivity.this.voice.setImageResource(R.drawable.voice);
        }
        
    };
}
5、给程序相应的权限
代码语言:js
复制
<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"/>

由于本程序用到了网络、麦克风等,需要给定一下权限

6、结果截图

四、项目文件及android程序下载

项目源文件及android程序安装包

下载地址:http://pan.baidu.com/share/link?shareid=494903&uk=3087605183

本站统一解压密码:www.52wulian.org

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-05-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、语音识别流程
    • 1、创建识别控件
      • 2、用Appid登录到科大讯飞服务器(自动连接,需要联网)
        • 3、读取语言识别语法
          • 4、设置识别参数及识别监听器
            • 5、识别结果回调
              • 6、识别结果处理(自行处理)
              • 三、详细开发过程
                • 1、新建Android项目
                  • 2、布局
                    • 3、识别语法文件
                      • 4、MainActivity程序
                        • 5、给程序相应的权限
                          • 6、结果截图
                          • 四、项目文件及android程序下载
                          相关产品与服务
                          语音识别
                          腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档