本文为CocoaChina网友ScarlettZhao0602投稿
代码是程序员的朋友,虽然没有热情,但是非常忠实。
前言:
在人工智能这样的大背景下,语音输入语音控制被使用的越来越广泛,与时俱进,我们的移动应用是不是也该跟上时代的步伐了。手动太笨拙,很多时候我们又倒不出来双手,那怎么办,OLAMI的在线语音识别API,自然语言语义理解API和NLI管理系统可以为您轻松解决,释放你的双手。
下面,我为大家介绍使用OlamiSDK来开发一款用语音操控的计算器,怎么做计算器不是目的,目的是为了用这个demo帮助大家更好的理解和使用OlamiSDK完成语音相关的开发。只需要几部简单的配置就好了哦,亲准备好了,发车。
Olami SDK的介绍在下面这个网址
https://cn.olami.ai/wiki/?mp=sdk&content=sdk/ios/reference.html
在这个网址中详细的介绍了Olami SDK包含了那些函数和定义的委托。
step 1:效果展示图
这里我展示了几个简单的对话,上面的sin曲线是识别音量大小的动画。因为本人是个妹子,内心还是很少女的,主色选了粉色调
step 2:前期准备(配置工程):
首先,利用Xcode开发工具创建一个项目,此处我不多说,你们懂的。
Olami SDK下载地址:https://github.com/olami-developers/olami-sdk-ios.git
下载下来之后我们可以看到sdk-libs文件夹,我们只需要把libOlamiRecognizer.a静态库文件和OlamiRecognize.h对外提供接口文件拖入到我们的工程中。
配置工程:
到这前期的准备工作就已经准备好了。亲是不是很简单,我们继续。
step 3:用OlamiSDK实现应用
1.创建Olami应用
点击https://cn.olami.ai/open/website/home/home_show注册创建个人账号并登陆。进入后创建新应用,建好之后进入应用管理可以看到下面界面。
点击查看key:
点击配置模块选择你需要的语音模块,目前有天气,二十四点,新闻,听书,数学等50~多个模块,供大家选择的还是很多的,但如果还是没有你想要的模块我们可以手动创建,后面我会详细介绍,这里我们选一个我已经写好grammar的math模块,选中确定就可以开始使用啦,是不是很方便呐:
2 初始化Olami语音识别对象并设置代理
*CUSID;//终端用户标识id,用来区分各个最终用户 例如:手机的IMEI *appKey;//创建应用的appkey *api;//要调用的API类型。现有3种:语义(nli)和分词(seg)和语音(asr) *appSecret;//加密的秘钥,由应用管理自动生成 -(void)setupOLAMI{ _olamiRecognizer= [[OlamiRecognizer alloc] init]; _olamiRecognizer.delegate = self; [_olamiRecognizer setAuthorization:AppKey api:@"asr" appSecret:AppSecret cusid:macID]; //设置语言,目前只支持中文 [_olamiRecognizer setLocalization:LANGUAGE_SIMPLIFIED_CHINESE]; }
之后我们可以创建一个textView显示,和一个录音的按钮
//设置是语音输入还是文字输入 0 为语音 1为文字输入(这些在OlamiRecognizer头文件里标的很清楚) [_olamiRecognizer setInputType:0]; //isRecording = YES 即为录音模式 if (_olamiRecognizer.isRecording) { //停止录音 [_olamiRecognizer stop]; [_recordButton setTitle:@"开始录音" forState:UIControlStateNormal]; }else{ //开始录音 [_olamiRecognizer start]; [_recordButton setTitle:@"结束录音" forState:UIControlStateNormal]; }
语音结束后会返回结果:调用代理这个方法-(void)onResult:(NSData*)result; 其语义分析后的结果以一个json字符串的形式回调过来,对这个字符串进行解析,就可以获得想要的变量。
后台返回:语音内容是显示在asr字段里,大家可能会有疑问后台怎么识别的我们语音的内容,这是由于我们之前在olami平台创建新应用后导入了一套识别相应内容的grammar,这样olami的语义解析功能会为我们自动识别出想要得到的变量内容。
Calculator[771:285595] json={ data = { asr = { final = 1; result = "/U4e09/U52a0/U4e5d/U52a0/U516d"; "speech_status" = 0; status = 0; }; nli = ( { "data_obj" = ( { content = "/U7ed3/U679c/U7b49/U4e8e18/U3002"; result = 18; } ); "desc_obj" = { result = "/U7ed3/U679c/U7b49/U4e8e18/U3002"; status = 0; }; type = math; } ); }; status = ok; }
step 4:自定制语音模块
olami平台会为广大开发者提供一些已经写好了的语法模块,如果提供给大家的模块不能满足当下解析录入语音的需求,那么不要慌,下面就是教大家如何定制属于自己的模块。
首先.登录,进入我的应用(没有应用的话记得创建新应用哦),然后点击“进入NLI系统”。下面是点击之后的界面,可以看到右上角有导入和新增
点击导入,可以看到如下界面,这里是已经有的模块有需要的直接导入:
重点:
如果没有所需的模块,那么就需要点击”新增“。当下我们做的是计算器那就给个名字,输入calculate,提交成功后可以看到我的模块里面有了一个新模块,:
到这,点击calculate后面的进入模块。界面中有例句库,grammar,rule,slot,template模板。举个简单的栗子,帮我算一下八加三等于几
思路:八、加、三是我们需要系统帮我们识别并且返回给我们的变量,那就可以在slot设置三个变量,帮我或者给我,等于多少或等于几
类似这种我们可以设置到rule中,最后注意这两个都是为grammar服务的,要显示句子要写grammar,一切就绪提交成功了之后,就可以测试了,测试无误满足需求,点击“发布”就可以使用啦!话不多说上图更直观:
1.新增grammar:
添加语料
2.写出希望可以识别的一句grammar
到这可能有人要问了()、[]这些符号都是什么呀,我就简单说一下,比如[ ] 是指可有可无的。要更多的了解点击这里查看OSL 语法描述语言 grammar的简介,写的很详细https://cn.olami.ai/wiki/?mp=overview&content=quickstart.html
3.最后测试无误一定要点发布哦
4.完成配置
以上都完成了回到应用管理,我们就可以配置自己搭建的模块喽!
再来测试一下,噔噔噔噔~可以使用了,变量都帮我们识别出来了耶!
又get一项技能有没有点小兴奋!
本次demo的github下载地址:
https://github.com/zhaoshihui/olamiCalculator.git
好啦,最后希望路过的各位大神多多支持,喜欢的点个赞鼓励下,有问题可以留评论互相探讨。笔芯笔芯笔芯~