Android 百度在线语音识别
来源:互联网 发布:淘宝买家id在哪里看 编辑:程序博客网 时间:2024/04/29 02:32
首先需要在百度进行用户注册,然后新建一个应用,选择你需要的服务,并且设置好创建的apk的包名。
然后在AndroidManifest.xml中配置:
然后在AndroidManifest.xml中配置:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.baiduvoicetest"> <!-- 允许应用使用麦克风录音 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 获取当前的网络状态,优化录音及网络参数。--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许应用联网,发送语音数据至服务器,获得识别结果。 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 获取当前wifi状态,优化录音及网络参数 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 获取用户手机的IMEI,用来唯一的标识用户。 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <!-- begin: baidu speech sdk--> <meta-data android:name="com.baidu.speech.APP_ID" android:value="api id" /> <meta-data android:name="com.baidu.speech.API_KEY" android:value="api key" /> <meta-data android:name="com.baidu.speech.SECRET_KEY" android:value="secret key" /> <service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false"></service> <!-- end: baidu speech sdk--> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
AndroidManifest.xml主要配置了一些权限和注册apk时生成的key。百度的文档中还有一个BaiduASRDigitalDialog的activity的注册,不过我没有用到,所以这里就不添加了。
然后将之前下载的jar包添加到lib文件夹,还有几个.so结尾的文件也要添加到main文件夹底下,不然会报错。
完整代码:
public class MainActivity extends Activity implements RecognitionListener { @Bind(R.id.btn_voice) public Button btnVoice; @Bind(R.id.tv_content) public TextView tvContent; private SpeechRecognizer speechRecognizer; private CircleLoadingProgress mLoadingDialog = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); // 创建识别器 speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this, new ComponentName(this, VoiceRecognitionService.class)); // 注册监听器 speechRecognizer.setRecognitionListener(this); } @OnClick(R.id.btn_voice) public void startVoice() { showLoadingDialog("识别中。。。"); start(); } private void start() { Intent intent = new Intent(); bindParams(intent); speechRecognizer.startListening(intent); } public void bindParams(Intent intent) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); // 提示音 if (sp.getBoolean("tips_sound", true)) { intent.putExtra(Constant.EXTRA_SOUND_START, R.raw.bdspeech_recognition_start); intent.putExtra(Constant.EXTRA_SOUND_END, R.raw.bdspeech_speech_end); intent.putExtra(Constant.EXTRA_SOUND_SUCCESS, R.raw.bdspeech_recognition_success); intent.putExtra(Constant.EXTRA_SOUND_ERROR, R.raw.bdspeech_recognition_error); intent.putExtra(Constant.EXTRA_SOUND_CANCEL, R.raw.bdspeech_recognition_cancel); } // 音频源 if (sp.contains(Constant.EXTRA_INFILE)) { String tmp = sp.getString(Constant.EXTRA_INFILE, "").replaceAll(",.*", "").trim(); intent.putExtra(Constant.EXTRA_INFILE, tmp); } // 保存过程中产生的音频文件 if (sp.getBoolean(Constant.EXTRA_OUTFILE, false)) { intent.putExtra(Constant.EXTRA_OUTFILE, "sdcard/outfile.pcm"); } // 离线语音识别路径 if (sp.getBoolean(Constant.EXTRA_GRAMMAR, false)) { intent.putExtra(Constant.EXTRA_GRAMMAR, "assets:///baidu_speech_grammar.bsg"); } // 采样率 if (sp.contains(Constant.EXTRA_SAMPLE)) { String tmp = sp.getString(Constant.EXTRA_SAMPLE, "").replaceAll(",.*", "").trim(); if (null != tmp && !"".equals(tmp)) { intent.putExtra(Constant.EXTRA_SAMPLE, Integer.parseInt(tmp)); } } // 语种 if (sp.contains(Constant.EXTRA_LANGUAGE)) { String tmp = sp.getString(Constant.EXTRA_LANGUAGE, "").replaceAll(",.*", "").trim(); if (null != tmp && !"".equals(tmp)) { intent.putExtra(Constant.EXTRA_LANGUAGE, tmp); } } // 语义解析设置 if (sp.contains(Constant.EXTRA_NLU)) { String tmp = sp.getString(Constant.EXTRA_NLU, "").replaceAll(",.*", "").trim(); if (null != tmp && !"".equals(tmp)) { intent.putExtra(Constant.EXTRA_NLU, tmp); } } // 语义活动检测 // search 搜索(短) // input 输入(长) if (sp.contains(Constant.EXTRA_VAD)) { String tmp = sp.getString(Constant.EXTRA_VAD, "").replaceAll(",.*", "").trim(); if (null != tmp && !"".equals(tmp)) { intent.putExtra(Constant.EXTRA_VAD, tmp); } } // 垂直领域 String prop = null; if (sp.contains(Constant.EXTRA_PROP)) { String tmp = sp.getString(Constant.EXTRA_PROP, "").replaceAll(",.*", "").trim(); if (null != tmp && !"".equals(tmp)) { intent.putExtra(Constant.EXTRA_PROP, Integer.parseInt(tmp)); prop = tmp; } } } @Override public void onReadyForSpeech(Bundle params) { // 准备就绪 } @Override public void onBeginningOfSpeech() { // 开始说话处理 } @Override public void onRmsChanged(float rmsdB) { // 音量变化处理 } @Override public void onBufferReceived(byte[] buffer) { // 录音数据传出处理 } @Override public void onEndOfSpeech() { // 说话结束处理 } @Override public void onError(int error) { StringBuilder sb = new StringBuilder(); switch (error) { case SpeechRecognizer.ERROR_AUDIO: sb.append("音频问题"); break; case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: sb.append("没有语音输入"); break; case SpeechRecognizer.ERROR_CLIENT: sb.append("其它客户端错误"); break; case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: sb.append("权限不足"); break; case SpeechRecognizer.ERROR_NETWORK: sb.append("网络问题"); break; case SpeechRecognizer.ERROR_NO_MATCH: sb.append("没有匹配的识别结果"); break; case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: sb.append("引擎忙"); break; case SpeechRecognizer.ERROR_SERVER: sb.append("服务端错误"); break; case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: sb.append("连接超时"); break; } sb.append(":" + error); tvContent.setText("识别失败:" + sb.toString()); cancelLoadingDialog(); } @Override public void onResults(Bundle results) { ArrayList<String> nbest = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); // 语音结果json格式 String json_res = results.getString("origin_result"); tvContent.setText(nbest.get(0)); cancelLoadingDialog(); } @Override public void onPartialResults(Bundle partialResults) { // 临时结果处理 } @Override public void onEvent(int eventType, Bundle params) { // 处理事件回调 } public void showLoadingDialog(String message) { if (mLoadingDialog == null) { mLoadingDialog = new CircleLoadingProgress(this); } if (message != null) { mLoadingDialog.setMessage(message); } mLoadingDialog.show(); } public void cancelLoadingDialog() { if (mLoadingDialog != null && mLoadingDialog.isShowing()) { mLoadingDialog.cancel(); } } @Override protected void onDestroy() { speechRecognizer.destroy(); super.onDestroy(); ButterKnife.unbind(this); }}
界面布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" tools:context="com.example.baiduvoicetest.MainActivity"> <Button android:id="@+id/btn_voice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="语音" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Hello World!" /></LinearLayout>
其中Constant文件来自于官网demo中。
示意图:
0 0
- Android 百度在线语音识别
- 百度Android在线语音识别SDK使用方法
- android 百度语音识别(离在线)以及唤醒功能
- 百度在线语音识别接入经验
- Android使用百度语音识别
- 百度语音识别-REST-android
- android应用百度语音识别、语音合成和语音唤醒
- 【Android】灵云在线语音识别使用说明
- Android Studio调用百度语音识别API
- Android——百度语音识别
- Android百度语音识别中的若干问题
- Android studio集成百度语音识别api
- Android语音识别——谷歌语音识别与百度语音识别
- 科大讯飞在线语音识别
- 百度语音识别
- node百度语音识别
- iOS-百度语音识别
- 一个简单的语音识别实现---百度在线语音识别REST API SDK(Python)简单使用
- VS2015加入外部库
- HTML的dpr
- 单例解析
- 导弹拦截(最长下降子序列 dp)
- geoserver中sld设置
- Android 百度在线语音识别
- 揭露:内江苏家桥医院怎么骗钱
- 远古流媒体技术在视频新闻中的应用
- 得到file文件内容
- 配置ssh免密码登录
- Python logging 模块和使用经验
- LeetCode OJ-11.Container With Most Water
- Spring内部方法性能监控器
- Oracle ORA-26085:直接路径操作必须启动它自己的事务处理