基于人脸识别的高校寝室安全管理系统的智能设计与实现
2020-11-20贺东芹胡世长位磊
贺东芹 胡世长 位磊
摘要:结合互联网与人脸识别功能以及智能锁应用,对于学生寝室的安全防盜、考勤打卡都有极大的帮助。该系统分为面部采集、存储,面部识别打卡、面部解锁寝室门以及数据管理终端服务。学生通过人脸采集端实现考勤打卡功能,服务器识别人脸并且记录学生身份以及当前时间,通过STM32单片机技术、继电器以及电磁锁实现面部解锁寝室门的功能。
关键词:STM32单片机、终端服务器、数据采集、人脸识别、继电器、电磁锁
通信作者: 位磊 stones2004@163.com
基金项目:文华学院大学生创新基金项目 (项目编号:J0200570118)
1 背景
人脸识别技术是生物特征识别领域的研究热点之一, 近年来, 随着模式识别和人工智能技术的发展, 该技术受到诸多学者的关注[1]。结合高校学生宿舍的安全管理,基于互联网与单片机技术的面部识别与系统设计出一系列适用于大学寝室安全管理系统及其智能化的应用。由面部采集存储端、终端服务、 面部智能锁及网络通信等四大部分组成。
2 总体设计
本系统主要分为三个模块,即面部数据采集存储对比端、终端服务与网络通信、面部智能锁。
2.1 面部数据采集存储对比端
面部识别系统采用Python语言作为编程语言[2],通过程序出编写具有图像采集系统,接受红外感应发出的信号以及LED灯源模块。
在设定的图像窗口大小为92×112像素内,被拍摄者尽量让自己的面部均匀的分布在窗口内这样才能降低人为因素造成的数据差,通过面部特征值记录下被拍摄者的数据进行存档方便下次查询或者对比时提取数据文件。
2.2终端服务与网络通信
通过网络将被拍摄者的面部特征数据传输至终端服务器上,并存储该数据[3]。
检测时,采用PCA和LBP算法提取人脸图像的特征[4],对比数据库中特征值的大小来检验此人是否预先存储了自己的面部信息或者是不是本人的情况。而数据库中需要存储学生的个人信息,以及各个时刻的考勤打卡记录方便辅导员进行查询或者统计工作。
该技术的难度较大,因为受到人体面部表情特征以及环境因素,受到光线的强弱,采集设备的像素度等因素。因此我们通过OPENMV的人脸检测来进行识别,充分利用此模块辨识度高,工作速度快的优点。
指示灯设定四种状态:白色表示通电成功、红色表示考勤打卡失败或则查无此人、绿色表示考勤打卡成功、灯常灭表示处于待机状态。
2.3面部智能锁
在面部识别之后利用此模块的其他IO口输出当前信号的指令给继电器,然后继电器控制电磁锁的开关。此人是该寝室成员就通过信号电平给予一个信号指令打开寝室门锁。若不是则不打开寝室门锁。
3 硬件设计
该系统电路原理图如图2所示,面部识别的运算速度快,工作的效率要求十分的高,要求能够快速识别面部特征并且发出指令。对此我们采用OPENMV因为它搭载了STM32H743的32位单片机用此芯片作为处理器。
对于电磁锁的需要用到12V的电源,因此通过电源模块AD-DC模块,将电源稳定在12V[6]。控制继电器的程序不太难,只需要对继电器输入一个初值高电平即可,当需要打开电磁锁的时候就对继电器输入一个低电平信号。同时对于单片机的供电5V,我们通过DC-DC电源降压模块使得12V的电源降压到5V之后对单片机供电。但是OPENMV的工作电压为3.3V,我们需要对5V电压继续降压,使得OPENMV能正常工作[5]。
4 软件设计
在接通电源之后,整个系统完成初始化之后。开始有序的执行一系列的工作,从最开始的拍摄人脸开始,存储人脸照片至数据库,服务器会根据学生的照片导入学生的基本信息进行存档后续工作开展的快捷;用户端就可以开始执行余下的,考勤打卡,面部解锁寝室门等一些列操作。
本系统采用python语言程序设计,主要由初始化程序,面部采集程序,采样信号对比程序组成。
4.1初始化程序及面部采样程序
import sensor, image, pyb
RED_LED_PIN = 1
BLUE_LED_PIN = 3
sensor.reset() # 使传感器初始化
sensor.set_pixformat(sensor.GRAYSCALE) # 设置相片格式为灰度图
sensor.set_framesize(sensor.B128X128) # 设置分辨率大小128*128
sensor.set_windowing((92,112)) #设置图像窗口大小为92*112
sensor.skip_frames(10) # 使新的设置生效
sensor.skip_frames(time = 2000)
num = 1 #设置被拍摄者序号,第一个人的图片保存到s1文件夹,第二个人的图片保存到s2文件夹,以此类推。每次更换拍摄者时,修改num值。
n = 10 #设置每个人拍照图片数量。
#连续拍摄n张照片,每间隔3s拍摄一次。
while(n): #循环次数为设置的照片数量
#红灯亮
pyb.LED(RED_LED_PIN).on()
sensor.skip_frames(time = 3000) # 等待3s
#红灯灭,蓝灯亮
pyb.LED(RED_LED_PIN).off() pyb.LED(BLUE_LED_PIN).on()
print(n) sensor.snapshot().save("faceid/s%s/%s.pgm" % (num, n) ) # 將照片保存到SD卡文件夹中
n -= 1 #每次拍摄一张照片就把设置照片的数量减1
pyb.LED(BLUE_LED_PIN).off()
print("Done! Reset the camera to see the saved image.")
4.2信号采样对比程序
import sensor, time, image, pyb
from pyb import Pin
RED_LED_PIN = 1
GREEN_LED_PIN = 2
BLUE_LED_PIN = 3
sensor.reset() # 使传感器初始化
sensor.set_pixformat(sensor.GRAYSCALE) # 设置相片格式为灰度图
sensor.set_framesize(sensor.B128X128) # 设置分辨率大小为128*128
sensor.set_windowing((92,112)) #设置图像窗口大小为92*112
sensor.skip_frames(10) # 使新的设置生效
sensor.skip_frames(time = 5000) #等待5s
p_in = Pin('P1',Pin.IN,Pin.PULL_DOWN) #设置P1口为接受信号端
preson = p_in.value()
#SUB = "s1"
NUM_SUBJECTS = 6 #图像库中不同人数,一共6人
NUM_SUBJECTS_IMGS = 10 #每人有10张样本图片
print("检测到电平:%s"%p_in.value()) #当红外人体传感器检测到人体时,就发送一个高电平给摄像头,使它开始工作
while(p_in.value():
# 拍摄当前人脸。
preson_flat = False
img = sensor.snapshot()
d0 = img.find_lbp((0, 0, img.width(), img.height()))#对比照片的宽度与长度
for s in range(1, NUM_SUBJECTS+1):
dist = 0
for i in range(2, NUM_SUBJECTS_IMGS+1):
img = image.Image("faceid/s%d/%d.pgm"%(s, i))
d1 = img.find_lbp((0, 0, img.width(), img.height())) #调用find_lbp函数来提取当前的人脸特征值
#d1为第s文件夹中的第i张图片的lbp特征
dist += image.match_descriptor(d0, d1)#计算d0 d1即样本图像与被检测人脸的特征差异度。
#print("Average dist for subject %d: %d"%(s, dist/NUM_SUBJECTS_IMGS))
print("人脸检测得分:%s"%(dist/NUM_SUBJECTS_IMGS))
if dist/NUM_SUBJECTS_IMGS < 7500:
preson_flat = True #如果特征值<7500那么此人存在于图库中,检测为合格
break
else:
preson_flat = False #特征值>7500,则检测为不合格
#print("检测到第%s个人"%num)
if preson_flat:
print("检测到sd卡中的人脸")
pyb.LED(GREEN_LED_PIN).on() #如何检测到SD卡中的人脸,就绿灯显示5S,表示合格
sensor.skip_frames(time = 5000)
pyb.LED(GREEN_LED_PIN).off()
else:
print("没有检测到人脸")
pyb.LED(RED_LED_PIN).on() #如果没有检测到SD卡中的人脸,就红灯显示5S,表示不合格
sensor.skip_frames(time = 5000)
pyb.LED(RED_LED_PIN).off()
#print(num) # num为当前最匹配的人的编号。
5 仿真或实验结果
人脸拍摄并存档,完成定义的每个人十张的照片的拍摄,如图5所示。对比当前的人脸以及结果显示,自定义人脸对比比值在7500以下的为正确,存在此人并且亮绿灯。反之则不存在亮红灯,如图6所示。
6 总结
本文采用了面部识别技术以及单片机应用、网络通信等技术。通过对模块和网络的结合,实现了互联网的应用。对于在校大学生的寝室管理设计出有效合理的系统。通过面部采集,人脸识别,面部解锁以及网络通信等功能相结合,对于在校大学生的寝室安全以及管理工作有了很大的提升。
参考文献
[1] 霍焰焰.基于PCA和LBP改进算法的人脸识别研究[D].哈尔滨:哈尔滨理工大学, 2015.
[2] Luciano Ramalho .流畅的Python[M].,2017.5.15
[3] 武奇生、王秋才、阎茂德.计算机网络与通信[M]. 2009年1月1日
[4] 杨艳 郭振铎 徐庆伟.基于PCA和LBP的自适应加权融合人脸识别算法[J].中原工学院学报.2018,29(06).75-80
[5]康华光.电子技术基础[M]. 模拟部分,2013(6):481-488.
[6] 郭向星 田斐.智能人脸识别门锁控制系统设计[J].电子技术与软件工程.2019,(17),115-116