1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 使用科大讯飞提供的SDK实现android语音识别

使用科大讯飞提供的SDK实现android语音识别

时间:2020-04-29 08:58:50

相关推荐

使用科大讯飞提供的SDK实现android语音识别

#实现android语音识别

下载地址:

/download/huosanghuakai1995/10348660

##一、准备工作

科大讯飞开放云平台:,自行注册。

注册完毕后下载科大讯飞云平台提供的SDK,勾选下面的服务选择android平台后,下载SDK。按照提示完成SDK配置和权限添加工作将在官网下载的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下。在工程 AndroidManifest.xml 文件中添加权限:

<!--连接网络权限,用于执行云端语音能力 --><uses-permission android:name="android.permission.INTERNET"/><!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 --><uses-permission android:name="android.permission.RECORD_AUDIO"/><!--读取网络信息状态 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--获取当前wifi状态 --><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.READ_CONTACTS"/><!--外存储写权限,构建语法需要用到此权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--外存储读权限,构建语法需要用到此权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><!--配置权限,用来记录应用配置信息 --><uses-permission android:name="android.permission.WRITE_SETTINGS"/><!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务--><!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 --><uses-permission android:name="android.permission.CAMERA" />

初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下:

SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");//APPID是你自己注册的APPID,可以自己去查看

##二、开始新建android工程

java代码:

主activity

package com.demo.voice;import java.util.ArrayList;import java.util.Collections;import java.util.List;import sina.CreAmazing.voice.R;import android.app.Activity;import ponentName;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.os.Bundle;import android.text.NoCopySpan.Concrete;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import android.widget.ToggleButton;import com.iflytek.speech.RecognizerResult;import com.iflytek.speech.SpeechError;import com.iflytek.speech.SynthesizerPlayer;import com.iflytek.ui.RecognizerDialog;import com.iflytek.ui.RecognizerDialogListener;import com.iflytek.ui.SynthesizerDialog;import com.iflytek.ui.SynthesizerDialogListener;public class VoiceRecognize extends Activity {// 声明控件private EditText et;private Button bt1;private Button bt2;private Button bt3;private ToggleButton tb;private PackageManager pm;// 全局只设一个String,因为String为final类型,这样做节省内存String text = "";private static final String APPID = "appid=11111111";//定义一个常量APPPID,我自己的不便公开需要修改为你自己的;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//这是后台朗读,实例化一个SynthesizerPlayerSynthesizerPlayer player = SynthesizerPlayer.createSynthesizerPlayer(VoiceRecognize.this, APPID);//设置语音朗读者,可以根据需要设置男女朗读,具体请看api文档和官方论坛player.setVoiceName("vivixiaoyan");//在此设置语音播报的人选例如:vivixiaoyan、vivixiaomei、vivixiaoqiplayer.playText("hello world", "ent=vivi21,bft=5",null);bt1 = (Button) findViewById(R.id.bt_recognize);bt2 = (Button) findViewById(R.id.bt_speek);bt3 = (Button) findViewById(R.id.bt_speek_bg);et = (EditText) findViewById(R.id.et);tb = (ToggleButton) findViewById(R.id.tb);// 初始化监听器initListener();}private void initListener() {bt1.setOnClickListener(myListener);bt2.setOnClickListener(myListener);bt3.setOnClickListener(myListener);}OnClickListener myListener = new OnClickListener() {@Overridepublic void onClick(View v) {// 根据不同View的id调用不同方法switch (v.getId()) {case R.id.bt_recognize:// 这是语言识别部分,最重要的实例化一个// RecognizerDialog并把在官方网站申请的appid填入进去,非法id不能进行识别RecognizerDialog isrDialog = new RecognizerDialog(VoiceRecognize.this, APPID);/** 设置引擎目前支持五种 ”sms”:普通文本转写 “poi”:地名搜索 ”vsearch”:热词搜索* ”video”:视频音乐搜索 ”asr”:命令词识别*/isrDialog.setEngine("sms", null, null);isrDialog.setListener(recoListener);isrDialog.show();break;case R.id.bt_speek:// 这是语言合成部分 同样需要实例化一个SynthesizerDialog ,并输入appidSynthesizerDialog syn = new SynthesizerDialog(VoiceRecognize.this, APPID);syn.setListener(new SynthesizerDialogListener() {@Overridepublic void onEnd(SpeechError arg0) {}});// 根据EditText里的内容实现语音合成syn.setText(et.getText().toString(), null);syn.show();break;case R.id.bt_speek_bg://这是后台朗读,实例化一个SynthesizerPlayerSynthesizerPlayer player = SynthesizerPlayer.createSynthesizerPlayer(VoiceRecognize.this, APPID);//设置语音朗读者,可以根据需要设置男女朗读,具体请看api文档和官方论坛player.setVoiceName("vivixiaoyan");//在此设置语音播报的人选例如:vivixiaoyan、vivixiaomei、vivixiaoqiplayer.playText(et.getText().toString(), "ent=vivi21,bft=5",null);break;default:break;}}};public void openApp(String str){//应用过滤条件,intent启动是应用的顶层 Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); PackageManager mPackageManager =getPackageManager(); //返回给定条件的所有ResolveInfo对象(本质为activity)List<ResolveInfo> mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0); //按包名排序 Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager)); for(ResolveInfo res : mAllApps){//该应用的包名和主Activity String pkg = res.activityInfo.packageName; String cls = res.activityInfo.name; System.out.println("pkg~~~~~~" +pkg); // 打开QQ pkg中包含"qq",打开微信,pkg中包含"mm" if(pkg.contains(str)){ComponentName componet = new ComponentName(pkg, cls);Intent intent = new Intent(); intent.setComponent(componet); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); VoiceRecognize.this.startActivity(intent); } }}// 语言识别监听器,有两个方法RecognizerDialogListener recoListener = new RecognizerDialogListener() {@Overridepublic void onResults(ArrayList<RecognizerResult> results,boolean isLast) {// 新增加了一个ToggleButton tb,首先检查tb是否被按下,如果被按下才进行语言控制,没被按下就进行文字识别if (tb.isChecked()) {// doVoice方法就是进行识别doVoice(results);} else {// 服务器识别完成后会返回集合,我们这里就只得到最匹配的那一项text += results.get(0).text;System.out.println(text);}}// 首先迭代结果,然后获取每个结果,并进行对比,如果包含有特定字符串,那么就执行相应Intent跳转。// 注意 凡是Intent能办到的(发邮件,跳到已安装应用,拨号,发短信,发彩信,浏览网页,播放多媒体。。。。),它就都能办到。private void doVoice(ArrayList<RecognizerResult> results) {Intent i = new Intent();for (RecognizerResult result : results) {if (result.text.contains("天气")) {// 天气界面的跳转i.setClass(VoiceRecognize.this, Weather.class);startActivity(i);} else if (result.text.contains("QQ")) {// 跳转到QQopenApp("com.tencent.mobileqq");//QQ的包名} else if (result.text.contains("短信")) {// 短信界面的跳转i.setAction(Intent.ACTION_VIEW);i.setType("vnd.android-dir/mms-sms");startActivity(i);} else {// 如果没有相应指令就用Toast提示用户Toast.makeText(VoiceRecognize.this, "无法识别",Toast.LENGTH_SHORT).show();}}}@Overridepublic void onEnd(SpeechError error) {if (error == null) {// 完成后就把结果显示在EditText上et.setText(text);}}};}

demo里面的Wether是要跳转的acticity,当语言识别监听器接收到“天气”时会跳转到wether界面。

package com.demo.voice;import sina.CreAmazing.voice.R;import android.app.Activity;import android.os.Bundle;public class Weather extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.weather);}}

下面是xml文件

wether.xml:这是wether界面

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical" android:background="#F5F5DC"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:text="Weather"android:textSize="70dp" android:textColor="#FF1493"/></LinearLayout>

main.xml:这是主界面

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><EditTextandroid:id="@+id/et"android:layout_width="fill_parent"android:layout_height="wrap_content"android:editable="true" /><Buttonandroid:id="@+id/bt_recognize"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:text="Recognize" /><Buttonandroid:id="@+id/bt_speek"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:text="Speek" /><Buttonandroid:id="@+id/bt_speek_bg"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:text="Speek-Background" /><TextViewandroid:textColor="@android:color/white"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="语音控制开关" /><ToggleButtonandroid:id="@+id/tb"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

AndroidManifest.xml:里面有权限获取以及activity的注册

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="sina.CreAmazing.voice"android:versionCode="1"android:versionName="1.0" ><uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name" ><activityandroid:name="com.demo.voice.VoiceRecognize"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name="com.demo.voice.Weather" ></activity><activity android:name="com.demo.voice.News" ></activity></application><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" /></manifest>

##三、功能简介

安装到手机上后,进入应用会朗读文本“hello world”;

可以看到有四个按钮,点击第一个按钮会启动语音听写并加载到文本框里面,点击第二个按钮会朗读文本框里面输入的文本,点击第三个按钮能在后台朗读,点击最后一个按钮可以开关语音控制,语音控制开启后识别到“QQ”,“短信”会打开相应的应用,识别到“天气”会跳转到wether界面;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。