基于并行算法的快速人脸识别系统设计与实现
2020-04-30许嘉诚
许嘉诚
摘 要:为了提高人脸识别实时处理速度,并充分利用当前多核处理器资源,文章实现了一种在Python环境下基于并行算法的快速人脸识别系统。人脸特征与数据库的储存实时交互,利用各子程序安全通信实现同步处理,并行处理实时人脸检测和人脸特征编码提取,同时进行最相似人脸匹配。实验结果表明,程序并行后有着速度快、准确度高、实时性强等优点。为大数据人脸识别处理提供了方法,也有利于实际的使用。
关键词:人脸识别;并行计算;多核;Python语言
人脸识别技术在某些领域相对安全,识别效率高、领域广[1],但是当前海量人脸数据使得人脸识别系统的效率急剧下降,同时多核处理器技术迅猛发展,为人们提供了充足的多核资源。所以为了提高人脸识别效率,并充分利用多核资源,开发相应的并行化应用程序势在必行[2]。
1 相关概念
1.1 人脸识别概述
人脸识别是通过生物特征对人的身份进行辨认,是计算机视觉领域的一个研究方向[3]。人脸识别至今尽管已经有30年左右的研发历史,但其相关的技术和产品仍然受光照、视角、遮挡、年龄等不同方面因素的综合影响。同时人脸识别技术的实现也是一个较为复杂的过程,因为人脸识别技术的实现就是通过计算机算法来统一和协调各个步骤,通过采集、预处理、特征提取、识别匹配4个步骤分部进行[4]。
1.2 人脸识别过程
人脸检测是一个特别复杂的过程,根据所选检测系统的不同,使用到的检测算法、原理以及编程语言等也会相应不同,比如Harmon和Lesk采用多维特征矢量来表示,而Kaya和Kobayashi则采用欧氏距离来表示[5],但归纳起来大致都可以分为以下流程:人脸检测、人脸关键点检测、人脸规整、人脸特征提取、人脸识别。
1.3 Python中的并行计算工具
multiprocessing是Python中支持产生进程的包,可以充分地利用机器上的多个核心。Threading以及pyQt5都可以产生线程。以上是主要的并行工具。
1.3.1 multiprocessing
在multiprocessing中,Process类被用来表示一个进程对象。创建该子进程对象时,只需传入函数和参数即可,然后通过Start开始进程。对于Python进程之间的共享数据,可以使用Multiprocessing.Manager创建变量用于进程间的共享数据。其支持的数据类型有list,Dict,Namespace。程序的同步也使用Manager进行实现。
1.3.2 threading
对于线程的建立使用threading中的Thread类完成,Thread的主要方法和属性和Process相似。
2 程序设计
2.1 单进程处理程序
使用多核进行计算的程序,主要处理单张图像的人脸识别,根据相对应的需求处理结果,如标出识别结果、保存结果等。其可以分为以下几个模块:
(1)初始化线程,获取数据库人脸特征和进程信息。
(2)根据同步信息更改缓存的人脸特征以及各种处理信息。
(3)根据全局同步信息,等待识别图像准备完毕,直到收到可处理信号为止。此步骤为了使得处理图像具有统一时序性,防止图像重复处理或者未处理。
(4)通过参数中的list,获取需要处理的图像。
(5)进行人脸检测以及特征提取,用于做后面的比较以及定位等。
(6)得到的特征和数据库中的已有的人脸数据特征进行比较,根据欧式距离判断人脸属于谁。
(7)进行结果的图像绘制,以便于更直观地展示人脸识别信息,并且整合得到的结果。
(8)等待上一个进程结果写入结束,此步骤主要为了保证处理结果具有统一时序性,结果不会多次读取也不会出现未读取等情况,该步骤也保证了读取结果始终为最新结果。
(9)将处理后的图像、处理时间以及人脸识别的结果放入对应的list中。结束后跳转(2),再次等待响应,循环往复。
由上可知,当处理某图像时,需要其他线程将待处理图像放入对应list中,然后修改同步信息并进行运算,如此往复。
2.2 待识别图像获取以及同步信息处理程序
此程序为单个线程,主要用于从视频或者摄像头中获取待识别图像放入相应的list,以及按照用户需求切换视频和摄像头,控制开始、暂停以及处理延迟的作用。程序先进行初始化;然后根据全局同步信号,判断当前用户动作,更改相应数据源;等待录入的待识别图像处理完毕,获取新的待识别图像;最后进入延迟等待,此延时是使得处理后的每帧延时间均匀分布,增加处理视频的流畅性。其等待时间大致为单个图像处理时间除以工作进程数,然后更改同步信息,通知进程进行处理。
2.3 主程序
主程序主要包括各種进程和线程的建立、用户选择数据源(视频、图像、摄像头)、录入人脸信息、获取识别结果和处理识别结果。进程和线程的建立是关键部分,进程和线程的建立过程:初始化各个通信同步变量,获取数据库信息;控制工作进程数workProcess_num;创建相应进程线程,此处代码为:
pools.append(threading.Thread(target=captureThread,args=(GlobalVariable, …,)))
pools[0]. start()
for process_id in range(1, workProcess_num + 1):
pools.append(Process(target=workProcess,args=(process_id,GlobalVariable, …,)))
pools[process_id]. start()
主程序還进行识别结果的处理,此处设置timer,每0.001 s响应一次,判断同步信息是否有未获取的图像结果;若有,则从获取结果并处理。
3 实验结果分析
文章实验过程中使用数据选自美国麻省大学安姆斯特分校制作的人脸数据集Labeled Faces in the Wild人脸数据集进行测试,对于阈值为0.39的情况人脸识别率有高达99.38%的准确率。
3.1 实验环境
硬件配置:Intel(R) Core(TM) i7-8750H CPU @ 2.20 GHz 2.21 GHz, 16 GB内存。
软件:Windows10 家庭中文版操作系统。PyCharm 2018.3.5 (Community Edition) Python 3.6环境。
3.2 实验结果
在保证人脸识别率稳定的前提下,本文采用不同数量的进程并行进行实验,得出了不同数量进程数在人脸识别过程中系统每秒所能处理视频帧数之间的关系,结果如图1所示。
3.3 测试结果分析
每秒所处理的摄像头帧数随着进程数增加而增加。虽然进程数增加会使处理帧数增多,但是增加的趋势会逐渐变缓,这是程序在并行过程中的额外开销。
4 结语
文章设计并实现了基于并行算法的快速人脸识别系统,提高了在多核环境下人脸识别的速度以及CPU利用率。该系统仅需提供人脸特征数据,即可利用该系统获得高效且准确的识别结果。实验结果表明:该人脸识别系统具有准确的识别结果和高效的处理速度,可以投入到日常使用中。
[参考文献]
[1]张春悦,韩飞.人脸识别系统设计[J].湖北农机化,2019(12):85.
[2]郑晓薇,于梦玲.基于Matlab多核集群的人脸识别算法的并行化设计[J].计算机应用,2011(10):2597-2599.
[3]梁晶,史记征.基于Python库的人脸识别方法研究[J].网络安全技术与应用,2019(7):46-47.
[4]R DATTA,D JOSHI,J LI,et al.Image retrieval:ideas,influences,and trends of the new age[J].Acm Computing Surveys,2010(2):2007.
[5]张枝令. Python实现基于深度学习的人脸识别[J].电子商务,2018(5):47,96.
Design and implementation of fast face recognition system based on parallel algorithm
Xu Jiacheng
(Kunming University of Science and Technology, Kunming 650000, China)
Abstract:In order to improve the real-time processing speed of face recognition and make full use of the current multi-core processor resources, this paper implements a fast face recognition system based on parallel algorithms in Python. The facial features are stored and interacted with the database in real time. The subroutines are used to securely communicate with each other in parallel. Real-time face detection and facial feature code extraction are processed in parallel. Similar face matching. At the same time, the program was improved so that it can handle multiple source data. The experimental results show that the parallel program has the advantages of fast speed, high accuracy, high stability, good recognition effect, and strong real-time performance. It provides a method for face recognition processing in big data and is also beneficial to practical use.
Key words:face recognition; parallel computing; multi-core; Python language