电子产品世界基于人脸识别的图书馆智能门禁系统
Intelligent access control system of library based on face recognition
汪小艺,王 珺,魏志强,郑 英 (东南大学成贤学院,南京 211800)
摘 要:人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术。本课题通过树莓派、OpenCV 等来完成图书馆门禁系统,通过录入人脸信息,系统识别成功则开通门禁,识别失败则报警。本系统完成了门禁系统的设计要求,实现了图书馆的门禁智能化。
关键词:树莓派;Linux;OpenCV;图书馆门禁
0  引言
人脸识别门禁是基于先进的人脸识别技术,结合成熟的ID卡和指纹识别技术而推出的安全实用的门禁产品。产品采用分体式设计,人脸、指纹和ID卡信息的采集和生物信息识别及门禁控制内外分离,实用性高、安全可靠。系统采用网络信息加密传输,支持远程控制和管理,可广泛应用于银行、军队、公检法、智能楼宇等重点区域的门禁安全控制。
目前学校图书馆门禁依旧采用的是刷校园卡进入的方式,对于同学们而言十分不便,而且也有外来人员
借用本校学生校园卡进入图书馆的现象。使用人脸识别方式进入可以有效杜绝这类情况的发生,也方便同学进入图书馆学习以及学校对于图书馆的日常管理。
1  设计思路
根据对预期功能的分析结合我们运用的技术,首先需要给出总体设计方案,本课题所实现的人脸识别系统不仅包含硬件开发平台,而且还有在开发平台上运行的各种端口函数、驱动程序和应用程序,其中硬件部分主要有:视频采集部件、视频传输部件和视频显示部件;程序部分主要有:基于树莓派的操作系统、视频采集程序、视频编码程序、视频传输程序、PC机上显示程序等。系统设计方案的总体框架如图1
所示。
图1 框架设计图
本次人脸识别系统的开发分为两个部分实施:PC 和嵌入式平台。在PC平台上,对设计好的人脸识别程序进行调试,验证程序的整体机理和功能。程序功能没有问题后,再将程序环境进行重新配置,编译成可以在嵌入式平台上运行的程序,然后移植到嵌入式平台上验证运行。这样分两步走的开发方式,虽然需要对程序进行两次编译,但是,在程序的调试和验证过程中带来了很大便利,对问题的查和处理更高效率。
2  硬件平台设计
本设计使用嵌入式板卡作为其运行的硬件平台。对于嵌入式开发板,其运行性能的关键是嵌入式处理芯片,作为嵌入式系统的核心部件,其运算处理速度的快慢直接影响系统平台的运行效率。目前市面上存在多种内核结构的嵌入式芯片,包括ARM内核芯片、IBM的Power PC、Intel的x86等,而以ARM为内核的处理芯片在全球嵌入式芯片市场中占据主导地位[1]。
项目所选用的Raspberry Pi开发平台采用的是高性能的树莓派4B作为主处理器,支持的操作系统为:树莓派专用系统Debian GNU/Linux、Fedora、Arch Linux、 RISC OS、Windows10IoT,搭载1.5GHz的64位四核
设计应用
esign & Application
D
处理器(Broadcom  BCM2711,Quad  core  Cortex -A72 (ARM  v8) 64-bit  SoC  @ 1.5 GHz ),支持Bluetooth  5.0,
两个USB  3.0和两个USB  2.0接口,双micro  HDMI 输出,支持4K 分辨率,microSD 存储系统增加了双倍数据速率支持,先前版本的microUSB 供电接口在树莓派4B 中改为USB  Type -C 接口[2]。
3  模块介绍
1)树莓派4B 英7寸显示屏
树莓派4B 英7寸显示屏的分辨率为1 024×600,功耗为0.84 A ×5 V 。通过显示屏显示运行程序,并观察运行程序后的情况。
2)800万像素4K 超清摄像头
对准人脸首先检测人脸,接着录入人脸信息,将待识别人脸对准摄像头进行识别。
3)树莓派4B 开发板
rectangle函数opencv
树莓派4B 开发板包含1.5 GHz 四核64位ARM  Cortex -A72 CPU ,两个USB  3.0和两个USB  2.0端口,双频802.11ac 无线网络和4GB 的LPDDR4 SDRAM 。
4)LY03小型斜口电磁锁
LY03小型斜口电磁锁用来模拟图书馆门禁系统开门。摄像头识别人脸后,若人脸信息能与库中信息匹配,则开锁;否则报警。
5)1路5 V 继电器模块
此模块高电平触发,即模块供电后,控制端口收到高电平继电器导通,给门锁供电。
6)蜂鸣器
蜂鸣器用来实现人脸识别不成功报警的功能,蜂鸣器电压是2~3.5 V ,工作电流小于25 mA ,频率为1.8~2.8 kHz 。直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号。
4  软件设计
4.1 基于OPENCV的人脸检测
OpenCV 是Intel 公司支持的开源计算机视觉库,轻量而且高效,由一系列C 函数和少量C ++类构成,实现了图像处理和计算机视觉方面的很多通用算法。作为
一个基本计算机视觉、图像处理和模式识别的开源项目,OpenCV 可以直接应用于很多领域,其中包括人脸识别的算法实现,是二次开发的理想工具[2]。
人脸识别功能包括以下几个方面(如图2
)。
图2 软件实现流程图
1)图像采集和预处理
可以通过下载开源的人脸识别数据集以及自己拍照建立人脸数据库进行图像采集。由于大部分脸部检测算法对光照、脸部大小、位置表情等非常敏感,图像预处理是将检测到的脸部后需转化为灰度图像,进行直方图归一化处理。
2)人脸检测
OpenCV 采用一种叫做Haar  cascade  classifier 的人脸检测器,利用保存在XML  文件中的数据确定每一个局部搜索图像的位置,并利用其内置函数进行检测。函数使用针对某目标物体训练的级联分类器在图像中到包含目标物体的矩形区域,并将这些区域作为序列矩形框返回,最终检测结果保存在变量中[3]。
4.2 基于Dlib的人脸识别
Dlib 是一个机器学习C ++库,包含许多机器学习常用的算法。dlib 先检测人脸,然后通过Resnet 生成一个128维的向量,Resnet 有几种不同深度结构,dlib 库采用68点位置标志人脸重要部位,再采用相应模块识别人脸。
4.3 部分设计代码
1)读取数据,设置摄像头参数
known _face _encodings  ,known _face _names  = getFace .getFaceArray ()
todayAlreadRegister  = DBUtils .getAlreadyRegisterArray ()print (todayAlreadRegister )print (known _face _names )
电子产品世界
signRight = “Right”
signWrong = “Wrong”
video_capture = cv2.VideoCapture(0)
rcout = 12
width=1024
height=768
video_capture.set(cv2.CAP_PROP_FOURCC, cv2. VideoWriter.fourcc(‘M’, ‘J’, ‘P’, ‘G’)) video_capture.set(cv2.CAP_PROP_FPS , 12);
video_capture.set(cv2.CAP_PROP_FRAME_ WIDTH,width)
video_capture.set(cv2.CAP_PROP_FRAME_ HEIGHT,height)
2)录入人脸信息
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
fcounter = 0
while True:
ret, frame = ad()
small_frame= size(frame, (0, 0), fx=0.3, fy=0.3)
rgb_small_frame = small_frame[:. :, ::-1]
if fcounter==rcout:
fcounter=0
face_locations= api.face_locations(rgb_small_ frame)
face_encodings = api.face_encodings(rgb_ small_frame, face_locations)
face_names = []
for face_encoding in face_encodings:
matches= apipare_faces(known_face_ encodings, face_encoding)
name = “Unknown”
face_distances= api.face_distance(known_face_ encodings, face_encoding)
#face_distances = list(face_distances <= 0.5)
best_match_index = np.argmin(face_distances)
if matches[best_match_index] and “False” not in str(face_distances):
name = known_face_names[best_match_ index]
face_names.append(name)
else:
fcounter = fcounter + 1
3)识别人脸
for(top, right, bottom, left), name in zip(face_ locations, face_names):
font = cv2.FONT_HERSHEY_DUPLEX
if name in “Unknown”:
# angle(small_frame, (left, top), (right, bottom), (0, 0, 255), 2)
cv2.putText(small_frame, name, (left + 5, bottom - 5), font, 0.6, (0, 0, 255), 1)
# cv2.putText(small_frame, signWrong, (left+ 5, bottom - 15), font, 0.6, (0, 0, 255), 1)
else:
#angle(small_frame, (left, top), (right, bottom), (0, 255, 0), 2)
# if name in todayAlreadRegister:
cv2.putText(small_frame, name, (left + 5, bottom - 5), font, 0.6, (0, 255, 0), 1)
cv2.putText(small_frame, signRight, (left + 5, bottom + 20), font, 0.6, (0, 255, 0), 1)
# else:
# DBUtils.insertRegister(name)
#todayAlreadRegister.append(name)
cv2.imshow(‘Video’, small_frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
lease()
cv2.destroyAllWindows()
(下转第80页)
设计应用
esign & Application
D
红外热像图以非接触的方式大面积地反映铜电解槽面温度分布,目前常用极板提取方法,均为手动提取特征,特征的应用有限,且泛化性能不佳。卷积神经网络检测图像目标的方法因其自动学习特征参数、准确率高的特点受到广泛关注。因此提出一种基于红外热像图的卷积神经网络检测铜电解短路极板的方法。
3)电解极板故障预警方法
红外热图像反映了铜电解槽面的即时温度分布,而短路故障的发生是一个缓慢动态发展的过程,根据一段时间内电极的温度变化信息对极板的短路故障提前预警是实现高效检测,提高电解效率的重要手段。
5  结论
设计出一种基于红外热成像的铜电解极板短路检测系统。此检测系统先是通过红外热成像来获得电解槽的温度图像,再结合时下比较热门的基于卷积神经网络的检测系统来达到分割、检测自动化的目的,最后再软硬件结合做出故障预警系统。这套检测系统的研制成功,可以减少传统的电解槽检测过程中工人的操作,极大地改善生产车间的工作环境。该系统误差小,精度高,操作方便,损耗低。这有利于减轻工人的劳动强度、提高
工厂的生产效率,同时能节省人力资源,以达到节约成本的目的。
参考文献:
[1] 赵欣.铜电解新技术的应用[[J].有冶金设计与研究,2008, 29(4):8-12.
[2] WIECHMANN E P,MORALES A S,AQUEVEQUE P,et al.Measurement of Cathodic Currents in Equipotential  I n t e r -C e l l  B a r s  f o r  C o p p e r  E l e c t r o w i n n i n g  a n d Electrorefining Plants[C]// IEEE Industry Applications Conference.2007:2074-2079.
[3] 刘延亮.铜电解过程中如何提高电流效率、降低残极率[[J].山东工业技术,2015(18):121.
[4] 李公建.浅谈铜电解生产过程中降低槽电压的途径[[J].甘肃冶金,2010,32(3):71-72.
[5] 高鹏建,滕功清.基于GMI效应的高斯计的实现[[J].北京信息科技大学学报:自然科学版,2010,25(1):53-56.
[6] 张帆,徐媛卿.奥托昆普铜电解生产全过程的控制与自动化[J].中国有冶金,2004,33(5):47-52.
[7] YANG X,MENG G,LIU X,et al.Comparative study of the micro-morphological characteristics of the first and second short-circuit copper melted beads[J].Chinese Journal of Stereology&Image Analysis,2012(2):133-137.
[8] 赵仁涛,张雨,铁军,等.红外热成像技术在铜电解电流分布测量中的应用[J].红外技术,2015,37(11):981-985.
[9] 郭彩乔.基于图像处理技术的电解槽故障诊断方法研究[D].北京:北方工业大学,2015.
[10] 张雨.铜电解槽短路故障诊断及电流分布建模方法研究[D].北京:北方工业学,2016.
[11] JIA R,MA X,HE W.Infrared short-circuit detection f o r  e l e c t r o l y t i c  c o p p e r  r e f i n i n g [C ].I n t e r n a t i o n a l Conference on Advanced Electronic Science and Technology,2016.844-851.
(上接第67页)5  实验过程
1)首先将软件安装好,连接硬件好;
2)将摄像头打开,检测人脸信息,并录入人脸信息;3)录入人脸信息后,运行识别程序,将摄像头对准已录入信息的人脸,识别成功,显示录入姓名并开锁;对准未录入信息的人脸,识别失败,显示unknown 并报警。
6  结论
本项目以OpenCV 为核心,树莓派为硬件基础设计实现了具有人脸识别功能的智能安防门禁系统。本智能
门禁系统首先将授权的人脸信息进行灰度化、降维及计算特征值等处理,再进行准备训练,得到授权人的相关信息。然后对摄像头采集到的人脸信息进行处理。经过测试,该智能门禁系统较好地完成了
人脸识别功能,识别成功开锁,失败则报警,完成了门禁系统的设计要求,实现了图书馆的门禁智能化。
参考文献:
[1] 周昕梓.树莓派开始,玩转Linux[M].北京:电子工业出版社, 2018.
[2] GOLDEN R.树莓派应用速成:网络应用秘方.符鹏飞.译.北京:科学出版社,2014.
[3] 朱伟.OpenCV图像处理编程实例[M].北京:电子工业出版社, 2016.