今天,周六,晚上有约会。不过有些任务必须逼迫自己赶紧完成。要构造一个完善的系统不是三天打鱼两天晒网能够完成的,必须严格按计划执行下去,持之以恒。终有一日会形成规模效应。做Demo很容易,做产品,很难。
百度SDK的集成在它 的官网有完整的教材。
1 申请,你首先需要通过百度的验证,给你开放。
2 集成,集成分为深度定制和使用百度提供的UI快速集成。
具体step-by-step的东西,参考它的手册即可。
我这里只记录一些个人认为有价值的东西。
1 语义理解
“SDK 还支持语义理解能力,可以将用户的语音直接转换成需求意图。语义具有领域性特征,不
属于任何领域的语义是不存在的。同样的语言,在不同的领域中所代表的含义可能截然不同。语义
理解就是把语言在特定领域所代表语义通过计算机可处理的表示方式理解出来。”
这个非常重要,如果我们要深度定制智能家居的语义,我们必须进行定制。
不过暂时,我们先简单集成。
i
1在我们的聊天窗口中加一个按钮“语音”
2 当点击按钮的时候生成一个BaiduASRDigitalDialog,具体参数见其说明文档或者Demo源码,从经验来看,最好是用demo的源码,因为文档的那几行会跑出意想不到的东西。
3 设置回调,在回调中把结果取出来然后设置到输入框中。
部分源码如下:
成员变量:
private Button speechBtn=null; private final static String API_KEY="XYNj1ulsExdUaHv8QhnlqXT9"; private final static String SECRET_KEY="5TY9Q3d3jF0zVXorjXs5o9LGrcN04lUA"; private BaiduASRDigitalDialog mDialog = null; private DialogRecognitionListener mRecognitionListener=null;
在oncreate中初始化相关对象和监听器:
//add for speech speechBtn=(Button)findViewById(R.id.chat_speechbtn); speechBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub loadBdSpeechDialog(); } }); mRecognitionListener = new DialogRecognitionListener() { @Override public void onResults(Bundle result) { // TODO Auto-generated method stub Log.d(LOG_TAG, "onResult"); ArrayList<String> rs = result!=null?result.getStringArrayList(RESULTS_RECOGNITION):null; if(rs!=null&&rs.size()>0) { Log.d(LOG_TAG,"result:"+rs.get(0)); messageInput.setText(rs.get(0)); } } };
其中loadBdSpeechDialog:
public void loadBdSpeechDialog() { ///code from demo messageInput.setText(null); if (mDialog != null) { mDialog.dismiss(); } Bundle params = new Bundle(); params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, API_KEY); params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, SECRET_KEY); params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, BaiduASRDigitalDialog.THEME_BLUE_LIGHTBG); mDialog = new BaiduASRDigitalDialog(this, params); mDialog.setDialogRecognitionListener(mRecognitionListener); // } mDialog.getParams().putInt(BaiduASRDigitalDialog.PARAM_PROP,VoiceRecognitionConfig.PROP_INPUT); mDialog.getParams().putString(BaiduASRDigitalDialog.PARAM_LANGUAGE, VoiceRecognitionConfig.LANGUAGE_CHINESE); mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_START_TONE_ENABLE, true); mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_END_TONE_ENABLE, true); mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_TIPS_TONE_ENABLE, true); mDialog.show(); }
这样就最简单的集成了百度语音sdk。。。还是很好用的,下一步深度定制需要两方面的工作:1,去掉百度的UI,定制自己的;2,语义定制,使得它更好的应用于智能家居中。