您的位置:首页 > 编程语言 > Qt开发

QT5+OpenCV人脸识别

2016-01-28 15:40 399 查看
需要用到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); //更新训练模型,train()也是训练函数但会清空之前的模型


人脸识别

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人脸库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: