(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有了一定的了解,应该能看懂了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)