摘要:人脸检测是人脸识别、人脸分析等应用的前期步骤和首要条件。本论文首先介绍了人脸检测系统的基本原理, 然后设计了一种摄像头的人脸图像检测系统, 通过摄像头采集人脸图像, 并过调用OpenCV的人脸检测模块实现人脸检测;最后, 运用JAVA语言开发了人脸图像检测系统, 系统中主要有登录/退出, 获取图像、打开图片、人脸检测四大功能模块, 系统具有界面简洁, 运行速度快的特点。
关键词:人脸检测; Java; OpenCV;
一、前言
目前, 随着人工智能技术的推广和应用, 许多移动设备都具有人脸识别的功能。而在人脸识别系统中, 首先必须对人脸进行准确的定位, 因此实时而有效的人脸检测显得尤为重要[1-2]。同时, 人脸检测也是研究面部识别、表情误别、人脸追踪等一些技术的前提条件, 在模式鉴别、视频监控、智能检索等领域也有广泛的应用。近年来, 随着信号处理理论和计算机的出现及其发展, 计算机视觉的应用也随之越来越广泛。越来越多的设备或系统采用摄像机获取人脸图像, 再进行处理[3]。
目前流行的人脸检测算法主要分为基于几何特征的方法?[4];基于模板匹配的方法[5];基于统计模型的方法, 主要包括Ada Boost方法, 支持向量机方法、人工神经网络方法和子空间方法, 等等[6-7]。Open CV是一个基于BSD许可 (开源) 发行的跨平台计算机视觉库, 可以运行在Linux、Windows、Android和Mac?OS操作系统上。提供了Python、Ruby、MATLAB等语言的接口, 实现了图像处理和计算机视觉方面的很多通用算法。Open CV的人脸检测程序基于Haar特征的Ada Boost方法, 主要是调用训练好的瀑布级联分类器cascade来进行模式匹配。
本论文设计并开发了基于摄像头的人脸检测系统, 系统中各功能的实现采用Java语言编译。主要包括:登录/退出、获取图像、打开图片、人脸检测。其中最重要的是打开摄像头进行拍照保存图像以及检测人脸。结合现有的开发技术, 本系统使用JMF (Java?Media?Framework) 来打开摄像头拍照, 采用Open CV开源接口来进行人脸检测[8], 最后使用Java语言开发, 基于摄像头的人脸检测进行了实现。?
二、人脸检测流程设计
基于Ada Boost方法的人脸检测方法一般流程由图像处理, 匹配循环, 图像匹配和人脸检测几个主要的环节构成, 其中, (1) 图像处理即调用?cv Haar Detect Objects, 先将图像灰度化, 根据传入参数判断是否进行canny边缘处理。 (2) 匹配循环是将匹配分类器放大scale (传入值) 倍, 调用cv Run Haar Classifier Cascade来进行匹配, 同时原图缩小scale倍, 进行匹配, 直到匹配分类器的大小大于原图, 则返回匹配结果。 (3) 图像匹配是把上一步的结果传给cv Haar Detect Objects函数。 (4) 人脸检测:函数?cv Run Haar Classifier Cascade?用于对单幅图片的检测。在函数调用前首先利用?cv Set Images For Haar Classifier Cascade设定积分图和合适的比例系数。当分析的矩形框全部通过级联分类器每一层的时返回正值 (这是一个候选目标) , 否则返回0或负值。
本论文采用的人脸检测系统流程如下图所示。
图1 人脸检测系统流程
三、人脸检测系统模块设计
本系统采用摄像头采集人脸图像, 以图1所示的人脸检测系统流程为基础, 对人脸检测系统功能模块进行了设计, 如下图所示。
图2 人脸检测系统模块
在Java的人脸检测系统中, 主要是针对人脸检测这一功能进行开发。本系统主要由四大功能模块组成, 设计思路为:首先, 打开摄像头获取图像, 本系统采用的是JMF来打开摄像头。其次, 是打开摄像头获取到的图片, 打开摄像头进行拍照后会将图像进行保存, 选择需要检测的图片打开, 并显示在面板上。然后, 也是最重要的一步, 就是进行人脸检测, 将需要检测的图片打开之后会直接调用Open CV里面的方法进行人脸检测, 并用矩形框将人脸框出来。最后就是退出系统, 直接调用System.exit (0) ;方法就可以退出系统。
四、Java的人脸检测系统实现
本系统主要通过继承Frame类来展示各功能, 本系统中, 获取图像这一功能主要是由JMF来实现, 调用JMF来打开摄像头进行拍照。点击获取图像之后会调用JMF打开摄像头。本系统中视频面板采用Frame中的Media Locator方法实现, 图片面板调用的是Frame当中的Imaget Panel方法来实现的, 再调用set Visible (true) 。通过点击人脸检测按钮进行人脸检测。具体图像显示如下图所示。点击人脸检测的按钮之后, 本系统会采用绿色矩形框人脸是否?
图3 基于java的人脸检测系统与检测结果
五、结语
人脸检测是一种比较复杂的进行识别和进行模式分类的技术, 这种技术结合了许多不同的分类法。考虑到环境, 光照, 肤色的变化, 这些增加了人脸检测的难度。随着图像处理、人机交互识别、各类分类模式、人工智能的不断发展, 近些人人脸检测和人脸识别技术会得到一个质的飞跃, 同时也推动了人脸检测系统的广泛应用。
参考文献
[1]周振华.Ada Boost人脸检测定点型优化算法[J].电子科技大学学报, 2015 (4) :589-593.
[2]陆飞, 胡志峰, 方路平, 等.基于三角坐标系的人脸表情方向性研究[J].计算机辅助设计与图形学学报, 2017, 29 (2) :262-268.
[3]高春霞, 董宝田, 王爱丽.基于人头颜色空间和轮廓信息的行人检测方法研究[J].交通运输系统工程与信息, 2015, 15 (4) :70-77.
[4]伍凯, 朱恒亮, 郝阳阳, 等级联回归的多姿态人脸配准[J].中国图象图形学报, 2017, 22 (2) :257-264.
[5]宋凌怡.基于肤色模型的人脸检测与人眼定位[J].吉林大学学报:理学版, 2015, 53 (6) :1246-1250.
[6]王庆伟, 应自炉.一种基于Haar-Like T特征的人脸检测算法[J].模式识别与人工智能, 2015, 28 (1) :000035-41.
[7]叶学义, 陈雪婷, 陈华华, 等.级联型P-RBM神经网络的人脸检测[J].中国图象图形学报, 2016, 21 (7) :875-885.
[8]贾海鹏, 张云泉, 袁良, 等.基于Open CL的Viola-Jones人脸检测算法性能优化研究[J].计算机学报, 2016, 39 (9) :1775-1789.