怎么训练opencv3.0中的haar人脸检测器xml

怎么训练opencv3.0中的haar人脸检测器xml,第1张

首先,需要说明的是,OpenCV自带的haar training提取的特征是haar特征 分类器是AdaBoost级联分类器(如需了解Adaboost算法, 。所谓的级联分类器,就是将若干的简单的分量分类器(可以理解为一般的普通分类器)依次串联起来,最终的检测分类结果,要依次通过所有的分量分类器才能算是一个有效的检测分类结果。否则,就认为当前检测区域内没有我们需要找的目标。利用OpenCV自带的haar training程序训练一个分类器,需要经过以下几个步骤:

(1)收集训练样本茄陪:

训练样本包括正样本和负样本。正蚂誉样本,通俗点说,就是图片中只有你需要的目标。而负样本的图片只要其中不含有目标就可以了。但需要说明的是,负样本也并非随便选取的。例如,你需要检测的目标是汽车,那么正样本就应该是仅仅含有汽车的图片,而负样本显然不能颤物蠢是一些包含天空的,海洋的,风景的图片。因为你最终训练分类器的目的是检测汽车,而汽车应该出现在马路上。也就是说,分类器最终检测的图片应该是那些包含马路,交通标志,建筑物,广告牌,汽车,摩托车,三轮车,行人,自行车等在内的图片。很明显,这里的负样本应该是包含摩托车、三轮车、自行车、行人、路面、灌木丛、花草、交通标志、广告牌等。

1、首先就是数据的准备,你要从网络上下载一些人脸库,后面用来训练人脸识别模型。人脸检测模型opencv是自带的,但是识别模型需要自己训练。下载人脸库之后需要对人脸进行标记,这是一个繁琐的工作,不过网上有脚本或者自己写个程序简化工作量。

2、把数据标记好之后就是opencv的事情。训练的函清轮凳数非常简单。只有下面这三句:

Ptr<FaceRecognizer>model = createEigenFaceRecognizer()

model->train(images, labels)

model->save("MyFacePCAModel.xml")

3、然后打开摄像头桐纳进行人脸检测,就是框出人脸的位置。人脸检测模型是opencv自带的。

CascadeClassifier cascade

cascade.load("haarcascade_frontalface_alt.xml")

这是加载的方法。

cascade.detectMultiScale(gray, faces,

1.1, 2, 0

//|CV_HAAR_FIND_BIGGEST_OBJECT

//|CV_HAAR_DO_ROUGH_SEARCH

| CV_HAAR_SCALE_IMAGE,

Size(30, 30))

这是检测的方法。这里检测得到的就是一个一个的人脸的矩形框,然后用画矩形的方法把它们画出来就行了。

4、然后就是对检答旅测到的人脸进行识别了,用我们刚才训练好的人脸模型。加载:

Ptr<FaceRecognizer>modelPCA = createEigenFaceRecognizer()

modelPCA->load("MyFacePCAModel.xml")

检测:

int predictPCA = 0

if (face.rows >= 120)

{

resize(face, face_test, Size(92, 112))

}

if (!face_test.empty())

{

predictPCA = modelPCA->predict(face_test)

}

如果预测结果等于标记结果,说明识别正确。

大致流程就这样了,如果你对opencv有了一定的了解,应该能看懂了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12322220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存