Android 开发基于百度语音识别技术的小程序
2015-05-08 13:50
267 查看
Android 开发基于百度语音识别技术的小程序
百度开发者平台为开发者提供了很多工具,虽然我对百度无感,但是因为有了这些工具,使我们开发程序更加快捷、便利。本文将会简单介绍如何使用百度语音识别技术丰富我们自己的程序。背景介绍
随着大家对Siri 的认知,语音识别技术被应用的越来越广泛。对于一个普通开发者而言,是没有精力去开发一个语音识别的模块的,所以利用现有的技术来实现是最好的选择。在下面,我们将会介绍如将百度提供的语音识别技术应用到我们自己的项目中。
准备工作
首先需要在百度的网站上注册成为一个名开发者。无论是用使用微信提供的接口,还是百度提供的,首先都去官网注册成为一名开发者。然后新建自己的应用,并且给自己的应用添加语音识别的功能,这个时候百度会按照你的ID给你生成两个Key,一个是API Key,一个是Secret Key,这两个Key 是需要用在你自己的应用程序中的。
然后去下载页面去下载响应的Android SDK 和一些文档。
利用SDK 进行开发
首先新建一个项目,然后将开发包中的 Libs 目录整体 Copy 到工程目录, Libs 目录包括了各平台的 SO 库, 开发者视应用需要可以进行删减。然后在工程中添加权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
因为百度将语音识别技术集成在BaiduASRDigitalDialog 中,然后通过调用这个Dialog 来做处理。并且通过DialogRecognitionListener 来做消息的响应。所以我们需要新建这两个对象:
private BaiduASRDigitalDialog mDialog = null; private DialogRecognitionListener mRecognitionListener;
我的程序是通过点击一个按钮后,调出语音识别对话框的,代码如下:
public void ClickButton(View v){ //Toast.makeText(getApplicationContext(), "测试", Toast.LENGTH_SHORT).show(); mCurrentTheme = Config.DIALOG_THEME; if (mDialog != null) { mDialog.dismiss(); } Bundle params = new Bundle(); params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, "QRrYgx7bcO11NWUFFG61jtBN"); params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, "iRNUTBM9Tli0px1HqqyYLtdMdy95ChGz"); params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME); mDialog = new BaiduASRDigitalDialog(this, params); mDialog.setDialogRecognitionListener(mRecognitionListener); mDialog.show(); }
当进行完识别后,还需要对识别后的结果作出响应。可以看到上面的代码有一个setDialogRecognitionListener这个函数来做对响应的监听。
下面是我首先的相应监听函数:
mRecognitionListener = new DialogRecognitionListener() { @Override public void onResults(Bundle results) { ArrayList<String> rs = results != null ? results .getStringArrayList(RESULTS_RECOGNITION) : null; if (rs != null && rs.size() > 0) { //setBackgroundColor(rs.get(0)); setPicture(rs.get(0)); } } };
当做完对语音的识别后,百度服务器会返回一个对应的字符串组rs,取出rs的第一个词,来作为结果。
百度对这个语音识别Dialog 分装的很好,非常利于开发者使用,过程就是:
调出BaiduASRDigitalDialog 对象,该对象负责了录音已经上传到服务器中去做处理,得到的结果在DialogRecognitionListener 中予以响应。
我的例子
我做了个简单的例子,你说“苹果”、“梨”、“草莓”、“香蕉”后会将ImageView 设置成对应的图片。首先打开程序后是图一:点击按钮后,弹出对话框,说“香蕉”,画面会改变为香蕉的图片。
下面是MainActivity的代码:
package com.example.voicecontrol; import java.util.ArrayList; import android.R.drawable; import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import com.baidu.voicerecognition.android.ui.BaiduASRDigitalDialog; import com.baidu.voicerecognition.android.ui.DialogRecognitionListener; public class MainActivity extends Activity { private BaiduASRDigitalDialog mDialog = null; private DialogRecognitionListener mRecognitionListener; private int mCurrentTheme = Config.DIALOG_THEME; private Button button; private ImageView iw; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.VoiceControl); iw = (ImageView)findViewById(R.id.Iv); mRecognitionListener = new DialogRecognitionListener() { @Override public void onResults(Bundle results) { ArrayList<String> rs = results != null ? results .getStringArrayList(RESULTS_RECOGNITION) : null; if (rs != null && rs.size() > 0) { //setBackgroundColor(rs.get(0)); setPicture(rs.get(0)); } } }; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void ClickButton(View v){ //Toast.makeText(getApplicationContext(), "测试", Toast.LENGTH_SHORT).show(); mCurrentTheme = Config.DIALOG_THEME; if (mDialog != null) { mDialog.dismiss(); } Bundle params = new Bundle(); params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, "QRrYgx7bcO11NWUFFG61jtBN"); params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, "iRNUTBM9Tli0px1HqqyYLtdMdy95ChGz"); params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, Config.DIALOG_THEME); mDialog = new BaiduASRDigitalDialog(this, params); mDialog.setDialogRecognitionListener(mRecognitionListener); mDialog.show(); } /* * 做处理响应的函数,按钮颜色的变化 */ /*public void setBackgroundColor(String color){ if(color.contains("蓝色")){ button.setBackgroundColor(Color.BLUE); } else if(color.contains("绿色")){ button.setBackgroundColor(Color.GREEN); } else if(color.contains("白色")){ button.setBackgroundColor(Color.WHITE); } }*/ /* * 做处理响应的函数,图片变化 */ public void setPicture(String fruit){ if(fruit.contains("苹果")){ iw.setImageDrawable(getResources().getDrawable(R.drawable.apple)); } else if(fruit.contains("梨")){ iw.setImageDrawable(getResources().getDrawable(R.drawable.pear)); } else if(fruit.contains("香蕉")){ iw.setImageDrawable(getResources().getDrawable(R.drawable.banana)); } else if(fruit.contains("草莓")){ iw.setImageDrawable(getResources().getDrawable(R.drawable.strawberry)); } else { iw.setImageDrawable(getResources().getDrawable(R.drawable.questionmark)); } } }
相关文章推荐
- 基于Android的 拍照上传 程序开发
- 基于Basic4android的Android应用开发指南——第一个Basic4android程序(1)
- 基于Basic4android的Android应用开发指南——第一个Basic4android程序(2)
- 基于Eclipse开发环境的搭建及HelloAndroid示例程序的创建
- Android开发学习笔记(三)——基于Eclipse开发环境的搭建及HelloAndroid示例程序的创建
- 云平台编程与开发(三):创建基于X5Cloud云平台的Hello World程序(运行在Android的手机、平板上)
- 基于CPPUNIT测试框架开发Android平台的测试程序
- 开发基于C++/C资源库的Android程序步骤
- 基于Android的拍照上传程序开发
- Android蓝牙聊天程序的扩展开发(基于Google Sample,类QQ设计)
- Android蓝牙聊天程序的扩展开发(基于Google Sample,类QQ设计)
- 基于msm8909高通平台Android驱动开发之hello程序
- Android中微信小程序开发之弹出菜单
- 【备忘】基于Android的通讯录开发教学视频 下载
- Android开发之Bluetooth API 基本使用-蓝牙小程序
- android NDK开发demo(基于android )
- android开发代码顺序影响程序运行的问题
- 基于 vuforia + unity + android studio 的AR开发(1)
- 开发的一个android程序,总是显示无法运行,就退出了。但是没有报错。求大神解救啊!
- 开发的一个android程序,总是显示无法运行,就退出了。但是没有报错。求大神解救啊!