QT5.9+OpenCV3.10+contrib扩展包,GitHub上的人脸识别代码,但是找不到face.hpp、face名词空间和相关类

as78963214555 2017-09-13 09:36:44
配置了很多天的环境,在GitHub上下的人脸识别的代码,网上了解到opencv3以后face.hpp被放到contrib扩展包里,但是环境配置好之后还是有如下毛病:(之前opencv2.410也是有如下毛病)

如果在头文件加上:
#include<opencv2/contrib/contrib.hpp>
#include<opencv2/face.hpp>

就会报错:
error: opencv2/face.hpp: No such file or directory

如果把#include<opencv2/face.hpp>注释掉(
#include<opencv2/contrib/contrib.hpp>依然保留),就会报错:

即没有找到face的名词空间和face相关的类

真的很想实现一个人脸识别的功能,希望有前辈指点一下,下面贴上源代码:(UI就不放了)

[code=c]
#-------------------------------------------------
#
# Project created by QtCreator 2015-11-11T08:11:51
#
#-------------------------------------------------

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = face_recognition
TEMPLATE = app


SOURCES += main.cpp\
mainwindow.cpp

HEADERS += mainwindow.h

FORMS += mainwindow.ui


INCLUDEPATH+=C:\OpenCV_contrib\include\opencv\
C:\OpenCV_contrib\include\opencv2\
C:\OpenCV_contrib\include

LIBS += -LC:/OpenCV_contrib/lib -lopencv_core2410.dll \
-lopencv_highgui2410.dll -lopencv_imgproc2410.dll -lopencv_features2d2410.dll \
-lopencv_calib3d2410.dll \
-lopencv_objdetect2410.dll \
-lopencv_contrib2410.dll


//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include<QMainWindow>
#include<QCloseEvent>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/objdetect/objdetect.hpp>
#include<opencv2/contrib/contrib.hpp>
//#include<opencv2/face.hpp>
#include<iostream>

using namespace std;
using namespace cv;
using namespace face;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_loadButton_clicked();
void on_testButton_clicked();
void on_regButton_clicked();
void closeEvent(QCloseEvent *e);

private:
Ui::MainWindow *ui;
Ptr<LBPHFaceRecognizer> model;
QString fileName,saveXml,saveName,name[10];
};

#endif // MAINWINDOW_H


//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<QFileDialog>
#include<QPixmap>
#include<QFile>
#include<QTextStream>

//正面,上,下,左,右5张.阉值85.00

MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

saveName = "Names.txt";
saveXml = "att_model.xml";

model = createLBPHFaceRecognizer();

if(QFile::exists(saveXml)&&QFile::exists(saveName))
{
model->load(saveXml.toStdString());
QFile file(saveName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
QString lineText;
while(!in.atEnd())
{
lineText = in.readLine();
QString i = lineText.split(":").first();
name[i.toInt()] = lineText.split(":").last();
}
}
// for(int i=1;i<11;i++)
// for(int j=1;j<10;j++)
// {
// QString file = "att_faces/s%1/%2.pgm";
// images.push_back(imread(file.arg(i).arg(j).toStdString(), CV_LOAD_IMAGE_GRAYSCALE));
// labels.push_back(i);
// }

// model = createLBPHFaceRecognizer();
// //model->train(images, labels);
// //model->save("att_model.xml");

// model->load("att_model.xml");

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::closeEvent(QCloseEvent *e)
{
model->save(saveXml.toStdString());
QFile file(saveName);
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
return;
QTextStream out(&file);
for(int i=0;i<10;i++)
{
if(name[i].isEmpty())
continue;
out<<i<<":"<<name[i]<<"\n";
}
e->accept();
}

void MainWindow::on_loadButton_clicked()
{
fileName = QFileDialog::getOpenFileName(this,tr("选择图片"),tr("."));
if(fileName.isEmpty())
return;
ui->showLabel->setPixmap(QPixmap(fileName));
ui->textBrowser->append(tr("打开图片%1").arg(fileName.split("/").last()));
}

void MainWindow::on_testButton_clicked()
{
if(fileName.isEmpty()||ui->nameEdit->text().isEmpty())
return;
vector<Mat> images;
vector<int> labels;
images.push_back(imread(fileName.toStdString(),CV_LOAD_IMAGE_GRAYSCALE));
labels.push_back(ui->labelBox->value());
name[ui->labelBox->value()] = ui->nameEdit->text();
ui->textBrowser->append(tr("准备训练: 姓名:%1 标签:%2 ...").arg(ui->nameEdit->text()).arg(ui->labelBox->value()));
model->update(images,labels);
ui->textBrowser->append(tr("训练完成"));
}

void MainWindow::on_regButton_clicked()
{
ui->nameLabel->clear();
if(fileName.isEmpty())
return;
Mat image = imread(fileName.toStdString(), CV_LOAD_IMAGE_GRAYSCALE);
model->setThreshold(ui->doubleSpinBox->value());
ui->textBrowser->append(tr("准备识别Threshold:%1 ...").arg(ui->doubleSpinBox->value()));
int result = model->predict(image);
ui->textBrowser->append(tr("识别完成"));
if(result < 0)
ui->nameLabel->setText(tr("无法识别此人"));
else
ui->nameLabel->setText(tr("%1").arg(name[result]));
}

//main.cpp:
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

...全文
637 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Zhouzl 2018-05-11
  • 打赏
  • 举报
回复
这个包应该是需要单独下载的,在github搜索一下

4,242

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

试试用AI创作助手写篇文章吧