比较Opencv自带的frontface检测器
CascadeClassifier*haarcascade_frontalface_alt = new CascadeClassifier("./xml/haarcascade_frontalface_alt.xml");
CascadeClassifier*haarcascade_frontalface_alt_tree = new CascadeClassifier("./xml/haarcascade_frontalface_alt_tree.xml");
CascadeClassifier*haarcascade_frontalface_alt2 = new CascadeClassifier("./xml/haarcascade_frontalface_alt2.xml");
CascadeClassifier*haarcascade_frontalface_default = new CascadeClassifier("./xml/haarcascade_frontalface_default.xml");
CascadeClassifier*lbpcascade_frontalface = new CascadeClassifier("./xml/lbpcascade_frontalface.xml");
检测时间上对比,其中1为下图中的复杂背景图像(1580*1110),2为简单背景图像(846*826)
ms | Haar_alt | Haar_alt_tree | Haar_alt2 | Haar_default | lbp |
1 | 2054 | 1350 | 2309 | 1651 | 948 |
2 | 912 | 700 | 964 | 623 | 326 |
从上面的检测时间可见,LBP的时间最短
对于检测结果矩阵的对比,由于LBP和alt_tree只检出了两张人脸,因此只对这两个矩阵进行对比
| Haar_alt | Haar_alt_tree | Haar_alt2 | Haar_default | lbp |
1 | 70 | 74 | 70 | 72 | 69 |
1 | 82 | 88 | 91 | 83 | 82 |
2 | 277 | 302 | 283 | 296 | 292 |
2 | 266 | 278 | 254 | 263 | 271 |
从上面的检测矩形可见,alt_tree的检测结果相对较大,lbp的检测结果相对较小,但是不是每次都最小。
检测结果的排列顺序与表格相同,从上面的检测结果可见,对于复杂背景下,alt_tree和LBP的检测结果都是一致的,但是LBP的用时要短很多,因此LBP相对来说实时性更强。
OpenCV中4个人脸级联分类器
OpenCV下的data\haarcascades中有4个haar特征训练的级联分类器:
它们之间的区别如下:
1:haarcascade_frontalface_alt.xml
Stump-based 20x20 gentle adaboost frontal face detector.
2:haarcascade_frontalface_alt2.xml
Tree-based 20x20 gentle adaboost frontal face detector.
3:haarcascade_frontalface_alt_tree.xml
Stump-based 20x20 gentle adaboost frontal face detector.This detector uses tree of stage classifiers instead of a cascade
4:haarcascade_frontalface_default.xml
Stump-based 24x24 discrete(?) adaboost frontal face detector.
实验比较:
原图输入:前亚洲男子天团
结果:
采用1的结果: 识别效果最好,都识别出来,并且无误检
采用2的结果:有误检
采用3的结果:
采用4的结果: