随着社会经济和科学技术的发展,人们对智能化的日常生活愈发向往,智能家居已经逐渐成为未来家居的发展方向。
家居智能化,即将舒适、安全、方便、节能加入我们的生活方式中,能够实现自动控制、远程控制操作的系统,比如照明、取暖、空调、安全通信、水系统等系统,让这些系统更加容易被使用。智能家居是在互联网影响之下物联化的体现。智能家居通过物联网技术将家中的各种设备连接到一起,提供多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,还兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能,甚至为各种能源费用节约资金。
本次实验就是设计并实现了智能家居中比较重要的语音控制以及人脸识别功能。
2 项目分析2.1 硬件模块本智能家居+人脸识别项目采用 树莓派 为整体系统的主控芯片,协调系统各个部分的功能,软硬件结合,作品包括前端传感器,语音传感器(WEGASUN-M6),摄像头模块(Raspberryb PI 3代),通过语音识别串口数据传输,实现语音对家居的灯光控制,与摄像头控制,摄像头在接受了语音模块的指令后,会自动开启进行对人的人脸识别,一共有5次识别的次数,当这5次中有一次识别是内置的人脸图像,门锁会自动开启,当5次识别不成功,就识别失败。
2.1.1 硬件清单·树莓派主板
·树莓派电源(3节 3.3的锂电池)
·稳压模块(AMS1117)
·摄像头模块
·若干个LED
·继电器(5v 低电平触发)
·语音识别模块(WEGASUN-M6)
2.1.2 硬件整体框图
2.1.3 硬件系统设计
1. 语音识别模块( WEGASUN-M6) 来采集外界的声音,经过模块芯片的处理来对相应的语音来返回相关的数据,语音模块通过串口的传输将相应的数据到树莓派。
2. 摄像头模块,facehttp.c函数主要驱动摄像头进行拍照,拍照后通过popen函数运行p1.py程序,捕获到p1.py程序运行后输出到缓冲区的信息,并进行判断人脸是否匹配并是否开锁
3. 树莓派 用来处理语音模块返回的串口数据,和摄像头的人脸比对数据,并将这些数据整理,并得出该处理的结果,协调打开相应的模块
2.1.4 项目成品2.2 软件模块
本次实验的整体代码架构使用的是工厂模式设计,这种模式在创建对象时不会对客户单暴露创建逻辑,并且可以通过接口来指向新的创建对象。如图所示。
2.2.1 工厂架构
工厂架构中的设计函数通过链表来把这些类函数穿起来,使用的是头插法:
- struct Devices* addUpstairLightToDeviceLink(struct Devices* phead) {
- if (phead == NULL) { //如果该链表为空,则该结构体当成链表的头
- return &upstairLight;
- }
- else {
- upstairLight.next = phead;//头插法会改变头节点
- phead = &upstairLight;
- }
- 通过建立语音线程来调用语音模块的实现:
- while(1){
- printf("**************** 1.语音控制 ******** ");
- printf("**************** 2.摄像头人脸识别 **");
- printf("yu ying\n");
- pthread_create(&voiceThread, NULL, voice_thread, NULL); //调用语音线程
- pthread_join(voiceThread, NULL);
- printf("do divece contrl*****:%s", voiceHandler->command);
- }
语音串口是数据读取函数:
读取数据之后,判断是否有数据:
声音初始化及串口初始化:
语音串口函数结构初始化:
语音控制代码:
2.2.3 人脸识别
通过树莓派实现人脸识别。首先通过python解释性语言实现人脸识别的解释性函数,通过利用(翔云-人工智能-API-服务平台)提供的优质API解决方案,在本次实验中是直接调用其平台的API,不研究其内部资料。
- #coding=UTF-8
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')
- import requests #导包并设置字符编码,因为在py中,出现中文默认会报错
- url = r'https://netocr.com/api/facerecog.do' #翔云api的接口地址
- key = r'用户个人的key码,可在个人中心查看'
- secret = r'用户个人的secret码,可在个人中心查看'
- typeId = 21 #服务类型
- rFormat = r'xml'
- 简单编写一下改接口代码,如下:
- file1 = {'file1': open('file1.jpg', 'rb'),'file2':open('file2.jpg','rb')}
- data = {'key':key, 'secret':secret, 'typeId':typeId, 'format':rFormat}
- r = requests.post(url, files=file1,data = data)
- if str(r.text).find('是')!=-1:
- print(1)
- else:
- print(0)
如果返回的信息中带有“是”,则表示比对成功(向缓冲区输出1,方便被popen函数调用时捕获到运行结果),否则表示比对失败(向缓冲区输出0,方便被popen函数调用时捕获到运行结果)
通过system函数驱动摄像头拍照:
通过popen函数运行py文件访问接口,获取到人脸识别结果存入到文件流p中,并且存入字符数组ch:
对比结果为1时,代表对比成功,即开锁:
人脸识别模块代码:
3 创新点
1. 实现对全宅灯光的智能管理,可以用语音等多种智能控制方式实现对全宅灯光的遥控开关,调光,全开全关及“会客、影院”等多种灯光场景效果的实现;从而达到智能照明的节能、环保、舒适、方便的功能。
2.将语音软件设置成自动应答模式,让人通过相应的语音指令,使语音模块自动的应答,使其更加人性化,功能化,说出的语音指令都能得到回应,更加的让人放心,与开心。
3.语音唤醒摄像头人脸识别,使其安全性能更高,更加显示未来的智能家居的可观性,人机对话的智能化。
4. 摄像头人脸识别开锁,方便又快捷,即提高了未来智能家居的智能性,也提高了其安全性,随着人们居住环境的升级,人们越来越重视自己的个人安全和财产安全,对人、家庭以及住宅的小区的安全方面提出了更高的要求;同时,经济的飞速发展伴随着城市流动人口的急剧增加,给城市的社会治安增加了新的难题,要保障小区的安全,防止偷抢事件的发生,而摄像头识别便是未来的智能安防的趋势
4 未来发展趋势
通过Zigbee,用户不仅可以实时地查看房屋内的情况,还可以进行远程操控和语音控制。同样,可以通过对家中各类智能插座、开关的数据进行统筹分析,实现对家庭的能源管控,指定一些节能环保的家电使用计划。给人们带来一个舒适高品质且高安全的生活,集安防监控和家电灯光控制为一体,使原本传统的家居发生质的改变,便利人们的生活。
使得家居中的一切实现“物物相连”的物联网化。国务院也出台了一些相关政策,确立了物联网产业体系的指示。
虽然目前不可能涵盖智能家电的所有特性,但是智能家居已经是非常明显的主流发展方向,在未来,智能家居会逐渐成为人们。
5 流程图
通过语音识别分为两种指令 1.是智能控制灯光 2. 开启人脸识别开锁 通过语音代码的相关指令来控制智能家居里的各个灯光的启动和关闭,通过人脸识别来进行智能开锁等功能。
6 总结
这个项目是我们的创新设计智能家居语音+人脸识别,因为人脸识别是用python 方案来写的,软件与硬件相结合,处理之下花了不少时间,人脸识别之前从网上找了不少的方案,但都不能和硬件兼容起来,后面从csdn 该博客上偶然间知道了(翔云-人工智能-API-服务平台)这个平台的方案,解决了我们摄像头采用python深度处理的方法,也完美的和老师的创新课设相融合,智能家居系统这个项目还没完成,只是仅仅是语音控制,和人脸识别而已,后面我会完善更多的功能,来实现手机控制,家居各方面的智能管控,在写这个系统时我们刚开始也遇到了很多问题,无论是软件或者是硬件,比如写语音模块时,因为相应的串口配置参数没处理好,导致整体的功能有很多的报错或者接受不到 树莓派的数据,从而启动不了人脸识别,和灯光的管理,但遇到问题是好的,遇到问题就应有一种解决问题的决心,所以我们当时经过代码的一次又一次的调,硬件也调了很多次,确保硬件上不会有问题,又把错误的信息通过百度去一个一个的试,后来经过一番的调节也终于知道了,是语音模块的配置上出了问题,知道问题就好办了,接下来就是解决了,当然问题也不止一个,无论是硬件还是软件,都出现过大大小小的问题,但解决的方法是不变的,代码只能一步一步的调,硬件只能一个一个的去排除。当然该系统还是有很多要完善的地方,还有如同老师说的,我们的接线很乱,外观很不完美,这些都是我们接下来要去处理的。智能家居真正实现的话要用到很多的模块,而且要对树莓派与Linux系统也要更加的去理解,所以我们要学的东西还很多很多,我们也会话更多的时间去完善自己,丰富自己。