今天主要的任务就是优化前端摄像头采集照片后识别的精度和速度。因为目前用的是OpenCV官方自带的haar特征文件,最核心的处理就是使用OpenCV的函数来识别人脸:
//核心:加载haar识别配置文件,将图像转化为Mat对象后利用OpenCV函数进行识别,
//将识别到的人脸保存到 faceDetections
CascadeClassifier faceDetector = new CascadeClassifier(xmlPath);
Mat image = Imgcodecs.imread(imgsrc);
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
详细的代码和eclipse安装教程.
这种处理的缺点之一就是识别度不准,会误判某些不属于人脸的照片。尤其是摄像头影像背景中的被识别错误后,不管有没有真人走过,都会被识别并处理。所以要查找更智能更精准的算法。
考虑到背景图片识别错误导致的情况,可以使用帧差法来实时辨别照片中是否有人物走动。 帧差法的原理和实现可以参考 OPENCV运动追踪研究和PYTHON及JAVA实现。
主要的原理就是将两张照片放到矩阵中,也就是OpenCV中的Mat对象,然后对两个矩阵做差分计算,然后计算差分结果的行列式或其他数值(这个暂时还没决定,待明天大致实现后再决定),并且是否满足某个阈值范围来判断时候图像中是否有运动的物体或人物,满足条件再往下继续处理,将人脸检测出来并传给后台检测算法。
这样操作的优点是能够有效辨别图像中是否有活动的物体或人物,可以将背景中误判的情况过滤掉。第二个优点就是缩小人脸检测范围,提高处理速度。