武汉加油,中国加油
记录学习,交流共进
检测图片放一放:
因为任务需要,想把传统的识别算法与深度学习的算法进行比较,所以,就拿级联分类器入手咯,来看一看具体的差别。
以前只是听说传统算法精度不高,寻找特征麻烦,亲自动手尝试了一下,哎呀,额的个娘来,喂入相同样本的情况下,两者之间的差别不是一点两点,因为一开始没有用到GPU,所以实时检测的速度还不如深度学习检测的速度,过程中碰到的坑倒不少。
后面发现其实官方也提供cuda相关的分类器,换成cuda相关分类器后速度提高了一点点,这个大家可以自行测试一下
级联分类器分两部分来写,这一部分是利用官方已经训练好的模型进行检测,下一部分自己来训练模型进行检测。
人脸检测程序
VS2017+Opencv3.4.1
使用环境大家可以借鉴一下,因为4.0版本下没有训练器,具体的自行测试吧。
官方在opencv中提供了多个已经训练好的分类器,在opencv安装目录下的source/data中,包含人脸、眼睛、微笑、猫脸等多个分类器,这个可自行调用,这里使用最常见的人脸检测,haarcascade_frontalface_alt.xml。我在代码里注释的很清楚了,应该都能看懂,不懂再问,交流共进。
检测图片:
#include <opencv2/core/core.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;
//定义分类器
CascadeClassifier face_cascade;
//xml文件存在于opencv/source/data下,尽可能使用绝对路径,相对路径会出错
string facexml = "D:\\opencv3.4.1\\opencv\\sources\\data\\haarcascades_cuda\\haarcascade_frontalface_alt.xml";
//预处理及识别函数
void detectAndDisplay(Mat frame);
//图片的识别
int main(int argc, char** argv) {
//读取图片并判断
Mat image;
image = imread("C:\\Users\\14587\\Desktop\\4.jpg", 1);
if (!image.data) {
printf("can not load image.../n");
return -1;
}
imshow