文章来自http://blog.csdn.net/csdn_sxl/article/details/50601168
需要用到OpenCV扩展包里的相关函数,请先编译OpenCV的contrib包。参考:Windows环境中编译opencv3.0同时加入OPENCV_contrib库及解决遇到相关问题
定义相关变量
- vector<Mat> images;
- vector<int> labels;
- QString name[10];
- QString modelXml = "att_model.xml";
-
- Ptr<LBPHFaceRecognizer> model = createLBPHFaceRecognizer();
- if(QFile::exists(modelXml))
- {
- model->load(modelXml.toStdString());
- }
训练模型
- images.push_back(imread(imgName.toStdString(),CV_LOAD_IMAGE_GRAYSCALE));
- labels.push_back(ui->labelBox->value());
-
- name[ui->labelBox->value()] = ui->nameEdit->text();
-
- model->update(images,labels);
人脸识别
- Mat image = imread(imgName.toStdString(), CV_LOAD_IMAGE_GRAYSCALE);
-
- model->setThreshold(ui->doubleSpinBox->value());
-
- int result = model->predict(image);
-
- if(result < 0)
- ui->nameLabel->setText(tr("无法识别此人"));
- else
- ui->nameLabel->setText(tr("%1").arg(name[result]));
保存模型
- model->save(modelXml.toStdString());
PS:
- 经测试同一个人用正面,正面偏左、偏右、偏上、偏下五个角度各一张图片训练后阉值设置为85-90识别率比较高
- 测试用的训练图片可以用ORL人脸库