基于人脸检测的智能风扇设计
2021-03-15刘庆俞王孝延
刘庆俞,王孝延
(淮南师范学院计算机学院,安徽 淮南 232038)
风扇是人们日常生活中常见的家用电器之一,可以在酷暑中为人们带来凉意。而随着计算机和物联网技术的快速发展,智能设备逐渐进入千家万户,人们在享受原有设备功能的基础上,更加追求家居设备的安全性、舒适性和艺术性。利用传感器和单片机对传统风扇进行改造,实现自动调速成为人们尝试的方法之一[1,2]。但是这些设计都是基于环境温度进行风速调节,并没有充分考虑进行自动跟踪。同时,人脸检测与识别技术[3,4]的发展也为智能家居设备进入一般家庭提供了有力支持。本文以Raspberry Pi 3B+为核心,在传统风扇的基础上利用人脸检测技术设计出一款智能风扇,通过对人脸的检测和定位自动关停设备和调整角度,并根据家居环境调节转速。在智能风扇联网的情况下,可以使用手机等移动设备完成远程监控和操作,确保家居环境的安全。
1 总体设计
本系统主要由Raspberry Pi 3B+处理器、ESP8266微控制器、PCA9685驱动板、温湿度传感器、摄像头、普通风扇和微显示屏等模块组成,实现了智能风扇的设计。上位机为Raspberry Pi 3B+,负责核心算法的运算(如图像处理与识别)和逻辑控制;下位机使用ESP8266微控制器,负责数据的采集和执行上位机指令,二者使用2.4Ghz无线网络进行直连通讯。系统整体结构如图1所示。其中,Raspberry Pi 3B+是整个系统设计的核心,与PCA9685驱动板直连,从而驱动两个舵机使风扇左右、上下转动;摄像头通过USB接口连接Raspberry Pi,进行图像采集完成人脸识别处理,并将识别信号反馈给PCA9685驱动板,实现联动;ESP8266微控制器通过无线与Raspberry Pi交互,为风扇电机供电,同时完成温湿度信息的采集与显示。最后,通过手机等终端设备可以实现远程控制,进行家居环境监控。具体流程如图2所示。
图1 系统结构
图2 处理流程
2 硬件选择
2.1 Raspberry Pi处理器
Raspberry Pi,中文名为“树莓派”,由英国“Raspberry Pi基金会”开发,又称卡片式电脑,外形只有信用卡大小,却具有电脑的所有基本功能[5]。主板是基于ARM设计,以SD卡为存储盘,主板周围有USB接口和以太网接口,可连接键盘、鼠标和网线,同时拥有相应输出接口(图3)。
图3 Raspberry Pi处理器
树莓派操作系统是基于Linux的,目前Raspbian是树莓派官方推荐的操作系统,其包含了深度定制的硬件驱动与软件程序。Raspbian是一款轻量级操作系统,稳定性较好。
2.2 ESP8266微控制器
ESP8266是一款低功耗、高集成度的微控制器,它是一款具有完整的TCP/IP协议栈和单片机功能的控制器,内置一个泰思立达(Tensilica)处理器,可以使用外部闪存作为存储器(图4)[6]。在WiFi方面,ESP8266实现了完整的802.11b/g/n协议。该模块有三种工作模式:
图4 ESP8266微控制器
STA模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
AP模式:ESP8266模块作为热点,手机或电脑直接与模块连接,实现局域网无线控制。本系统的设计正是利用此模式,实现了树莓派和ESP8266的直接交互。
STA+AP模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。
3 软件设计
系统开发环境是Raspberry Pi下的Raspbian操作系统,基于OpenCV和Dlib的Python语言开发[7]。
3.1 人脸检测
要完成人脸跟随,第一步需要实现人脸检测。在人脸检测算法的采取上,选用了Dlib开源库,在众多开源库中,Dlib库拥有识别率高、错误率低等特点,同时稳定性较好。由于人脸检测算法复杂度较高,四核心树莓派3B+处理器识别每幅图像约150 ms,几乎无法实现实时人脸检测,于是对每帧图像进行预处理。具体包括缩小分辨率、跳帧、减少颜色数等操作,预处理后可以达到25±5 fps的帧率,即检测每幅图像大约35 ms,从而实现实时人脸处理和检测。
3.2 人脸追踪
人脸追踪定位算法采用PID控制算法[5,6],当人脸不在画面的中心时,用屏幕中心点减去脸部中心点获取一个差值,根据差值正负获得人脸方向,再通过舵机移动一个角度值θ。根据每帧画面中检测的人脸个数,分别进行两种处理,当只有一张人脸时,调用追踪算法(1)进行横向和纵向移动;当检测到两张或多张人脸时,调用追踪算法(2),在最左边和最右边人脸间进行横向移动。具体算法如下:
追踪算法(1)
步骤1获取视频流;
步骤2读取帧画面;
步骤3进行人脸检测;
步骤4判断是否存在人脸,如果不存在则回到步骤2,存在人脸则继续;
步骤5启动风扇,分别获取人脸中心点坐标(faceCenterX,faceCenterY)和帧画面中心点坐标(vCenterX,vCenterY);
步骤6计算差值distanceX=abs(faceCenterX-self.vCenterX)和
distanceY=abs(faceCenterY-self.vCenterY);
步骤7判断差值distanceX和distanceY是否小于值Δ1,如果小于Δ1则风扇不做移动,否则驱动舵机左右或上下移动,进行人脸自动跟踪。
追踪算法(2)
步骤1读取帧画面并进行人脸检测;
步骤2启动风扇并判断人脸数,如果存在1张人脸,则调用追踪算法一,超过2张(含2张)人脸,则继续;
步骤3分别获取最左边人脸中心点坐标(left-FaceCenterX,leftFaceCenterY)和最右边人脸中心点坐标(rigthFaceCenterX,rigthFaceCenterY);
步骤4计算横向差值distanceX=abs(leftFace-CenterX,rigthFaceCenterX);
步骤5判断distanceX是否小于Δ2,如果小于则风扇不做移动,否则驱动风扇在最左边人脸和最右边人脸之间移动。
3.3 风速的调控
风扇采用普通5v供电的直流电机小型风扇,接上H桥直流电机驱动板可实现PWM调速[7],理论上可实现1 024级的风速控制。本设计使用两个档位的调节,在温度t<25和25≤t进行风速调节,具体对应关系如表1所示。
表1 温度与风速关系匹配
4 分析与测试
通过系统集成,实现基于人脸检测跟踪的智能风扇,智能风扇实物图如图5所示。
图5 智能风扇实物图
4.1 舵机移动角度问题
当检测到画面中有人脸时,最初移动角度值取为定值,通过测试发现,固定偏移角度会导致人脸定位严重依赖帧率,并且人移动幅度较大时会发生位置丢失现象。于是设计出比例修正法,即修正角度的计算通过人脸到屏幕中心的距离乘以一个系数得出,距离越大,一次偏移角度越大,平均可在5帧内完成定位。过程如图6所示。
图6 人脸追踪定位过程示意图
4.2 风扇抖动问题
当检测到画面中有人脸时,立即进行人脸追踪会发生风扇抖动现象。通过测试发现,当人脸中心点与画面中心点差距小于Δ1时,或者多人脸追踪算法中横向差值小于Δ2时,舵机不做移动可以消除风扇抖动现象,从而保持风扇的相对稳定。
4.3 人脸检测准确率问题
本设计中人脸检测调用Dlib开源库,当检测到人脸时启动风扇,3秒内未检测人脸则自动关闭风扇。通过多次测试发现,只要人脸面部不加遮挡,光线良好,检测成功率为100%。同时在基于人脸检测的基础上,根据需要,可以实现对具体人脸的识别,并只对指定人脸进行风扇开停和自动跟踪,确保风扇安全。
5 结论
本文利用人们日常家居中最普通的风扇,设计出一款能够进行人脸检测和跟踪的智能风扇。该设备利用人脸检测算法,对采集到的视频流进行分析处理,当出现人脸时能够自动开启并进行人脸动态跟踪。另外,根据家居环境温度自动调节风速,极大地提高了用户的体验。通过实验测试,设备人脸检测率高,整个运行过程稳定,保证了设备的安全性和节能高效。