博客> Android源码-智能语音输入查询天气app
Android源码-智能语音输入查询天气app
2018-08-15 21:48 评论:0 阅读:510 FarinaZhang
Android olami 智能语音 人工智能 天气app

现在智能家居越来越普及,智能语音输入也成为一项很方便的工具,可以告别传统的文字输入,可以根据输入的内容,完成相应的对话及功能。OLAMI 人工智能开放平台让你只需通过几个简单的步骤和代码,就能让你的应用程序或设备更加智能更加人性化,并提供趋近完美的用户体验(OLAMI介绍)。本文章就是介绍怎么使用 OLAMI 人工智能开放平台(以下简称为OLAMI开放平台)及sdk开发出一个简单的智能语音输入天气app。天气功能及画面参考开源项目https://git.oschina.net/way/WayHoo 的代码,不详细介绍。

  1. 下载sdk:  下载sdk.png

要使用OLAMI人工智能开发平台首先需要下载相应的sdk,如图将下载下来的voicesdk.jar 放在jniLibs下,将libspeex.so放在jniLibs下的armeabi下。Voicesdk.jar 是用来语音录音,识别语音结果,然后发送给OLAMI平台进行解析,返回相应的json 格式结果,供用户解析。

  1. 文件结构 imain 文件夹为主要的语音实现功能和主界面,其他文件目录为获取天气相关数据的和显示相关card的文件夹。

  2. 代码详解 WeatherMainActivity.java 主要初始化页面及各个变量,创建Handler 以进行消息传递。创建Task 查询天气并刷新界面显示。

VoiceSdkService.java初始化智能语音识别相关参数 ,详细可参考 https://cn.olami.ai/wiki/?mp=sdk&content=sdk/android/reference.html

mViaVoiceRecognizer = new OlamiVoiceRecognizer(VoiceSdkService.this); //创建OlamiVoiceRecognizer 对象 TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(this.getBaseContext().TELEPHONY_SERVICE); String imei = telephonyManager.getDeviceId(); mViaVoiceRecognizer.init(imei); //设置用户号,用于区分用户,一般设置为iemi号

mViaVoiceRecognizer.setListener(mViaVoiceRecognizerListener); //设置语音设备listener,监听语音识别开始,结束,结果,及各种出错。 mViaVoiceRecognizer.setLocalization(OlamiVoiceRecognizer.LANGUAGE_SIMPLIFIED_CHINESE);// 设置返回结果语言类型,目前支持简体和繁体 mViaVoiceRecognizer.setAuthorization("0fabfbd3db2546a0b48628a4354801f8", "asr", "0a714958eef844869175f9507a074c17", "nli") // 第一个参数为在OLAMI开放平台上创建的应用的App Key ,第三个参数为App Secret,其他两个值固定。

mViaVoiceRecognizer.setVADTailTimeout(3000); // 设置录音结束时间 ,即3分钟没有输入认为录音结束。

mViaVoiceRecognizer.setLatitudeAndLongitude(31.155364678184498, 121.34882432933009); // 设置默认位置

 我的应用.png

@Override public void onResult(String result, int type) { Log.d(TAG, "onResult ,result=" + result); //{"data":{"asr":{"result":"上海的天气","speech_status":0,"final":true,"status":0},"nli":[{"desc_obj":{"status":0},"semantic":[{"app":"sample","input":"上海的天气","slots":[{"name":"city","value":"上海"}],"modifier":["chacitytianqi"],"customer":"58df54a484ae11f0bb7b488b"}],"type":"sample"}]},"status":"ok"} getValidData(result); }

onResult 函数为OLAMI开放平台结合用户编写的grammar返回的json结果,可以根据实际需求进行解析和显示。 如:本app 中用户语音输入 “上海的天气”,对应的在OLAMI开发品台上的Grammar 为:

 编辑grammar.png

返回的json结果为

 json 返回.png

3.1 modifier:chacitytianqi 对应grammar 中 modifier.png 表示这句语法被匹配上后要送出去的意图。同一应用中每个grammar 的modifier 应该都是唯一的不同的,已变用户区分输入的语句。

3.2 Type: sample 对应OLAMI开发平台上对应的模块名。

3.3 slots:  slots1.png 表示现在输入的是上海, 当查询“北京的天气”时,value值为“北京”, slots根据编写的grammar,可以有多个json成员。如: slots2.png

3.4 status:ok 表示正常返回Json数据。

如何创建grammar 及 grammar 中用的slots 和rule详细解析可参考 https://cn.olami.ai/wiki/?mp=nli&content=nli2.html

  1. 该app 目前支持的查询范围: 查看各个城市的天气 ,如:上海的天气,北京的天气,显示所有天气数据 查看空气质量,如:空气质量,上海的空气质量,等。画面只显示空气质量数据card。 查看一周天气,如: 明天的天气 , 一周的天气, 一周北京的天气,等。画面只显示预报一周的card。 查看今天的天气,如 :今天的天气,今天上海的天气。 画面只显示一天天气的card 查看指数, 如: 穿衣指数, 空气指数、 天气指数 。 画面只显示指数card 详细代码 https://github.com/farinaZhang/open_weather  w1.png

     w2.png

     w3.png

     w4.png

     w5.png

     w6.png

quote here

收藏
0
sina weixin mail 回到顶部