论文部分内容阅读
人脸识别获取途径简单,具有仿生物辨别等优势,在刑侦、商业、安全等社会活动中应用越来越多。监控视频等视频文件获取途径广泛,资源数量庞大,本文讨论依据视频文件和视频流的人脸识别。本文完成了一款在ApacheSpark分布式平台进行人脸识别系统的设计和研发。系统基于Spark实现,Spark的内存计算模式和分布式环境具备高效的运算方式,基于集群中多核运算的速度优势,让人脸识别过程的运算速度较单线程更快,因此更适合实现视频流环境的人脸识别。项目采用自顶向下的设计方法,首先,从系统框架出发,在分析分布式系统环境的优势和作用后决定了系统环境及开发环境。然后对系统下属各模块分别完成设计和开发,并通过算法设计解决遇到的困难,优化系统的性能。系统跨越了多个平台,包括JavaCV(集成了OpenCV和FFmpeg的Java接口)及Apache Spark平台。构建系统采用Eclipse的Java平台,并采用Maven完成打包。系统运行的主要流程包括:视频处理,关键帧提取,人脸检测,人脸图像预处理,分布式环境下人脸识别的实现,目标人物出现时刻及置信概率的展示等。人脸识别和人脸检测分别采用OpenCV提供的adaboost算法和特征脸算法。人脸检测和人脸识别的识别成功率主要依赖算法本身,同时通过视频选帧算法和预处理过程提升识别成功率。文中提出并采用了视频选帧算法、Spark内存计算、多计算机CPU并行处理的模式以提高人脸识别的时间效率。基于这些构建了一个比较完整的视频文件人脸识别系统。本系统在交大嵌入式实验室提供的4台云端Linux计算机构成的小型集群内完成测试,测试材料主要是本人头像的视频文件。测试结果显示,系统人脸检测成功率达到80%,系统目标人脸识别成功率达到50%。同时系统分别在1台、2台和3台工作机3种工作环境下运行的方式,验证了系统在集群环境下对比单计算机运行环境的时间效率优势,说明了后续大型集群内实现该系统是可行的。在系统实现过程中,分析并解决了系统设计和实现过程中遇到的问题和困难,采用内存计算的方式提升了人脸识别算法的效率,证明了分布式环境下人脸识别的可行性和优越性。