基于opencv的人脸识别:分别在1.0和2.4.3版本下的对比
2013-04-03 16:46
531 查看
先贴出一段代码,这是opencv1.0版本给出的sample,之前本人在vc6.0+opencv1.0的条件下做过实验,完全成功的。识别时间在50ms左右。
View Code
能够实现人脸的识别,但是有个严重的问题,那就是耗时太长,一张图片基本要1.8秒,完全达不到视频处理实时性的要求。即使用了金字塔降维之后,耗时依然十分严重。
然后我觉得可能是新方法本身的算法本身的问题,于是用之前那段代码,也就是opencv1.0中的方法,在2.4.3下改了改,结果运行起来发现还是很慢,检测时间还是1秒多。也就是说,检测耗时长这个问题不是新的方法本身的问题,很可能是2.4.3版本结构上有不妥之处。
我在网上查了点资料,新的CascadeClassifier类不仅支持读入haar特征的训练文件(也就是.xml文件),而且支持lbp特征的训练文件(hog也支持)。于是在opncv安装目录下寻找,果然发现opencv/data目录下有个“lbpcascades”文件夹,里面装有lbp特征的训练文件,而opencv1.0版本的data目录系是仅有haar特征的训练文件的。然后我把代码中的训练文件改为lbp特征的训练文件,发现检测速度可以达到50ms每张,基本能满足实时性了。
以上就是在使用opencv的过程中的一点经验和心得,希望有更多比较精通cv理论的园友一起讨论交流,2.4.3版本的haar特征检测耗时问题也是一直迷惑着我,希望有高人能够点拨。
View Code
#include "stdafx.h" #include "opencv2/opencv.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "iostream" using namespace std; using namespace cv; void detectAndDisplay( Mat frame , CascadeClassifier face_cascade ) { double scale=2.4; extern TickMeter tm; tm.reset(); std::vector<Rect> faces; Mat frame_gray; tm.start(); cvtColor( frame, frame_gray, CV_BGR2GRAY ); tm.stop(); cout<<"color convert time:"<<tm.getTimeMilli()<<"ms"<<endl; tm.reset(); tm.start(); equalizeHist( frame_gray, frame_gray ); tm.stop(); cout<<"Hist time :"<<tm.getTimeMilli()<<"ms"<<endl; tm.reset(); Mat small; resize(frame_gray,small,Size(frame.cols/scale,frame.rows/scale)); tm.start(); face_cascade.detectMultiScale( small , faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30/scale, 30/scale) ); tm.stop(); cout<<"detect time"<<tm.getTimeMilli()<<"ms"<<endl; for( int i = 0; i < faces.size(); i++ ) { Point center( faces[i].x *scale+ faces[i].width*0.5, faces[i].y*scale + faces[i].height*0.5 ); ellipse( frame , center, Size( faces[i].width*0.5*scale, faces[i].height*0.5*scale), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0); } imshow( "small", small ); imshow( "face_detect", frame ); }
能够实现人脸的识别,但是有个严重的问题,那就是耗时太长,一张图片基本要1.8秒,完全达不到视频处理实时性的要求。即使用了金字塔降维之后,耗时依然十分严重。
然后我觉得可能是新方法本身的算法本身的问题,于是用之前那段代码,也就是opencv1.0中的方法,在2.4.3下改了改,结果运行起来发现还是很慢,检测时间还是1秒多。也就是说,检测耗时长这个问题不是新的方法本身的问题,很可能是2.4.3版本结构上有不妥之处。
我在网上查了点资料,新的CascadeClassifier类不仅支持读入haar特征的训练文件(也就是.xml文件),而且支持lbp特征的训练文件(hog也支持)。于是在opncv安装目录下寻找,果然发现opencv/data目录下有个“lbpcascades”文件夹,里面装有lbp特征的训练文件,而opencv1.0版本的data目录系是仅有haar特征的训练文件的。然后我把代码中的训练文件改为lbp特征的训练文件,发现检测速度可以达到50ms每张,基本能满足实时性了。
以上就是在使用opencv的过程中的一点经验和心得,希望有更多比较精通cv理论的园友一起讨论交流,2.4.3版本的haar特征检测耗时问题也是一直迷惑着我,希望有高人能够点拨。
相关文章推荐
- opencv2.4.3基于级联分类器的人脸识别
- 虹膜识别源代码下载,分别基于MATLAB、C++、OpenCV
- 【OpenCV】基于Adaboost和Haar-like特征人脸识别
- opencv 中的人脸识别源程序 基于haar特征的adaboost算法
- 基于 OpenCV 的人脸识别(强烈推荐)
- AR技术之--基于opencv的人脸识别(五)
- 基于OpenCV的PHP图像人脸识别技术
- 基于 OpenCV 的人脸识别
- 基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法
- iOS中基于OpenCV的人脸识别
- 基于OpenCV读取摄像头进行人脸检测和人脸识别
- 基于OpenCV的PHP图像人脸识别技术
- 使用 HTML5, javascript, webrtc, websockets, Jetty 和 OpenCV 实现基于 Web 的人脸识别
- [置顶] 人工智能小例子(二)-基于keras+openCV的人脸识别
- 基于OpenCV的静态图像人脸识别
- AR技术之--基于opencv的人脸识别(二)
- 基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法
- 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【五】设计人脸识别的注册类
- 【下载】免费的人脸识别SDK,基于Windows版本下C#!
- OpenCV+Qt:基于PCA主成分分析的人脸识别例程