一、学习的知识点
1.人脸检测,使用级联分类器读取haarcascade_frontalface_default.xml 文件检测照片里面有无脸的信息
2.人脸训练/学习:保存一张人脸不同角度的照片,使用LBPH人脸模型提取脸的信息/特征存为xml或yml文件。
cv::Ptr<face::LBPHFaceRecognizer> model; //cv::ptr 类似于指针 LBPHFaceRecognizer人脸模型 可以用来训练或者识别 LBPH局部二进制编码直方图
void MainWindow::on_pushButton_train_clicked()
{
vector<Mat> images;//要训练的图片
vector<int> ids; //照片对应人物的id
char buf[100];
for (int i=0;i<50;i++)
{
sprintf(buf,"./image/%d.jpg",i);
images.push_back( imread(buf,CV_LOAD_IMAGE_GRAYSCALE) ); //CV_LOAD_IMAGE_GRAYSCALE 以灰度缩放读取图片
ids.push_back(1001);
}
this->model->train(images,ids); //训练的API 训练完成
this->model->save("faces.yml"); //存成文件
}
3.人脸识别:使用LBPH人脸模型读取文件信息,再使用该模型的predict方法读取照片,比较照片的特征与文件的特征是否符合,识别出人脸。
void MainWindow::on_pushButton_recongnize_clicked()
{
this->model->read("./faces.yml"); //读取存放面部特征的图片
Mat img=imread("./image/1.jpg",CV_LOAD_IMAGE_GRAYSCALE);
this->model->setThreshold(60);//设置精准度
int ret=this->model->predict(img);//将照片与特征比较,符合就输出照片对应的id
cout<<ret<<endl;
}
二、上课没有听懂或者没有理解的地方
无