巧借百度智能云打造树莓派门禁“刷脸”系统
2022-01-16牟晓东
牟晓东
在现实生活中,小区的门禁系统能够对事先登记过的“合法”汽车牌照进行识别和自动放行;同样,单位的上下班“刷脸”系统则可以对职员的人脸进行识别打卡。其实,类似的车牌与人脸等身份识别的原理并不复杂,以“人脸识别”为例:系统先要对单位的员工进行拍照和图像预处理及特征的提取,然后将提取的信息存储到“人脸”数据库中;人脸识别的过程就是将“刷脸”抓拍到的数据特征与库中的记录进行匹配,当二者的相似度达到某个设定的阈值时(比如80%),即认定为匹配成功,再执行某些预设的“动作”——比如语音输出“张三上班打卡成功!”,同时还会在系统中进行该用户某一时刻打卡成功的记录。目前,我们普通人可以借助于百度智能云,通过使用树莓派和摄像头等设备进行开源硬件编程,快速打造出一个智能的门禁“刷脸”系统。
实验装置包括树莓派3B+和古德微扩展板各一块,USB接口高清摄像头一个,SG90舵机一个,音箱一个,红色、绿色和黄色LED灯各一支。
首先,将扩展板正确安装在树莓派上;接着,将舵机插入18号插孔,注意红色线接VCC(电源正极)端、棕色线接GND(接地)端、黄色线接D(信号)端;然后,将红色、绿色和黄色LED灯分别插入5号、6号和12号插孔,注意“长腿正、短腿负”的原则;最后,将摄像头插入树莓派的USB接口,音箱数据线插入音频输出孔;给树莓派通电,启动操作系统(图1)。
首先,访问百度智能云(https://ai.baidu.com/),注册并登录进入个人中心,点击“文档”-“产品文档”项;然后,在“文档中心”页面左侧点击“人工智能”,选择中间区域的“人脸识别”项,再点击其中的“立即使用”按钮,进入“应用”页面;接着,点击“创建应用”按钮,在“应用名称”处输入“face”,“接口选择”处的信息是之前申请时设置好的(包括人脸检测和在线活体检测等项),下方的“应用归属”设置为“个人”,“应用描述”中输入“将‘人脸识别’应用于小区门禁检测的实验”,点击“立即创建”按钮(图2)。
此时,会有“创建完毕”的提示,点击“返回应用列表”按钮就会看到已经生成了一个名为“face”的应用项目,后面对应有三处非常关键的应用信息,分别是应用编号(AppID)、开发密钥(API Key)和密钥(Secret Key),复制粘贴到文本文件face.txt中,暂时保存(图3)。
现在的“face”只是一个没有用户和人脸信息的“空仓库”,可点击“新建组”按钮会弹出“新建用户组”窗口,输入组ID:“face_01”后点击“确认”按钮,完成“face_01”用户组的建立操作,“详情”处显示为只有“0张人脸”;然后,点击“face_01”(会提示“没有相关的用户”),再点击“马上创建”按钮,在“用户ID”中输入“ZhangSan”;接着,点击下方的“点此添加图片”按钮,选择一张“合法”用户的“正面、无遮挡照片”,将事先拍摄准备好的5MB以内的相片进行上传,之后点击“确认”按钮,完成第一个用户人脸信息的采集。再使用同样方法,添加第二个用户“LiSi”的人脸信息,等等(图4)。
值得一提的是,目前百度智能云对个人账户进行了一定的限制,需要先进行实名认证,而且必须手动申请免费资源的领取才可以使用包括人脸识别在内的相关接口服务,操作方法是:从个人账户的“文档”中再次找到“人脸识别”项,按照提示先完成实名认证后再点击“领取免费资源”项,选中“接口名称”处罗列的所有项目后再点击下方的“0元领取”按钮;此时,会有“领取成功”的提示,只不过“领取的免费测试资源预计30分钟内生效”,约半小时后刷新查看,发现在“已领取资源”中已经有了对应的基础服务项(图5)。
树莓派门禁“刷脸”系统的实现功能是:黄色LED灯一直处于闪烁的警示状态,提醒慢行通过;当有人在摄像头前停留时,开始进行抓拍检测,如果该人脸信息与数据库中的某合法用户的人脸信息较为吻合(置信度较高),则红色LED灯亮起,同时播放欢迎的语音提醒,舵机控制门禁杆缓缓抬起90度,然后熄灭红色LED灯、亮起绿色LED灯并持续7秒钟,行人通行后绿色LED灯熄灭;接着又会亮起红色LED灯,由舵机控制门禁杆恢复为原来的0度位置,熄灭红色LED灯;如果“刷脸”失败(判定为“非法”用户),只播放“非本小区人员,禁止入内!”的语音提醒信息,LED灯和门禁杆均无动作。
修改树莓派config配置文件中的“baiduFaceKey”信息。首先,运行Windows的“远程桌面连接”程序,通过IP地址(192.168.1.116)登录进入树莓派的远程操作系统界面;接着,运行“文件管理器”并定位于/home/pi/back/testWrite目录,双击打开其中的config文件,找到“[baiduFaceKey]”项,将原来默认的三个“default”值(FaceAppID、FaceAPIKey和FaceSecretKey)进行替换,分别对应之前在百度智能云中“face”应用项目的三处信息(AppID、API Key和Secret Key);最后,将config配置文件保存并关闭,重启一次树莓派操作系统,使config配置文件生效(图6)。
修改config配置文件中的“baiduFaceKey”信息,目的是讓树莓派按照这些信息去进行人脸数据的查找与判断,相当于在config配置文件中FaceAppID、FaceAPIKey和FaceSecretKey三处信息的“引导”下,与百度智能云对应账号的人脸库“face_01”用户组中所保存的若干张人脸信息数据进行置信度的计算与匹配,从而判断摄像头所抓拍到的人脸是否为应该放行的本小区“合法”用户。
在古德微机器人网站登录自己的账号后,开始“积木”式图形化编程:
第一个是“黄灯持续闪烁”函数,通过“控制12号小灯亮/灭”(黄色LED灯插在12号引脚)和“等待1秒”模块语句,在主程序中使用多线程调用后就会实现黄色LED灯不断闪烁的功能(不必在函数中进行循环)。
第二个是“抬杆通行”函数,实现红色LED灯(5号引脚)先亮后灭、音箱语音播放“欢迎回家!”、舵机控制门禁杆抬起90度和熄灭红色LED灯、控制绿色LED灯(6号引脚)持续亮起7秒后再熄灭的功能,其中的固定次数循环结构(变量i从500到1500),作用是控制舵机(18号引脚)缓缓从0度升至90度。
第三个是“通行后落杆”函数,实现的功能与“抬杆通行”函数相反:亮起红色LED灯、语音播放“注意安全!”和舵机控制门禁杆由90度恢复为0度、熄灭红色LED灯,其中的循环结构所使用的变量i初值和终值分别是1500、500,步长也由1改为-1,实现舵机“反转”90度的功能(图7)。
从左侧“线程”中找到“添加子线程,线程函数名为‘’”功能模块,将调用的函数名设置为“黄灯持续闪烁”;然后,在“重复当真”的循环结构中先建立一个名为“拍照”的变量,为其赋值为“用USB摄像头拍一张照片”;接着,通过“检测图片‘拍照’中的人脸是否在人脸库‘face_01’中”功能模块,实现人脸信息置信度的获取功能,将该数据保存至变量“人脸在人脸库中的概率”中;再通过“建立字串使用”和“输出调试信息”功能模块,实现LOG调试信息区的提示输出功能;最后,通过一个“如果…执行…否则…”双分支的选择结构,对人脸置信度进行设置的阈值(80%以上)判断,条件成立,说明是“合法”用户,则分别调用执行“抬杆通行”和“通行后落杆”函数;条件不成立,则输出对应的提醒信息(图8)。
将程序保存并打开LOG调试信息区,点击“连接设备”后再点击“运行”按钮:
黄色LED灯开始闪烁。先从手机中打开一张明星相片(未进行过人脸采集),靠近摄像头后,很快就在屏幕上显示有“人脸识别置信度为:11%”和“非本小区人员,禁止入内!”的提示信息,同时还会有语音提醒;然后,本人直接正面靠近摄像头,屏幕上显示的是“人脸识别置信度为:91%”和“欢迎回家!”的提示信息,接着红色LED灯亮起、音箱语音播报“欢迎回家!”、舵机控制门禁杆慢速抬起90度、红色LED灯熄灭、绿色LED灯发光7秒钟(此为“合法”用户的通行时段);接着,红色LED灯又会亮起、门禁杆从90度慢速转至0度位置、红色LED灯熄灭。多次进行“合法”与“非法”用户的模拟检测,均实现了门禁“刷脸”系统的预设功能(图9)。