基于rokid语音控制的智能家居应用体会


(kingvem) #1

一直以来都不懂写文章,这次写下这篇文章主要是希望把自己这段时间以来的一些个人理解分享给各位rokid的爱好者。文章开始前,首先特别要感谢rokid的李工,他是一位非常有耐心的工程师。

自从去年十月份接触了ROKID这个平台后,一直欣喜若狂,受益匪浅!我是一位从事中控工程的技术员,从2012年开始专做快思聪平台的智能家居工程应用及调试。虽然做了几年的所谓智能家居,我自己始终觉得那不算是真正的智能,顶多算得上是比传统操作更方便的家居系统。得益于快思聪系统的强大兼容性,可以把市场上绝大部分的灯光、空调、窗帘、背景音乐、可视对讲、安防、监控、家庭影院系统集中管理起来,通过一个触摸屏或者手机APP进行统一控制、一键式控制等等,这把以前繁琐的操作变得更加方便简单。个人一直把这个称作系统级别的智能家居系统,虽然心里还是觉得它不算真正的智能。最近这两三年智能家居概念在国内兴起,再加上人工智能和物联网也如火如荼。把人工智能的技术应用于智能家居的领域将是一个完美的组合。这个一直是我最期待的,同时也打破自己內心一直的家居智能梦。兜了那么远,回到正题:基于语音控制的国内厂商很多都大力拓展自己的市场占有率,希望自己的智能音箱能控制更加多的家庭设备。因此,市面上出现很多专做智能音箱的厂家比如阿里的天猫精灵,小米的小爱,狗尾草的小白,ROKID的若琪等,还有一大批生产支持语音控制的“智能家电”的厂商。很多人把一个语音音箱加一些无线插座,无线灯泡,无线吸尘器等集合在一起称作为一个智能家居系统。大部分做智能家居的厂家都在拓展自己的兼容性,希望自己的语音设备能控制更多的家电。我个人把这个方向的称之为设备级别的智能家居系统。

国内ROKID的若琪月石智能音箱是我最偏爱的一款语音识别系统。它的外观造型时尚而又不失美感,科技又充满灵性,简直令人爱不惜手。颜色和造型都非常酷,用在不同风格的家居里面显得非常高大上。我个人觉得这个是其它厂家的语音音箱不可比拟的。从技术角度来看,rokid的平台是开放的,你可以在它的云端平台跟进自己的需求进行自定义设计。包括不同的语音情景对话和功能。个人一直觉得这个是rokid的杀手锏。尤其是目前市面上的那么多做智能家居语音识别的厂家,他们都是基于自己的一套封闭的系统去做对接应用。所以把rokid的语音对话情景可编程加上中控系统对接可编程结合起来去应用在智能家居工程里面一定会眼前一亮。之后我还会把rokid平台应用在智能家居领域的几个模块功能写一个技术交流总结。


(kingvem) #2

我手上的是一台月石音箱。月石自己本身跑的是安卓系统,你可以在它上面进行APP开发,在若琪的官网把它定义为native skill。它的语义解析是在云端。也就是说,你对着月石说话,月石把用户说的话传送到云端服务器进行解析之后,再把处理的结果返回到月石,让它进行响应。例如让月石回答你的问题。如果你希望自己开发一个基于语音识别的应用,通常有两种方式,一种就是开发本地的APP,也就是本地技能native skill;另外一种就是开发云端APP,也就是云端技能Cloud skill。云端技能在若琪的框架里面其实就是跑在官方云服务器上的一个APP,这个APP是用JavaScript写的一个应用。用户可以把这个应用代码加载到它的JS engine,并且在上面运行,调试等操作。这个是rokid的非常重要的应用模块,另外还有一个应用模块叫做智能家居。在官网上面有非常详细的协议文档。个人感觉写的可读性不是特别好,如果不是专门从事云端或者程序开发的人员去读懂它是非常吃力的。个人的理解其实它就是一个固化好的云端技能Cloud skill,它的应用方向就是专做智能家居。你可以通过手机APP打开本地驱动,其实就是一个网络TCP或者HTTP的接口。你可以根据智能家居那边的协议规则去注册或者叫创建不同类型的设备。这个设备只是一个逻辑上的虚拟设备,它所具有的功能你可以根据它的官方文档去定义。整个官方文档最核心的概念就是JSON结构。这个对于不是从事软件开发的人员来讲是很吃力的。需要花点心思去了解一下这个概念。当你创建设备完成之后,你还需要在自己的控制系统去写自己的逻辑,通过若琪的TCP或者HTTP的接口去通讯。比如说你在若琪的智能家居手机APP上面注册了一个灯光设备,同时你把这个设备分配到客厅这个区域上。你可以对着若琪说“打开客厅灯光”这时候若琪会把这句话传送到云端,云端解析完成后把结果按照协议的JSON格式返回给若琪,若琪再把数据通过前面说的TCP或者HTTP的接口发送出去。此时你的控制系统监接收到这个TCP或者HTTP接口上面的数据后,再进行开灯的动作。这样一个居于ROKID的智能家居模块的应用的简单实现流程就完成了。使用ROKID自带的智能家居模块非常方便,你只需要在它的框架下安照协议的规则去定义不同的设备和功能即可。如果你是智能家居系统应用的工程商,你只需要在本地搭建的中控主机上面创建一个本地的TCP Socket去和若琪通讯。这样你就可以把若琪的语音控制添加到你原有的智能家居系统里面了。如果你是一个智能电器生产商,希望设计或者生产出能让ROKID兼容的家居设备,你只需要自己的设备按照ROKID的协议去跑即可。当然,使用ROKID自带的智能家居模块也有自己的缺点,就是你只能按照它现有的功能去预设自己的语音指令。这样给人的感觉就是对话情景不够自然。比如说你想打开客厅灯光,你直接丢一条命令“打开客厅灯光”让它去执行。至于一些深层次的互动对话效果就没法做,也就是没有把若琪的杀手锏使出来。比如说,还是要实现打开客厅灯光这个功能,我加点互动的对话在里面:我先对若琪说:打开灯光,这是若琪回答:请问你要打开哪里的灯光?,这时我再说:客厅,此时若琪才把客厅灯光打开。当然这个只是一个举例,其实利用ROKID的对话可编程平台还可以实现很多更炫的互动效果。在智能家居的应用各种,如果能把控制和语音互动结合起来,那就非常完美了。如果要实现这个功能,单靠ROKID自带的智能家居模块就实现不了,这时候就要研究ROKID的云端技能Cloud APP的开发流程了。本人也是从最初的智能家居模块过渡到云端技能的开发,做出来的互动效果比现成的智能家居模块好很多,同时也比市面上其它的很多语音音箱好很多。后续我会把云端技能的一些要点整理出来,再把现场的视频分享出来。


(大发) #3

赞赞,马住再看


(大发) #4

期待分享您的云端技能哦


(pengfei.lv) #5

多谢伙伴的认可,Rokid需要大家多多支持,多多帮助,多多吐槽,才能变得更好。


(kingvem) #6

客气啦,都是根据我个人的理解写的,当中的错漏还请你帮忙指正 ,以免误导其他网友


(kingvem) #7

先给大家分享做出来的效果:


(kingvem) #8

(大发) #9

哇 视频很有感觉呀 再讲讲webhook可好?


(kingvem) #10

哈哈 webhook我也没有测试过 只是大概理解了一下它的原理


(kingvem) #11

Webhook的功能主要是rokid平台对外接收第三方信号的接口。这个功能放在智能家居模块下主要是因为在智能家居系统中经常用到信号触发,例如门禁、安防甚至是按键等信号触发,如果把这些信号实时接入到rokid平台就可以实现一些类似播报的功能。 Webhook的主要实现原理就是,往rokid指定的URL地址上面post一个json结构的数据包,这个数据包里面包含了指定的rokid设备的序列号和需要播报的tts信息等。 实现过程就是: 1.先在rokid APP 上面注册一个URL,这个URL是独一无二的网址,官网是这样定义的:https://homebase.rokid.com/trigger/with/{your_very_awesome_token}大括号里面其实就是一串随机的字符,在注册完后系统自动生成。 2.当你的设备或者系统有信号触发后,就通过POST的方式往上面的URL发送一个数据包,官网是这样定义的: { “type”: “tts”, “devices”: { “sn”: “a_very_random_serial_number_of_rokid” }, “data”: { “text”: “Vive l’amour” } } 里面的sn就是你的目标设备的序列号,data就是你要rokid说的内容。 下面post一个摘取群里面其他同学发出来的测试代码供大家参考:

Rokid测试机信息: 序列号: 020102170200****

比如APP里 WEBhook 生成的URL: https://homebase.rokid.com/trigger/with/HknvsBN4F

//POST请求


User-Agent: Fiddler Host: homebase.rokid.com Content-Length: 129 Content-Type: application/json //Body { “type”: “tts”, “devices”: { “sn”: “020102170200****” }, “data”: { “text”: “大家好我是若琪” } }