转载请注明CSDN地址:http://blog.csdn.net/ls0609/article/details/72765789
语音在线听书demo:http://blog.csdn.net/ls0609/article/details/71519203
前言
国内语音识别技术已有多家,而olami不仅在语音识别上准确率较高,更重要的是在语义理解上十分强大,本文用olami sdk做了一个记账demo(记账部分代码参考开源代码),这个demo可以语音添加不同消费记录,查询当天,当月消费情况,删除消费列表中的记录。让我们一起来感受下olami如何实现强大的语义理解。
1.demo支持的说法
demo中实现的说法主要有如下几种(同类说法可以很多,没有全部列举):
今天餐饮开销一百元
今日交通出行五十元
本月15号日常购物一百元
这个月水电煤气两百元
查询今天的账单
查看今日的消费情况
今天的账单
今日消费
查询这个月的消费情况
查看本月消费
本月的账单
删除第一条
删除第一个记录
删除第五条消费记录
2. demo实现的效果图
3.olami的初始化和回调用法
初始化部分参考源码MainActivity.java中init()函数
public void init()
{
initHandler();
mOlamiVoiceRecognizer = new OlamiVoiceRecognizer(MainActivity.this);
TelephonyManager telephonyManager=(TelephonyManager)this.getSystemService
(this.getBaseContext().TELEPHONY_SERVICE);
String imei=telephonyManager.getDeviceId();
mOlamiVoiceRecognizer.init(imei);//set null if you do not want to notify olami server.
mOlamiVoiceRecognizer.setListener(mOlamiVoiceRecognizerListener);//设置识别结果回listener
mOlamiVoiceRecognizer.setLocalization
(OlamiVoiceRecognizer.LANGUAGE_SIMPLIFIED_CHINESE);//设置支持的语音类型,优先选择中文简体
mOlamiVoiceRecognizer.setAuthorization(
"573031596fd746fca478e5cccf6ca9e2","asr","d5307ed38df64ab6a08e467c00c81d37","nli");
//注册Appkey,在olami官网注册应用后生成的appkey
//注册api,请直接填写“asr”,标识语音识别类型
//注册secret,在olami官网注册应用后生成的secret
//注册seq ,请填写“nli”
mOlamiVoiceRecognizer.setVADTailTimeout(2000);//录音时尾音结束时间,建议填//2000ms
mOlamiVoiceRecognizer.setLatitudeAndLongitude(31.155364678184498,121.34882432933009);
//设置经纬度信息,不愿上传位置信息,可以填0
}
注册一个回调,用于各种回调,可以更新界面和处理服务器返回数据。
private class OlamiVoiceRecognizerListener implements IOlamiVoiceRecognizerListener{
@Override
public void onError(int errCode) {
//出错回调
mHandler.sendMessage(mHandler.obtainMessage(
MessageConst.CLIENT_ACTION_ON_ERROR,errCode,0));
}
@Override
public void onEndOfSpeech() {
//录音结束回调
mHandler.sendEmptyMessage(MessageConst.CLIENT_ACTION_STOP_RECORED);
}
@Override
public void onBeginningOfSpeech() {
//录音开始回调
mHandler.sendEmptyMessage(MessageConst.CLIENT_ACTION_START_RECORED);
}
@Override
public void onResult(String result, int type) {