基于树莓派+云服务的人脸识别门禁系统设计
2023-03-01冯威翔杨静
冯威翔,杨静
(河南工业大学 信息科学与工程学院,河南郑州, 450000)
0 引言
随着生活质量的提高,普通IC卡等传统身份识别工具已不能满足社会需求[1]。人脸识别技术已日趋成熟,在安防监控、身份认证等众多领域都有着重要的作用[2]。
传统的特征提取算法在复杂环境下准确率不高;而基于空间注意力机制的3D人脸识别算法,虽准确率高,但参数需根据经验设置,使得门槛较高,易用性低[3];一些庞大的深度学习网络模型,通过自学习的方式进行训练,但运行在计算能力有限的嵌入式设备上有困难。
针对传统人脸识别方案识别精度相对较低,提升识别精度对嵌入式设备的计算能力和算法优化要求比较高,导致易用性低的问题,本文利用云计算平台准确率高,调用方便的特性[4],将百度智能云与树莓派相结合,设计一款人脸识别门禁系统,使得整个系统更加准确、便捷化。
1 系统构成
该系统由主控制器模块、人体红外感应模块、图像获取模块、密码模块、显示模块、模拟门禁开关模块组成,经人体红外传感器触发后调用摄像头进行图像采集,经过分辨率和格式转换后上传至百度智能云进行人脸的识别对比。为了应对一些网络故障等情况,本设计还添加密码模块进行辅助解锁。系统总体结构图如图1所示。
图1 系统总体结构图
2 硬件设计部分
■2.1 主控制器
考虑到扩展性、成本、功耗,本设计选择树莓派4B作为主控制器,主板有4个USB接口,可用来连接鼠标键盘USB摄像头等。搭载4核1.5GHz CPU,两个支持4K显示的HDMI接口,接上一块屏幕可以用它来编辑文档、浏览网页等[5]。具有2.4GHz和5GHz的WiFi模块以及以太网接口,向上可以提供云端API,指令数据通过API调用下发至设备端[6],硬件示意图如图2所示。
图2 树莓派4B硬件示意图
■2.2 人体红外感应模块
为减少资源浪费,添加红外触发。HCSR501原理图如图3所示。人会发出10μm左右波长的红外线。具有热释电效应的半导体,用于检测8~12μm波长的红外信号。将产生的微弱电压变化经过BISS0001放大后输出,调节可变电阻RL2和RT1改变放大倍数,来改变传感器的检测距离和灵敏度。信号输出接树莓派的GPIO4接口,本设计采用可重复触发,距离在3m左右。
图3 HC—SR501原理图
■2.3 图像采集模块
图像获取模块采用500万像素的树莓派专用摄像头,尺寸小,功耗低[7]。通过CSI扁平带状电缆将相机板连接到树莓派上,手动使能。查看API文档,API接口要求输入的分辨率为1024×768,图片格式必须为Base64编码格式,编码后的图片大小不超过2M。
■2.4 密码模块
为应对网络故障等情况,本设计添加密码模块用来辅助解锁。矩阵键盘控制行的4个引脚接到树莓派的GPIO 21~24,控制列的4个引脚接到树莓派的GPIO 26~29。初始化GPIO 21~24为输出高电平。GPIO 26~29为输入,通过内置上拉电阻,上拉为高。
■2.5 交互模块
选用0.96寸I2C通信OLED进行文字交互提示。手动配置开启树莓派I2C通信接口。通过HDMI外接7寸IPS电容触摸屏进行图像采集过程的显示。
选用常见舵机SG90进行模拟开门,信号线接到树莓派的GPIO6引脚。通过PWM脉冲控制,开门后释放PWM信号可手动关门,一段时间后如果没有识别到人将控制关门。
如果成功开门或检测到人脸未在人脸库中或密码错误。调用有源蜂鸣器进行声音警报。调用API服务,通过微信将原因、时间和图像发送给用户。
■2.6 硬件连线
硬件总体连线如图4所示。
图4 硬件总体连线图
3 软件设计部分
■3.1 软件环境搭建
本系统选用官方指定的Raspberry Pi OS,在官网中下载镜像文件,通过镜像文件烧录工具烧录到SD卡中。
为了方便文件传输,整个开发过程采用远程桌面连接进入树莓派桌面进行开发。使用Python作为开发语言,树莓派官方提供的系统中自带Python编译器Python3.9,以及Python集成开发环境Thonny。运行时,实时反馈交互的运行结果,给予一些优化建议,对树莓派支持良好。
■3.2 人脸识别模块设计与实现
本设计通过百度智能云平台提供的应用程序接口(Application Programming Interface,API)接口实现人脸识别。
首先,注册并登录百度智能云,创建一个人脸识别的应用,依次创建用户组、用户和添加用户的人脸照片。用户组数量没有限制,每个用户组中的用户数量也没有限制,每个用户可以注册的人脸数量为20个。创建成功后可以得到这个应用的AppID、API Key、Secret Key,也就是在程序中进行接口调用时的用户名和密码等信息。
其次,下载适用于Python的人脸识别软件开发工具包(Software Development Kit,SDK)。将下载的SDK通过VNC Viewer的文件传输功能传入到树莓派中,用Python编译SDK文件中的setup.py来安装百度AI模块如图5所示。
图5 安装百度AI模块图
最后,根据之前记录的所创建应用的用户名和密码进行访问所创建的应用,调用AipFace模块中的search函数将返回人脸匹配的结果,返回值是一个字典。通过error_mag来判断是否为人脸,如果检测不到人脸就返回-1。如果检测到人脸,则获取相似度score,通过相似度来判断是否在人脸库中,如果满足相似度就返回1,否则返回0。
■3.3 密码模块软件设计
密码模块包括密码的输入、清除、判断和修改。扫描第一行时,设置GPIO21引脚输出低电平,延时20ms来绕过抖动区间进行防抖,扫描GPIO 26~29引脚是否为低电平,来判断S1~S4的按键状态,2、3、4行同理。
密码的输入封装在函数中,将被按下的按键以字符的形式放入列表中。当输入为6位时返回列表。密码存放在本地的文本文件中,使用operator函数进行判断,如果输入与密码不匹配返回0,否则返回1。如果判断键盘输入“*”,则清空列表,来达到清除的目的。输入6个#来进行修改密码,先输入原密码,如果密码正确将修改的密码替换掉文本文件中的内容。
■3.4 软件设计总体流程
系统开始工作后,判断人体红外传感器的状态,当检测到有人时,进入人脸识别部分,点亮发光二极管来模拟灯光照明,调用OLED来提示用户相关操作,调用摄像头进行图像采集,按照技术文档进行格式转换后上传到百度智能云。如果返回结果为不是人脸,判断为人体红外误触,将回到人体红外检测部分。如果人脸匹配成功,控制舵机模拟开门,记录下用户名及开门时间在本地文本文件,回到人体红外检测部分。如果人脸匹配失败,再次进行检测。如果连续两次检测失败将提示进入密码识别。如果密码识别正确,控制舵机模拟开门;如果密码识别错误两次,将延时一段时间后回到人体红外检测部分。无论是否成功通过都会将记录下来的时间、原因和图像通过微信公众号发送给用户。程序流程图如图6所示。
图6 总体程序流程图
4 系统测试
系统测试一共有3位测试者参与,分别为2位在图库中的人和1位不在图库中的人,对人脸识别等各模块功能进行测试。每个实验对象在光线充足和光线暗弱两种环境下进行多次实验。实物图如图7所示,测试过程图如图8所示。
图7 实物图
图8 测试过程图
经测试,系统各模块功能工作正常,人脸识别测试结果如表1所示。在5G网络下调用所需时间大约在0.9s,4G网络下调用时间在3s左右,经100次测试,仅有一次在光线暗弱的环境下出现误判现象。
表1 人脸识别测试结果
5 结论
本设计以树莓派4B为主控,通过调用百度智能云平台实现了以人脸识别为主的门禁系统。实验表明该系统性能稳定,识别准确率为99.8%,保证了门禁系统的真实、安全。在5G网络下,检测时间大约在0.9s,实现了防盗防范的作用,减少了不必要的安全隐患。