android语音识别Demo
来源:互联网 发布:医学科普文章 知乎 编辑:程序博客网 时间:2024/05/02 00:04
科大讯飞-语音识别开发
在线语音识别
将连续语音快速识别为文字语音识别在模拟器上是无法测试的,虚拟机mac接收不到声音或者语音识别是访问云端数据,所以如果手机的网络没有开启,就无法实现识别声音的!一定要开启手机的网络,如果手机不存在语音识别功能的话,也是无法启用识别!
效果图
源码
下载地址(Android Studio工程):http://download.csdn.net/detail/kwunyamshan/9692791
注意:源码中是我的sdk,只有三个装机量35天试用期限,你们试用需要替换掉SpeechApp中配置的Appid以及so库!
集成步骤
开通服务,下载SDK
之前介绍过,地址:http://blog.csdn.net/kwunyamshan/article/details/53320164
Step 1. 导入so库 eclipse将so库导入到libs目录下 AS用户将so导入到jniLibs目录下 下载的官方SDK中有七个so库目前已经支持市面上98%的手机 armeabi目录下libmsc.so只支持市面上百分之八十的手机,如果不需要做适配的话导入这一个so库也是极好的
Step 2. 拷贝资产文件 将 SDK 资源包assets 路径下的资源文件拷贝至 Android 工程 asstes 目录下
Step 3. 初始化 这是很重要并且是必须的一步操作,实际上初始化的操作是异步进行的,如果初始化还没有完成你就开始调用了语音识别,是会出现很多问题的,建议在你程序刚刚启动的时候调用
public class SpeechApp extends Application { @Override public void onCreate() { // 应用程序入口处调用,避免手机内存过小,杀死后台进程后通过历史intent进入Activity造成SpeechUtility对象为null // 如在Application中调用初始化,需要在Mainifest中注册该Applicaiton // 注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请增加参数:SpeechConstant.FORCE_LOGIN+"=true" // 参数间使用半角“,”分隔。 // 设置你申请的应用appid,请勿在'='与appid之间添加空格及空转义符 // 注意: appid 必须和下载的SDK保持一致,否则会出现10407错误 SpeechUtility.createUtility(SpeechApp.this, "appid=" + getString(R.string.app_id)); // 以下语句用于设置日志开关(默认开启),设置成false时关闭语音云SDK日志打印 // Setting.setShowLog(false); super.onCreate(); }}
Step 4. 添加用户权限,官方给的API中不规范有几条权限中间有空格导致编译不通过 ,注意一下
<!--连接网络权限,用于执行云端语音能力 --> <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" />
Step 5. 代码
public class MainActivity extends Activity { private StringBuffer mBuffer; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv_translate_text); } public void startVoice(View view) { //1.创建RecognizerDialog对象 RecognizerDialog mDialog = new RecognizerDialog(this, null); //2.设置accent、 language等参数 mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); mDialog.setParameter(SpeechConstant.ACCENT, "mandarin"); //若要将UI控件用于语义理解,必须添加以下参数设置,设置之后onResult回调返回将是语义理解结果 // mDialog.setParameter("asr_sch", "1"); // mDialog.setParameter("nlp_version", "2.0"); mBuffer = new StringBuffer(); //3.设置回调接口 mDialog.setListener(mRecognizerDialogListener); //4.显示dialog,接收语音输入 mDialog.show(); } RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() { //听写结果回调接口(返回Json格式结果,用户可参见附录13.1); //一般情况下会通过onResults接口多次返回结果,完整的识别内容是多次结果的累加; //关于解析Json的代码可参见Demo中JsonParser类; //isLast等于true时会话结束。 @Override public void onResult(RecognizerResult results, boolean isLast) { String result = results.getResultString();//语音听写的结果 String resultString = processData(result); mBuffer.append(resultString); if (isLast) { //话已经说完了 String finalResult = mBuffer.toString(); System.out.println("解析结果:" + finalResult); tv.setText(finalResult); } } @Override public void onError(SpeechError error) { } }; //解析json protected String processData(String result) { Gson gson = new Gson(); VoiceBean voiceBean = gson.fromJson(result, VoiceBean.class); StringBuffer sb = new StringBuffer(); ArrayList<VoiceBean.WsBean> ws = voiceBean.ws; for (VoiceBean.WsBean wsBean : ws) { String word = wsBean.cw.get(0).w; sb.append(word); } return sb.toString(); }}
layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent" ><TextView android:padding="5dip" android:layout_width="match_parent" android:layout_height="230dip" android:id="@+id/tv_translate_text" android:background="#fff" android:textSize="22sp" android:textColor="#000" android:hint="请点击按钮" /><LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:background="#F1AF5A" android:gravity="center" > <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button" android:onClick="startVoice" /></LinearLayout></LinearLayout>
Step 6. 目录结构
遇到问题可以留言探讨会尽快回复,也可以访问官方地址
网址:http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=13040&fromuid=86908
1 0
- android语音识别demo
- Android语音识别DEMO
- android语音识别Demo
- android离线语音识别demo
- android离线语音识别demo
- android离线语音识别demo
- HTML5语音识别 Demo
- Android离线语音识别demo调试(Ubuntu12.04)
- 带有android悬浮窗的语音识别语义理解demo
- html5语音识别的demo
- 手势识别以及语音识别demo
- android 语音对话demo
- android语音合成Demo
- android 语音识别接口
- android语音识别简介
- Android语音识别
- android语音识别代码
- android 本地语音识别
- OpenCV之hog源码分析
- Codeforces 357D Xenia and Hamming【数学+思维】
- 高通8916 PMIC休眠关闭LDO调试记录
- Efficient Estimation of Word Representations in Vector Space
- linux账户相关,rpm,网络
- android语音识别Demo
- MySQL Binlog 研究
- java中重写的一些感悟
- MyBatis基本组件与其生命周期
- zookeeper实现分布式锁
- adb无法运行项目到手机 无法安装应用
- 遇到问题---java---myeclipse中maven项目引用另一个导致的resource文件混乱的问题
- jni头文件生成
- Windows下PyMySQL的安装