基于计算机视觉的室内防盗联动系统研究

2021-08-24 12:20范希喆魏季坤王睿哲王儒成汤孟祺
科技视界 2021年21期
关键词:测试者人脸识别人脸

范希喆 魏季坤 王睿哲 王儒成 汤孟祺

(苏州科技大学机械工程学院,江苏 苏州215009)

0 引言

现代社会中,普通家庭对于安防系统的需求不断上涨。但传统家庭安防系统往往具有以下几个缺点:

(1)响应被动:以摄像头为例,传统安防设备倾向记录证据,缺乏对于状况主动响应的能力,这可能造成事故处理不及时。

(2)检测机制单一:传统安防设备往往采用单一的信息获取手段,如监控探头获取视觉信息,动作传感器判断室内有无物体移动等。传统安防设备的信息获取方式之间缺少相互的信息交流与决策,单一的决策方式可能会造成稳定性差,精准度差,容易破坏等后果。

(3)价格昂贵:市面上现有的利用人脸识别技术,即一种通过对生物个体特征进行识别[1]的技术的监控系统,其定位多针对大型场合。为保证系统在人流量大,环境复杂的场合中具有一定的精准度与稳定性,往往需要依靠高性能硬件以支持其巨大的信息处理量,且配套软件往往复杂且精密,因此这类针对大型场合的安防设备往往体量巨大价格昂贵。针对家庭安防相对简单且人流量小的场合,大型安防设备不仅价格不菲,且浪费软硬件性能。

目前,安防设备的发展已经有了一定规模,并逐渐由传统的安防设备向智能安防设备进行转型。智能安防系统可以理解为图像的传输和存储、数据的存储和处理准确而选择性操作的技术系统[2]。目前的智能安防系统多采用人脸识别技术,国内互联网厂家诸如商汤、虹软、阿里等都先后开发并推出了商用人脸识别安防解决方案,并有了广泛应用。但由这些大型安防设备存在上文提及的缺陷,并不适合使用在家庭环境中使用。

针对以上原因,本文提出一种针对家用场合的联动家庭安防系统。该系统不需要依靠专用设备运行,具有多种侦测手段,并可进行一定主动响应。

1 系统结构

1.1 硬件架构

在本项目中,我们采用了树莓派(RaspberryPi)开发平台。硬件配置信息为:树莓派4B(RaspberryPi 4B)开发板,内存容量8G。其操作系统为Linux基于树莓派平台开发的发行版本。为了保证更好的程序运行效果,本文采用了具有红外夜视功能的树莓派摄像头作为监控摄像头。但考虑到开发工作的便捷性,本文采用个人电脑作为开发平台,当程序开发完成后再将其移植到树莓派平台。

CPU Intel Core i7 9700显示适配器 Nvidia Geforce GTX1660Ti Max-Q内存 16G

进行开发与调试工作的电脑硬件配置如下:

1.2 硬件系统工作流程

硬件工作流程可以分为以下几个步骤:

(1)环境信息获取:本文采用红外摄像头作为视频信息的获取来源。后续开发中,将尝试增加不同的传感器(如动作传感器)获取更多环境信息。

(2)报警信息决策:这一步骤的目的是基于传感器传入的信息来判断是否有入侵者,进行报警决策。目前本系统只依靠摄像头传入的视频数据进行决策。若识别到当前环境中所有出现的人脸均为已登记的人脸,或当前环境中没有出现人脸,系统将判断环境为安全,不采取行动;若该程序识别到当前环境中出现了陌生人脸,则系统将判定环境危险,并采取行动。

(3)采取主动响应措施:这一步骤的目的是让系统在遭遇诸如非法入室等特殊情况时,能够及时采取一些措施减少损失,如传送报警信息及录像留证。

1.3 软件系统架构

软件算法的主要实现小型的人脸比对。该算法具有以下特征:

(1)适用于人流量相对小,周围环境不太复杂的场合。

(2)兼容大部分家用硬件,如个人电脑,且运行在常用的操作系统(如Windows与Linux)中。

(3)具备一定的主动响应能力。当识别到家庭中有陌生面孔进入时,程序将发送警报信息,并自动录像留证。与此同时,程序计划实现联网报警,操作门窗落锁等功能。

基于以上特征,我们采用了Python语言[3]并在Linux操作系统(发行版本Ubuntu 20.04)中进行开发。

人脸识别及比对功能的实现依赖于函数库face_recognition。组员通过优化函数效果,以及设计程序逻辑与结构以实现所期望的功能。

程序主要使用的函数库如下:视觉及人脸处理OpenCV[4];face_recognition;PIL;numpy;math;sklearn。本文软件系统流程如图1所示。

图1 软件系统流程图

1.4 软件算法步骤

(1)信息收集:OpenCV库中VideoCapture方法调用摄像头的画面。程序读取画面后,将图像转化为程序所能处理的RGB格式,并按比例缩小画面至原四分之一以加快处理速度。只有当侦测到陌生人脸时,程序才会进行保存录像的工作,以节省磁盘空间。运行时,程序将会弹出一个窗口以实时显示监控画面捕捉的画面。

(2)人脸存储与样本训练:这一步骤的目的是为了登记人脸信息,当被登记过的人脸进入监控时,系统不会触发警报。本算法利用face_recognition基于KNN算法的扩展函数库knn_clf中的train函数进行训练工作,这一训练步骤需要提供将被登记的人脸的若干张照片。训练后的人脸数据库模型将以txt格式存储在程序路径下的train_model文件夹中,被登记人脸将以向量形式存储在该文件中。当程序运行时,它将首先检查train_model文件夹下是否存有已训练好的人脸数据库。倘若已有人脸数据,将跳过训练进程;倘若没有人脸数据模型,程序将读取程序路径下的known_face文件夹中的人脸照片进行训练进程。当训练完成后,程序才会进行下一步的进程。train函数对于训练照片中人脸的识别基于face_recognition库中的face_locations函数。在实际使用中,可能因为照片中人脸角度或光照等因素导致无法找寻到人脸,此时程序将返回信息“No face found in”+“出错照片的文件名”,为保证训练效果,应替换出错照片并重新训练。

(3)人脸识别与抓取:对于VideoCapture方法所读入的视频信息利用while循环逐帧读取,将静态帧当作静态图像进行处理。predict函数能够读取图像信息,找到图片中的人脸,并将其坐标信息存储在X_face_locations中。本程序通过读取这些人脸坐标信息,利用OpenCV实现绘制绿框标注识别结果。predict函数对于视频画面中人脸的抓取基于face_recognition库中的face_locations函数。在实际使用中,我们发现该函数对于视频人脸的抓取效率较低,经常无法准确识别。因此我们更改了该函数的源码,利用OpenCV库中的HaarCascade人脸级联分类器替换了face_locations函数,在抓取效率上获得了一定的提升。

(4)人脸比对:这一步骤的目的是为了比对监控抓取人脸与已登记人脸。本程序利用knn_clf函数库中的predict函数进行人脸比对的工作。predict函数既可进行人脸定位也可进行人脸比对。这一功能的实现基于KNN(KNearestNeighbor,即K最邻近)算法,这是一种分类算法,广泛应用于人脸识别等领域。其基本原理如下:首先利用face_recognition库中的face_encodings函数将predict函数传入的待比对的人脸编码成向量。随后,根据公式计算待比对人脸向量与已登记人脸每一个向量的欧式距离ρ。然后函数将选取K个与待比对向量欧氏距离最近的已登记人脸向量,统计K个已登记人脸向量中哪一组别的向量占据多数,并将待比对人脸划入该占最大比重的组别。与此同时,设置一个欧氏距离的最大阈值ρmax,当所有ρ距离均大于ρmax时,程序将认定待比对人脸为陌生人脸,并返回一条“unknown”信息。在实验过程中,我们发现由于predict函数抓取人脸的范围过大,导致背景被抓取干扰结果,于是我们修改了predict函数源码,将人脸范围按比例缩小至原先的75%再进行比对工作。

2 实验结果

2.1 实验准备

利用5人各15张人脸照片以作为训练样本以训练已登记人脸的数据库。并选用了电脑原配前置摄像头(400万像素)作为视频信息的获取来源。

2.2 实验内容

开启程序,待程序完成训练过程,弹出实时视频画面显示框后,进行如下实验:

2.2.1 测试单人情况下程序的识别情况

令5人依次进入摄像头的捕捉范围内,进行时长30 s的人脸检测与比对,通过观察实时视频画面显示框以确定程序当前的识别状态。再令未进行人脸登记的实验者进入摄像头的捕捉范围内,观察程序的识别状态。通过统计各位同学在30 s内程序正确识别其人脸的时间来衡量程序的识别准确率。

2.2.2 测量不同距离下单人情况下程序的识别情况

令5人依次进入摄像头的捕捉范围内,进行时长30 s的人脸检测与比对,在前10 s中,测试者距离摄像头保持20 cm的距离,随后以每10 s 20 cm的距离远离摄像头。通过观察各位测试者在不同距离下被程序正确识别的情况来衡量程序在不同距离下的识别能力。

2.2.3 测试多人情况下程序的识别情况

令5人以及若干(1~3名)未进行人脸登记的实验者全部进入摄像头的捕捉范围,进行30 s的实时人脸检测与识别,保持各个测试者人脸距离与摄像头保持在20~40 cm这个区间中,观察程序在人员混杂情况下的识别情况与准确率。

2.3 实验结果

2.3.1 单人情况下程序的识别情况

在实时人脸检测与比对环节中,五位已登记测试者在30 s的识别时长中,分别被程序正确识别了19 s、20 s、22 s、18 s、15 s。识别结果如图2所示。

图2 识别结果

在对于未登记人脸的识别时,程序曾将几帧画面错误的识别成为了已登记人脸,但由于错误识别的时间较短,后期可以通过更改程序决策方面的代码来防止误报警情况的产生。

2.3.2 不同距离情况下程序的识别情况

在实时人脸检测与比对环节中,五位测试者在距离摄像头20~40 cm时均获得了较为准确的识别结果,但当测试者距离摄像头的距离大于或等于50 cm时,程序几乎无法将测试者从背景中准确地识别出来。为了进一步优化程序效果,计划减少视频画面处理阶段对于视频画面的裁剪与压缩,并采用像素更高的摄像头。

2.3.3 多人情况下程序的识别情况

此环节的识别结果与单人情况下识别情况下基本一致,五位已登记测试者在实验中分别被程序正确识别了18 s、21 s、22 s、18 s、17 s(数据顺序与单人情况下顺序一致)。而未登记人脸的误识别情况也同样可以忽略。但值得注意的是,程序运行速率在多人识别的情况下存在明显的下降。

3 结语

本文提出了一个能够兼容运行在多种设备与操作系统中的轻量化人脸识别与比对程序,为家庭安防提供了一种新的、更为廉价的解决思路。利用本文提出的方法,用户可以实现简单的人脸识别比对安防系统,而不需要购买昂贵的专用安防器材。

在未来的开发与研究中,将进一步提升人脸识别与比对的精准度并完善程序逻辑从而减少错误报警的产生。与此同时,我们还将进一步优化程序的运行效率与速率,减少程序对于高性能硬件的依赖。我们还将继续开发更多的信息获取与主动响应方法,使得本项目所开发的安防系统更具有联动性、稳定性与主动性。

猜你喜欢
测试者人脸识别人脸
人脸识别 等
有特点的人脸
揭开人脸识别的神秘面纱
搜救犬幼犬挑选测试
三国漫——人脸解锁
基于类独立核稀疏表示的鲁棒人脸识别
马面部与人脸相似度惊人
很多英国人不会拼常用词
基于K-L变换和平均近邻法的人脸识别