查看: 10283
回复: 14
参赛作品《居家精灵》(基于NLP自然语言处理技术的智慧家居控制系统)

主题

回复
发表于2018-05-31 21:39:15 | 显示全部楼层
1# 电梯直达

【报名阶段需要填写的内容】


1. 参赛者姓名(必填项):刘奇胜


2. 单位或学校名称(选填项):电子科技大学


3. 当前职务或职称(选填项):学生


4. 参赛作品的名字(必填项):居家精灵


5. 简要陈述您的idea和作品(必填项):

本作品致力于利用百度AI平台开放的NLP技术赋予普通家电灵魂,使普通家电具备对话交互的能力,消灭传统智能家居APP纷乱复杂的控制按钮界面,让用户仅靠自然的语音即可接管整个家庭的家电设备。作品将包括一个用STM32单片机作为主控的居家精灵主机硬件,一个服务器程序用于APP和主机硬件间远程控制信息的转发,以及一个与用户进行直接交互的安卓APP.



6. 拟用到的立创商城在售物料(必填项):STM32F103RBT6单片机,  XC6206电源管理芯片, SN74LVC1G08逻辑芯片,  贴片电容, 贴片电阻, usb接口, 晶振, 红外发射管,三极管,贴片LED等


7. 拟用到的非立创商城物料或其它补充(必填项):串口转WIFI模块


8. 拟用到的EDA工具软件名称(必填项):立创EDA设计工具软件


【作品正式发表(报名成功后进入设计阶段)需要填写的内容】


一、作品简介

例如,可以包括但不局限于以下内容:

1.作品的整机外观图片或焊接组装好的PCBA图片:

作品由一个以STM32单片机作为主控的居家精灵主机硬件,一个云服务器程序,以及一个与用户进行直接交互的安卓APP组成.以下是作品硬件部分的外观图及PCB图片:

  

图1.整机外观

点击查看大图 

图2.硬件组成

点击查看大图

图3. 立创商城打样的PCB空板

 

图4.APP主要界面

2.作品的研究背景、目的和功能、市场应用前景;

研究背景智能家居这个概念出来已经很久了,但一直不温不火的感觉,没怎么普及,我大三的时候曾在一家智能家居公司实习,过程中就发现一个很主要的原因是用户要面对的操作界面太复杂了,即使你设计了很漂亮的UI界面。要控制个电器找都要找半天。从交互体验这点上来说,传统的智能家居系统可以说就是智能的手动了,并没有完全解放我们的双手。当亚马逊的ECHO语音智能音箱出来后,大家都眼前一亮,仿佛找到了智能家居新的入口。国内各大厂也纷纷跟进,比较耳熟能详的有小米的小爱同学还有阿里的天猫精灵。智能音箱虽然实现了智能的语音交互,但是无法满足远程控制的需求,并且用于远场拾音的麦克风阵列也使得硬件成本较高,且控制家电时仍然需要配合额外的红外转发器来实现。而个人认为我们现在手机几乎是随身携带的,使用手机进行语音交互就已足够,可以省却音箱的成本,另一方面相较于传统的智能家居系统,利用自然语言处理技术来进行交互,使得整套系统也没有了纷繁复杂的控制按钮界面。恰好百度开放了其自然语言处理的训练平台UNIT,开发者只需搭建语义理解模型并提供标定好的原始语料即可训练泛化得到语义理解模型,并通过sdk进行调用。因此便着眼于自己寝室控制空调的需求开发这么一整套系统。


目的和功能:本作品致力于利用百度UNIT平台赋予普通家电灵魂,使普通家电具备对话交互的能力,消灭传统智能家居APP纷乱复杂的控制按钮界面,让用户仅靠自然的语音即可接管整个家庭的家电设备。目前作品已实现对美的空调的对话控制功能,包括(定时)开关机、温度风速模式等的调整,并在本人宿舍实现部署。目前,具体的功能如下:

1 居家精灵当前功能详述

作品功能

需提供的信息

可用话术举例

开机/温度控制

温度(17-30

“开到23度”

“帮我把空调开到27度”

模式调整

模式(制热/制冷/自动/抽湿/送风)

“开制冷”

“切换到制热模式”

风速调整

风速(自动/低风/中风/高风/调高/调低)

“风速开到最大”

“风速开高点”

定时开机

定时时间、温度

“半小时后把空调开到23度”

“晚上十点把空调开到24度”

定时关机

定时时间

“记得晚上十点关空调”

“半小时后关闭空调”


市场应用前景:


伴随科技的迅速发展及人们生活水平大幅度提高,现代人们越来越不满足于现有的生活现状,取而代之的是对更加舒适的高品位生活环境的迫切追求。

2014 年初,国际物联网贸易与应用促进协会发布了《2013 年度中国智能家居行业研究报告》,报告中称,未来三年,中国智能家居市场增速会不断提升,到2016 年预计可达到29.17%,预测2017 年中国智能家居行业市场规模将达80 亿元。根据IDC 数据显示,到2025 年,亚太智能城市的投资总额约为1.04 万亿美元。全球来讲,安全和控制能源或照明(分别占比55%和53%)是智能家居应用的首选,而娱乐与智能互联排名在第三位(48%),健康智能家电并列第四位(均为43%)。

随着控制技术和交互方式的不断发展,智能家居控制方式也呈现出多元化发展的趋势。在传统产品智能化升级的过程中,APP成为走向智能化的必备要素,也开始被众多终端用户所认知。此外,不断成熟的语音控制与传感器技术也为广大用户提供了无需手动操作的新兴控制方式选择。

谷歌发布的一项研究数据表明,随着人工智能技术的发展,语音识别的准确度不断提升,全球虚拟语音市场规模不断攀升,2013-2017年期间语音交互被人们广泛接受的百分率从77%上升至95%。在美国,安卓上的语音搜索占20%,百度语音上搜索占10%,到2020年,所有搜索中至少50%为图像搜索或语音搜索。

语音技术搭配自然语言处理技术(NLP)将解放人类双手和眼睛,革新目前绝大多数场景下的人机交互方式。未来物联网、智能家居、可穿戴设备、机器人等应用场景将此变得更大强大。 因此,基于对话交互的智能家居控制系统中也逐渐成为一种新的趋势。

1) 市场需求巨大

根据中国报告大厅发布的《20162021年中国智能家居行业发展分析及投资潜力研究报告》,据测算,我国智能家居潜在市场规模约为58万亿元,2018年我国智能家居市场总规模有望达到225万亿元,发展空间巨大。其中,家电类智能家居产品市场份额最高。预计我国智能家居市场未来35 年的整体增速约为 13%,市场爆发时点尚未到来。

2) 市场潜力巨大

据市场调研公司《Markets And Markets》近日发布报告称,全球智能家居市场规模将在2022年达到1220亿美元,20162022年年均增长率预测为14%。亚洲2016年在智能家居市场上的收入达到24966万美元,在家庭的普及率为019%,预计在2020将达到097%。据统计,智能家居的平均收入金额为153482美元。智能家居行业发展的潜力吸引众多资本加入,谷歌、苹果、微软、三星、华为、小米、魅族等众多科技公司入局,在其努力之下,全球智能家居行业前景看好。

3) NLP是人工智能(AI)的重要分支

人工智能和大数据已经在不断创造商业价值和社会价值,随着技术的逐渐成熟,其本身蕴藏的潜力可以实现更深的挖掘,从而开启更大的想象空间。国家发改委20165月发布的《互联网+”人工智能三年行动实施方案》指出,我国3年内将形成千亿级人工智能市场规模。

2015年6月,亚马逊就发售了智能音箱echo,将NLP技术植入到传统音箱中,从而赋予了音箱人工智能的属性。201611月谷歌发售智能音箱Google Homeecho展开角逐。苹果公司也推出了新款智能音箱HomePod,最近阿里巴巴也发布了类似产品天猫精灵。

由此可见NLP已被各大企业给予厚望,在未来控制端有希望带出一个新的潮流风向。





3.作品在创新性、趣味性、实用性甚至公益性方面,有哪些亮点可体现?

创新性:相较于传统的智能家居系统,本作品利用语音或者文字输入,以最接近人类间聊天的形式进行家电的控制(话术基本类似于吩咐保姆干活),消灭传统智能家居APP纷乱复杂的控制按钮界面;另一方面,相较于当下的智能音箱,本系统使用手机作为交互入口,成本大大降低。


实用性:仅就作品当前阶段来说,已经完全实现了空调遥控器的大部分功能,且定时开关机功能要比遥控器使用起来方便了不少,想象一下在寒冷的冬天,为了省电,你只需要先爬进被窝,打开APP,对它说:“记得一小时后帮我把空调关了”“明天早上六点半把空调打开”就可以安心入睡了,或者不愿意动口,你在聊天框输入即可。待你入睡后,居家精灵会记得您的吩咐把空调关了,并在第二天早上快要起床的时候把空调提前打开。至少,对于我这种大冬天早上冻得起不来的学生党来说,我是觉得超实用了。未来,本作品还会继续扩展以支持更多电器类型的控制。


二、系统构架图

用流程图或思维导图等形式,描述您的作品的组成构架,即方案图。

 点击查看大图

图5 整体系统架构及各部分主要功能

居家精灵的系统架构如图5所示,作品主要包括三大部分:居家精灵APP、服务器程序以及居家精灵控制主机,下面分别阐述其作用。

  • 1、居家精灵APP:APP负责与用户直接交互,通过百度提供的语音识别获得原始语料,然后交给UNIT平台,一方面将得到的回复语通过语音合成播放出来,另一方面根据词槽信息生成家电控制命令,通过TCP连接向服务器发送控制指令。
  • 2、服务器程序:服务器主要负责用户资料的管理、用户身份验证,以及充当APP与居家精灵控制主机间通信的桥梁,使得APP发出的控制指令能顺利传递给居家精灵控制主机予以执行。
  • 3、居家精灵控制主机:控制主机负责直接控制家电,目前主要指空调,其借助串口wifi模块通过家庭路由器连接上服务器。每次控制主机上电时都会立即对服务器发起TCP连接请求,并上报自身ID,且具备检测到连接中断自动重连的功能。目前来说,当收到空调控制命令后,利用预置的空调红外编码协议,将控制命令转化为红外信号通过红外发射管实现对空调的控制。

下图则是居家精灵控制主机,也就是我们作品硬件部分的一个组成框图,可以看出作品硬件是相对来说比较简单的:

 点击查看大图






三、硬件部分的描述

1.附上原理图&PCB实物图的图片或者源文件(官方建议大家尽量用源文件上传),如果是图片,请确保图片是清晰可辨的;

使用立创EDA进行设计,PCB截图如下:

 点击查看大图

考虑到原理图截图不清晰,我还是传一下通过立创EDA导出的PDF吧:

Schematic__Sheet1_20180815173851.pdf PCB_layout_20180815173820.pdf 

2.用文字把该作品的实现原理、系统的工作过程大致讲解一下。

 作品的实现原理及工作过程:首先APP使用语音识别获得用户的原始语料,将得到的语料通过SDK调用我们在UNIT自然语言处理平台上训练好的交互模型,其会返回应答及澄清话术以及提取到的控制信息,那么APP再通过语音合成技术将返回的话术展示给用户,同时,将提取得到的控制意图信息根据约定好的通信协议组成一帧由十六进制数组成的控制命令发送到服务器程序,服务器程序根据数据库中信息查询这个APP所绑定的硬件设备,然后将这个控制命令通过对应端口转发到控制主机这边,控制主机这边通过串口转WIFI模块连接到家里的宽带路由器来保持与远程服务器的连接;控制主机收到服务器转发来的控制命令后进行解析控制红外发射阵列实现对空调的控制。

 用户初次部署过程:首先用户家中需要有路由器,用户给控制主机硬件上电后,主机内部的WIFI模块默认会打开热点发射WIFI,用户此时可以用手机或者电脑连上居家精灵控制主机发射出来的WIFI,打开浏览器输入“10.10.100.254”即进入居家精灵控制主机的网络配置界面,这里设置好主机需要连接到的路由器WIFI名称及密码,此外,记下设备ID号。给控制主机断电再重新上电,控制主机便会通过家庭路由器自动与我们的云端服务器建立连接。接下来,用户打开居家精灵APP,注册账号,在注册账号时填入要绑定的控制主机ID号,即可完成部署。后续用户只需通过该账户登录即可实现语音控制。

3.注明所用到的EDA工具软件名称并附上设计链接。

作品设计使用立创EDA完成,作品工程链接是,欢迎查看交流:

https://lceda.cn/sheng/ju-jia-jing-ling


四、材料清单(BOM列表)

列出您这个作品所用到的主要器件(关键器件即可),比如单片机&ARM芯片、专用集成芯片(ASIC)、传感器、功能模块等。

如果所列出的芯片是来自我们立创商城上的,最好能写出该器件的商品编号或附上对应购买链接。

 点击查看大图


五、软件部分的描述(选填)

如果您的作品涉及到软件,请列出作品对应的软件工作流程图,及关键部分的例程、源码(如果您想开源的话请上传全部源码)。

服务器部分程序源码:

#! /usr/local/bin/python3
# coding=utf-8
import socketserver
import re
import json

user_info_dict={}#用户信息字典: 用户名-【硬件ID,密码】
appsocket_id_dict={}#客户端与硬件控制关系字典:APP客户端IP-硬件ID
id_hardwaresocket_dict={}#硬件ID与硬件socket对应关系字典:硬件ID-socket


class ThreadedTCPRequestHandler(socketserver.StreamRequestHandler):
    def handle(self):
        global user_info_dict
        global appsocket_id_dict
        global id_hardwaresocket_dict
        while 1:
            data = self.request.recv(1024)
            if len(data) == 0:
                print(self.client_address)
                print(' client close')
                if self.client_address[0] in appsocket_id_dict.keys():
                   del appsocket_id_dict[self.client_address[0]]
                break
            print('receive data from'+self.client_address[0])
            # data = bytes(data )
            # self.wfile.write(data)
            str_data=' '
            try:
                str_data=str(data,encoding='utf8')
            except Exception as err:
                print('new control command')
                #print(str(err))
            if str_data=='HEARTBEAT':
                print('heartbeat')
                continue
            if not(str_data==' '):
                pattern_newuser=re.compile(r'NEWUSER-(\w+)-(\w+)-(.+)')
                pattern_app_con_req = re.compile(r'REQUEST-(\w+)-(\w+)')
                pattern_hardware_connected = re.compile(r'ID-([A-F0-9]{12})')
                match_newuser=re.match(pattern_newuser,str_data)
                if not(match_newuser==None):#新用户注册
                    user_info_dict[match_newuser.group(1)]=[match_newuser.group(2),match_newuser.group(3)]
                    f = open('userinfo.txt', 'w')
                    f.write(json.dumps(user_info_dict))
                    f.close()
                    continue
                else:
                    match_app_con_req=re.match(pattern_app_con_req,str_data)
                    if not(match_app_con_req==None):#APP连接请求
                        if user_info_dict.get(match_app_con_req.group(1),[' ',' '])[1]==match_app_con_req.group(2):
                            self.wfile.write(bytes('OK','gbk'))
                            appsocket_id_dict[self.client_address[0]]=user_info_dict[match_app_con_req.group(1)][0]
                            print("user connected")
                            print(self.client_address[0])
                            continue
                        else:
                            print(user_info_dict.get(match_app_con_req.group(1),[' ',' '])[1])
                            self.wfile.write(bytes('NG','gbk'))
                            print("refuse user connect request")
                            continue
                    else:
                        match_hardware_connected=re.match(pattern_hardware_connected,str_data)#控制主机连接请求
                        if not(match_hardware_connected==None):
                            id_hardwaresocket_dict[match_hardware_connected.group(1)]=self
                            print("air controler hardware is on")
                            print(self.client_address[0])
                            continue

            if self not in id_hardwaresocket_dict.values()and len(data)==13:#APP端控制数据
                 hardwareid=appsocket_id_dict[self.client_address[0]]
                 if hardwareid in id_hardwaresocket_dict.keys():
                    controler=id_hardwaresocket_dict[hardwareid]
                    controler.wfile.write(data)


class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass


if __name__ == "__main__":
    HOST, PORT = "", 8888
    try:
        f = open('userinfo.txt', 'r')
        user_info_dict = json.loads(f.read())
        f.close()
    except Exception as err:
        print('no userinfo file exist~')

    server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
    print('air controler server is on')
    server.serve_forever()
    print('air controler server is down') 


APP部分源码截图(帖子长度有限,直接贴代码放不下):

  点击查看大图


居家精灵控制主机部分源码截图: 点击查看大图



六、作品演示

请上传您的作品的功能演示到腾讯视频,并编辑到本楼(或附上视频链接)。按要求上传视频可获得10分,具体详见活动规则。

嵌在网页里的视频好像不能全屏播放,还是通过这个链接直接观看吧:

https://v.qq.com/x/page/w075766oan7.html



七、总结

例如您在完成该作品过程中的一些体会、碰到的技术问题或调试经验、作品的未来规划,及对我们主办方的建议和意见等。


总结体会:最开始只是想做个远程控制寝室的空调的这么个东西出来,恰巧赶上了电子制作节,因为参加了比赛,因此也变得更加重视,这个作品其实主要是软件部分比较花时间,硬件还是比较简单的,不过为了做得高大上些好看些,特地从X宝上找了一个公版的红外转发器外壳,然后照着外壳的样子画板布线,最后作品看起来还挺像个产品的哈哈!感谢嘉立创提供的这么一个好的平台!

未来规划:由于时间仓促,目前主要实现了空调设备的控制。接下来主要打算做下面这些改进:

a.优化控制主机的电路板外观及电源设计,提供串口及SPIIICCAN等多种外部接口方便扩展其他电器控制模块;

b.优化初次使用的绑定过程,对控制主机与用户账号实现更智能的配对绑定;

c.对通信数据链路进行加密,保证用户信息安全;

d.训练更复杂的对话交互模式以实现对更多家庭电器的对话交互控制;

e.开发用于控制其他电器的通用硬件模块,并通过串口、CANSPIIIC等方式连接到控制主机实现对其他电器的控制。这里的其他电器主要指开关型电器(如灯)、调节型电器(如电动窗帘)。





主题

回复
发表于2018-10-25 21:16:36   |  显示全部楼层
14#
楼主,可以发个qq交流一下吗,百度UNIT这一块我有点问题不懂,求救求救

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部