收稿日期:2022-01-22基金项目:湖南省教育厅科学研究项目(20C1435);长沙市自然科学基金项目(kq2202260)
引用格式:徐宏宁,刘伟,惠君俊,等.基于Hadoop与RabbitMQ的人脸识别算法测试平台的设计与实现[J].测控技术,2023,42(3):
38-43.
XUHN,LIUW,HUIJJ,
etal.DesignandImplementationofTestPlatformforFaceRecognitionAlgorithmBasedonHadoopand
RabbitMQ[J].Measurement&ControlTechnology,2023,42(3):38-43.
基于Hadoop与RabbitMQ的人脸识别算法测试平台的
设计与实现
徐宏宁1
,刘 伟1
,惠君俊1
,周金磊1
,罗雄中1
,丁长松
1,2
(1.湖南中医药大学信息科学与工程学院,湖南长沙 410208;2.湖南省中医药大数据分析实验室,湖南长沙 410208)
摘要:针对人脸识别算法研究过程中测试效率低下的问题,基于分布式技术,设计并实现了通用的分布
式大数据测试平台
为了提高人脸识别算法的大数据测试的执行效率,提高测试结果统计计算的执行效率,基于RabbitMQ设计分布式并行执行架构,利用Hadoop集的MapReduce框架进行分布式并行计算。利用Java语言的Spring框架开发测试平台,将测试代码与测试图片托管于Hadoop集的HDFS文件系统,实现了测试业务与测试平台的分离,提高了平台的通用性。该测试平台不仅实现了单个测试
任务的分布式执行而且满足多个测试任务同时执行
,可对测试任务以及测试相关的代码与数据进行有效的管理。与传统测试方法相比,该平台测试效率提高10余倍,测试图片的数量越大测试效率提升越
明显
。该测试平台具有业务通用性、容量可扩展性,对于其他人工智能算法的大量数据测试具有借鉴意义与参考价值
。关键词:人脸识别算法;测试平台;分布式;Hadoop;RabbitMQ中图分类号:TP391  文献标志码:A  文章编号:1000-8829(2023)03-0038-06doi:10.19708/j.ckjs.2022.07.280
DesignandImplementationofTestPlatformforFaceRecognitionAlgorithm
BasedonHadoopandRabbitMQ
XUHong ning1牞LIUwei1牞HUIJun jun1牞ZHOUJin lei1牞LUOXiong zhong1牞DINGChang song1牞2
牗1.SchoolofInformatics牞HunanUniversityofChineseMedicine牞Changsha410208牞China牷2.HunanBigDataAnalysisLaboratoryofChineseMedicine牞Changsha410208牞China牘
Abstract牶Aimingattheproblemoflowtestefficiencyintheresearchoffacerecognitionalgorithm牞ageneraldistributedbigdatatestplatformisdesignedandimplementedbasedondistributedtechnology.Inordertoim provetheexecutionefficiencyofbigdatatestoffacerecognitionalgorithm牞andimprovetheex
ecutionefficien cyofstatisticalcalculationoftestresults牞adistributedparallelexecutionarchitectureisdesignedbasedonRabbitMQ牞andtheMapReduceframeworkofHadoopclusterisused.ThetestplatformisdevelopedbyusingthespringframeworkofJavalanguage.Onthistestplatform牞thetestcodesandtestpicturesarehostedintheHDFSfilesystemofHadoopcluster牞whichrealizestheseparationoftestbusinessandtestplatform牞alsoim provestheuniversalityoftheplatform.Thetestplatformnotonlyrealizesthedistributedexecutionofasingletesttask牞butalsosatisfiesthesimultaneousexecutionofmultipletesttasks牞andeffectivelymanagesthetesttasksandrelatedtestcodesandtestdata.Comparedwithtraditionaltestmethods牞thetestefficiencyisim
provedbymorethan10times.Thelargerthenumberoft
estpictures牞themoreobvioustheimprovementoftestefficiency.Thetestplatformhasbusinessuniversalityandcapacityscalability.Ithasreferencesignificanceandreferencevalueforbigdatatestofotherartificialintelligencealgorithms.
Keywords牶facerecognitionalgorithm牷testplatform牷distributed牷Hadoop牷RabbitMQ
  随着深度学习的发展,人工智能的应用场景不断增加,人工智能产品越来越多,极大地方便了人们的生活。同时,人们对人工智能产品的要求也越来越高。人脸识别技术方面,面对日益复杂的社会治安形势,国家出台了一系列政策,要求在社会治安防控体系建设中引入人脸识别技术并提升图像中有价值的人脸数据应用水平、建立人脸分析系统、提升对图像的解析能力。近年来,传统的人脸识别技术逐步被深度学习方法所取代。从国内外研究现状来看,基于深度学习方法的深度信念网络(DeepBeliefNetworks,DBN)和卷积神经网络(ConvolutionalNeuralNetwork,CNN)模型的人脸识别技术已被广泛运用,并取得了良好的效果[1]。区别于指纹、虹膜等其他生物识别,人脸识别技术具有直观、非接触性、方便采集、可扩展性的优点[2],成为大数据背景下生物特征识别中一个非常热门的研究领域,被广泛应用于门禁考勤、访问控制、欺诈检测、公
安刑侦、智能支付等领域[1]。在人脸识别相关产品的研发过程中,如何有效保障产品的质量,提高人脸识别的精准度显得尤为重要;一个高精准度的产品在发布前必须经过大量的数据测试;在产品快速迭代开发的背景下,如何快速完成海量数据的测试,对测试方法与测试手段提出了新的挑战。新技术的发展,使得软件测试受到一定的挑战,软件测试的五大趋势为:敏捷化、高度自动化、云化、服务化、智能化[3],杀虫剂效应使得传统的测试工具很难满足测试需要。
大数据背景下,基于大数据的并行测试技术是自动测试领域的前沿课题[4]。利用Hadoop、Spark等大数据处理框架对大数据进行处理取得了一定的成效[5-8]。Hadoop是一个能够对大量数据进行分布式处理的软件框架,以一种可靠、高效、可伸缩的方式进行数据处理。Hadoop最核心的设计就是分布式文件系统(HadoopDistributedFileSystem,HDFS)和MapRe duce。HDFS为海量的数据提供存储,而MapReduce则为海量的数据提供并行运算。Spark是专为大规模数据处理而设计的快速通用的计算引擎,拥有HadoopMapReduce所具有的优点,但与MapReduce不同的是,Job中间输出结果可以保存在内存中,Spark是对Ha doop的补充,可以在Hadoop文件系统HDFS中并行运行。大数据背景下的测试技术与方案在逐步发展[9-10],基于Hadoop、Spark等大数据处理框架的大数据测试方案在市面上有一定的应用,应用场景局限于文本类数据处理且被测函数支持在MapReduce或Spark框架中分布式执行的情况。人脸识别算法不支持在MapReduce或Spark框架中分布式运行,而且测试数据为图片,使得传统的大数据处理框架不能实现
对人脸识别算法的大数据测试,只适用于对测试结果的分布式并行统计。本文基于RabbitMQ与Hadoop技术,提出了一种人脸识别算法的大数据测试方案。通过RabbitMQ实现了对人脸识别算法大数据测试的分布式多线程执行;通过Hadoop的MapReduce框架实现对测试结果统计的分布式并行计算;利用Java语言的Spring框架开发测试平台,实现了测试数据、测试代码、测试任务等平台化管理,方便测试人员操作使用。本文有效地解决了人脸识别算法的大数据测试的效率问题。
1 测试需求分析
在人脸识别算法研究过程中,通常需要经过大量图片的测试才能精确评估算法的识别精确度。人脸识别算法测试的步骤如下:①准备大量测试图片并对其作预处理。②对人脸识别算法进行大数据测试,将测试结果数据写入文件。③对测试结果进行统计计算,拒识率、误识率等是评价人脸识别算法精确度的重要指标,为了计算算法精确度的常用评价指标,需要对测试结果进行统计并与预期数据作运算。其中步骤②与步骤③有依赖关系,在一定程度上制约了整个测试过程的效率。当图片数据量达到10万幅级别时,利用单台机器进行测试,一次测试耗时6h以上,不仅效率低下,而且存在算法版本管理混乱、操作使用不方便等问题。
为了提高测试效率,一方面,人脸识别算法的大数据测试过程与测试结果统计过程实现分布式处理。另
一方面,研究过程相关的代码与数据需要有效地管理,包括测试代码管理、测试图片管理、测试任务管理等,这是平台化需求。
2 系统架构设计
经过对人脸识别算法的研究发现,该算法支持多线程执行,但不支持在Hadoop集的MapReduce框中分布式并行执行,没法利用Hadoop集的MapRe duce框架对算法进行分布式大数据测试,但可以基于RibbitMQ消息队列设计相应的分布式架构对算法进
·
93
·
基于Hadoop与RabbitMQ的人脸识别算法测试平台的设计与实现
行分布式大数据测试。测试结果统计任务是文本数据
的处理任务,适合利用
Hadoop集的MapReduce框架进行分布式并行计算。利用Java语言的Spring框架开
发相应的管理平台,该平台将
Hadoop、RibbitMQ、MySQL数据库等整合成一体。平台的系统架构如图1所示。
图1 系统架构图
该平台包括管理模块与处理模块,两个模块通过Hadoop、RabbitMQ与MySQL等第三方组件实现解耦,提高系统的灵活性与可扩展性。管理模块具有测试图片管理、测试代码管理、测试任务管理以及测试结果管理等功能。处理模块负责测试任务的执行以及测试结果统计任务的触发与执行监管。Hadoop是一个分布
式集,其HDFS文件系统可以托管测试图片与测试代码,其MapReduce框架可以实现分布式并行计算。RabbitMQ是一个消息队列,实现管理模块与处理模块
之间的消息通信。MySQL数
据库存储相关数据。在管理模块触发测试任务,一个测试任务可以根据测试图片的子目录自动分解成多个测试子任务,每个测试子任务的相关信息分发到RabbitMQ的消息队列。处理模块监控RabbitMQ的消息队列,从中获取测试子任务并执行,可以在多台机器部署处理模块,从而实现测试任务的分布式执行。当所有测试子任务都执行完成时处理模块负责触发该测试任务对应的测试结果统计任务,监控其执行并将统计结果导入MySQL数据库,便于统计结果在管理模块可视化展示。
hadoop与spark的区别与联系2.1 管理模块设计管理模块采用Java语言Spring框架开发,使用A pache作为We
b服务器,使用MySQL数据库存储基本数据。管理模块的功能模块层次图如图2所示。测试图片管理可以实现图片的上传与删除功能。批量图片以压缩包的形式上传。为了实现分布式测试,需要提前对测试图片进行分组管理,本平台支持两种分组模式,一种是自动分组模式,一种是非自动分组模式。如果测试图片以非自动分组模式上传,在HDFS文件系统以原有的子目录结构进行分组管理;如果测试图片以自动分组模式上传,则根据设置的每
图2 管理模块的功能层次图
组图片数量对图片进行自动分组,再上传HDFS文件
系统,两种分组模式都会在
MySQL数据库记录分组信息。部分人脸识别算法对图片的分组有一定要求,需要选择非自动分组模式,以人工方式对测试图片提前分组再打包上传。测试任务分解成测试子任务的主要依据是测试图片的分组信息,每一个分组对应一个测试子任务,有多少个分组就分解成多少个测试子任务。测试代码管理可以实现测试代码的上传与删除功能。人脸识别算法的测试代码包含对人脸识别算法调用的相关代码以及人脸识别算法Jar包,测试结果的
统计代码是MapReduce程序。测试代码上传到Ha doop的HDFS文件系统,并将人脸识
别算法的版本号、HDFS地址、执行命令模式字符串等相关的信息保存在MySQL数据库。测试任务管理可以实现测试任务的创建、删除、修改、查看等操作。创建测试任务时必须指定测试任务的测试代码与测试图片的相关信息,测试代码包括算法的测试代码与测试结果统计代码。另外,可以配置测试任务执行的线程数、触发机制等信息,触发机制包括定时触发与人工触发两种。每个任务可以执行多次,每次执行称为测试任务实例,每个测试任务实例有多个测试子任务实例,相关信息存储在MySQL数据库。测试任务的触发逻辑如下:在测试任务管理模块中到相应的测试任务,单击测试任务的触发按钮,测试任务触发后,从数据库中获取该测试任务的所有可分解的测试子任务信息,循环遍历测试子任务信息列表,将每一个测试子任务信息以消息的形式分发到RabbitMQ的任务队列。任务触发过程的流程如图3所示。测试结果管理包括测试结果查看与删除功能,可以查看和删除测试任务的所有执行实例的结果信息,结果信息包括测试图片数、拒识率、误识率等统计信息。2.2 处理模块设计处理模块监听RabbitMQ的消息队列,消息队列的消息就是测试子任务信息。处理模块从消息队列中获取测试子任务并执行,执行完测试子任务继续监听
·
04·《测控技术》2023年第42卷第3期
图3 任务触发过程的流程图RabbitMQ的消息队列,从中获取测试子任务并执行,如此循环往复。测试子任务执行的流程如图4所示
。图4 测试子任务执行的流程图处理模块从消息队列获取测试子任务信息后从MySQL数据库获得该测试子任务的所有信息,包括测试代码与测试图片的HDFS地址以及执行线程数等;然后从HDFS文件系统下载测试代码与测试图片,拼装执行命令并执行,测试子任务执行完成后更新数据库中该测试子任务实例的状态等信息;最后,判断该子任务是否为所属测试任务的最后一个执行完成的测试子任务,如果不是,则该子任务执行结束,如果是,则从MySQL数据库中获得该任务的测试结果统计任务,并触发任务执行。测试结果统计任务执行完成后,会自动从Hadoop的HDFS文件系统下载
统计结果并导入MySQL数据库,这些统计结果将在管理模块可视化展示。3 亮点分析该平台比较完美地解决了测试效率与测试管理问题,实现测试业务与测试平台的分离,实现测试任务与测试结果统计任务的分布式并行执行,通过平台化的方式管理测试相关的文件与数据,方便测试管理与算法基本性能指标的查看。该平台具有高可扩展性、可维护性、高可靠性,是一个通用的分布式大数据测试平台。
3.1 测试业务与测试平台分离测试业务包括对人脸识别算法的测试以及对测试结果的统计,不同算法的输入、输出以及统计指标不同,与业务需求有关,属于业务范畴。这部分代码单独开发,实现以命令行触发的形式在本地执行或在Ha
doop集执行。测试代码以Jar包的形式托管于Ha doop集的HDFS文件系统,在该平台只需要记录测试任务相关代码与测试图片的HDFS地址以及执行命令的模式字符串等信息,执行时再从HDFS文件系统
下载测试代码与测试图片,拼装执行命令并执行。如
果测试业务变更,测试任务的执行过程没有变化,平台
的代码不需要做任何修改,只需要开发测试代码,在平台重新上传测试代码并重新关联测试任务。将测试业务代码与测试平台代码分离,保证测试平台的通用性与灵活性。3.2 实现多环节分布式并行处理
①算法测试环节。一个测试任务自动分解成多个测试子任务,每个测试子任务封装为消息分发到RabbitMQ消息队列,处理模块部署在多台机器,分别从RabbitMQ消息队列获取测试子任务消息并执行,实现一个测试任务在多台机器分布式执行。单个测试子任务的执行支持多线程,所以测试任务的执行实现了分布式多线程执行。另外,处理模块主动从RabbitMQ
队列中获取测试子任务,保证了处理模块所在机器的负载由自己做主,同时非常方便扩展部署处理模块。②测试结果统计环节。测试结果统计任务为Ha
doop集的MapReduce程序,分布式并行执行。3.3 业务数据托管在Hadoop测试代码与测试图片托管于Hadoop集的HDFS文件系统,对文件进行分布式管理,保证了数据的安全性,分布在不同机器的处理模块执行测试任务时,从Hadoop集下载测试代码与测试图片,解除管理模块与处理模块的数据依赖,实现平台的松耦合。3.4 支持多测试任务同时执行该平台支持多个测试任务同时执行,每个测试任务有各自的测试图片与测试代码,测试任务分解时根据各自测试图片进行分解。每个测试子任务执行时都
会从HDFS文件系统下载各自的代码与图片独立执行,多个任务同时执行,互不干扰。
4 效果分析本平台部署三台服务器,每台服务器的基本信息为CentOS8.2操作系统、2核CPU、4GB内存、400GB
·
14·基于Hadoop与RabbitMQ的人脸识别算法测试平台的设计与实现
硬盘,每台服务器部署2个以上的服务,利用三台服务器搭建了Hadoop集,三台服务器都部署处理模块,在三台服务器分别部署RabbitMQ、管理模块与MySQL数据库。管理模块相关功能都具有人机交互界面,部分任务的测试结果如图5所示。测试结果显示图片总数、误识率与拒识率等数据,5个线程的任务是指每个处理模块开启5个线程;单线程任务是指每个处理模块开启一个线程。误识率与拒识率是人脸识别算法最重要的评估指标,帮助人脸识别算法研发团队快速了解算法识别的精确度。
图5 部分任务的测试结果图
为了评估本平台测试过程的准确性,对不同数量
的图片在单进程模式与本平台5线程模式的测试结果进行比较,分别进行了23种不同数量图片的测试,图片数量有1幅、2幅、5幅等,最大为10万幅。其中,1000幅图片在单进程模式与本平台5线程模式的误识率均为0.51%、拒识率均为0.78%;10万幅图片在单进程模式与本平台5线程模式的误识率均为
1 97%、拒识率均为2.85%。其他数量图片在单进程模式与本平台5线程模式的误识率与拒识率均一致,说明该测试平台能保证测试过程的准确性。为了评估本平台的测试效率提升效果,分别进行了以下两种分析。
①多线程对测试效率的提升效果分析。测试图片为5000幅,在单台服务器上分别开启不同的线程数,执行时间如图6所示。线程数的增加明显提升了测试效率,但是,线程数的设置受到机器内核以及任务类型的影响,不能设置过多。
图6 
5000
幅图片不同线程数的执行耗时
  ②不
同模式下测试效率提升效果对比分析。由于人脸识别算法只支持多线程执行,不支持
MapRe duce框架分布式并行执行,所以一般的人脸识别算法的大数据测试方案为:采用单进程或者单机多线程测试人脸识别算法,采用MapReduce框架统计测试结
果;本平台有3个处理模块,每个处理模块开启5个线程,验证了该平台对不同数量图片的测试结果与执行时间。为了对比效果,还分别验证了单进程模式与单机5个线程模式下不同数量图片的测试结果与执行时间,相同图片在不同模式下的测试结果相同。相同数量图片在不同模式下执行耗时对比如图7所
示。显而易见,本平台采用分布式多线程模式测试算法,与传统测试方法相比,测试效率有明显提高,图片数量越大,效率提升效果越明显。本平台不仅实现了单个测试任务的分布式多线程模式执行,而且实现了多个测试任务并行执行,对整体测试效率的提升非常明显。
图7 相同数量图片在不同模式下执行耗时对比
由于服务器的数量与性能有限,导致测试效率的
提升效果有限,如果增加服务器数量,提升服务器的性能,测试效率将非常可观,10万幅人脸图片的测试时
间将在
10min以内。5 
结束语
基于RabbitMQ与Hadoop的人脸识别算法的大数据测试平台是一个通用的分布式大数据测试平台,可有效管理测试过程的文档与数据,便于测试人员操作,帮助研发人员快速了解算法的关键性能指标,解决了测试效率与测试管理问题。业务测试代码与测试平台代码分离,提高了测试平台的通用
性,拓展了该平台的业务面,对于其他以图片为测试数据同时不支持Ma pReduce框架分布式并行执行的人工智能算法的大数据测试的研究具有借鉴意义与参考价值。处理模块所在机器的资源利用率以及测试效率还有进一步提升空间,未来将进行进一步研究。参考文献:
[1]李玲俐.基于深度学习理论的人脸识别技术应用综述
J].计算机与数字工程,2021,49(9):1912-1914.LILL.Applicationreviewoffacerecognitiontechnology
·
24·《测控技术》2023年第42卷第3期

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。