linux qt5.11.2配置,VS2017+QT5.11.2+SeetaFace1.0/SeetaFace2.0的简单实现

本文是使用VS2017+QT5.11.2+SeetaFace/SeetaFace2的简单实现,涉及该开源引擎的概念较少。SeetaFace1.0例子项目地址:https://github.com/coididy/simple-example-with-SeetaFace1.0

一、1.0版本和2.0版本简介:

SeetaFace人脸识别引擎包括了搭建一套全自动人脸识别系统所需的三个核心模块,即:人脸检测模块、面部关键点定位模块,以及人脸特征提取与比对模块。

1.0版本中与之对应的分别是:FaceDetection、FaceAlignment、FaceIdentification;

2.0版本中与之对应的分别是:FaceDetector、FaceLandmarker、FaceRecognizer,另外2.0版本还提供了两个辅助模块 FaceTracker 和 QualityAssessor用于人脸跟踪和质量评估。除此之外,2.0版本还引入了一个FaceDataBase对象,用于管理注册的人脸库,方便进行1v1或者1vN的人脸比对。

两个版本的SeetaFace在速度和精度上都有数量级上的提升,以下是官方给的一张对比图:

20191230182939286fzbiwuv4ajwzgz1_8.png

二、SeetaFace1.0的编译

1.0版本的SeetaFace编译教程在百度很多,大部分都是可以直接参考的,此处不再赘述。需要VS2017版的dll、lib的可以到项目地址中下载。https://github.com/coididy/simple-example-with-SeetaFace1.0

三、SeetaFace2.0的编译

1、下载安装CMake

3、创建一个空文件夹,用于存储编译结果:如下创建了一个空的build文件夹

注意:相关目录不建议有中文

20191230182939286fzbiwuv4ajwzgz1_2.png

4、打开CMake gui,配置源代码目录和编译输出目录如下:

20191230182939286fzbiwuv4ajwzgz1_9.png

5、点击CMake左下角的Configure按钮选择需要编译的项目版本,此处我选择VS2017对应的版本:

20191230182939286fzbiwuv4ajwzgz1_15.png

6、如果出现找不到OpenCV的路径,则手动配置如下路径:

20191230182939286fzbiwuv4ajwzgz1_12.png

OpenCV路径配置好之后,再次点击Configure直到无错误为止。

7、点击Generate按钮生成解决方案

8、此时build目录已经生成了SeetaFace2.0项目对应的VS2017 sln解决方案,双击即可打开。或者直接点击CMake 上Generate按钮右侧的Open Project按钮打开项目。

注意:相关目录不建议有中文

9、项目打开之后,选择需要的debug或者release版本

20191230182939286fzbiwuv4ajwzgz1_10.png

10、右键解决方案中的ALL_BUILD,点击生成,即可得到相应的dll和lib

20191230182939286fzbiwuv4ajwzgz1_6.png

11、dll、lib目录如下:

20191230182939286fzbiwuv4ajwzgz1_11.png

四、VS2017+OpenCV+SeetaFace1.0项目属性配置

关于SeetaFace1.0的动态链接库等的配置可以参考SeetaFace2.0的配置,两者基本没区别。

五、VS2017+OpenCV+SeetaFace2.0项目属性配置

以debug版本为例,VS2017的项目属性配置如下:

1、将需要的头文件从源代码中提取出来,方便项目中使用。我的目录如下:

20191230182939286fzbiwuv4ajwzgz1_13.png

2、将用到的lib文件提取出来,我的目录如下:

20191230182939286fzbiwuv4ajwzgz1_4.png

3、项目属性->VC++目录->包含目录:(配置OpenCV和SeetaFace头文件目录)

20191230182939286fzbiwuv4ajwzgz1_14.png

4、项目属性->VC++目录->库目录:

20191230182939286fzbiwuv4ajwzgz1_0.png

5、链接器->输入->附加依赖项:

20191230182939286fzbiwuv4ajwzgz1_5.png

6、将用到的dll文件放置到debug版本生成的exe同级目录下:

20191230182939286fzbiwuv4ajwzgz1_1.png

7、对于release版本,配置方法与debug一致,只需要把相应的dll、lib特换一下就行。(*-d.dll、*-d.lib是debug版的;*.dll、*.lib是release版的)

六、SeetaFace1.0实例

本人也实现了一个简单的例子,可以进行图片中人脸的检测、人脸特征点(5点)的定位显示、两张人脸的相似度显示。

七、SeetaFace2.0实例

功能与SeetaFace1.0一致,项目地址如下:

下面简单介绍下本人项目代码。

1、首先拷贝一份SeetaFace2.0使用的model

20191230182939286fzbiwuv4ajwzgz1_7.png

2、简单界面:

20191230182939286fzbiwuv4ajwzgz1_16.jpg

3、人脸检测与人脸特征点定位模型导入与初始化

seeta::ModelSetting::Device device = seeta::ModelSetting::CPU;

//初始化模型,需要注意的是,模型文件同一时刻只能打开一次,

//并且加载模型时需要一定的时间,

//所以如果想多线程使用,需要对模型的导入进行加锁处理

this->myMutex.lock();

seeta::ModelSetting FD_model("./model/fd_2_00.dat", device, 0);

//关于81点定位之后,得到的人脸相似度结果不理想的原因猜想:

//图片的尺寸太小,导致81点都挤在了一起,然后进行人脸比对时误差变大

//seeta::ModelSetting FL_model("./model/pd_2_00_pts81.dat", device, 0);

seeta::ModelSetting FL_model("./model/pd_2_00_pts5.dat", device, 0);

this->myMutex.unlock();

seeta::FaceDetector FD(FD_model);

seeta::FaceLandmarker FL(FL_model);

//设置人脸框的最小尺寸,不能小于20

FD.set(seeta::v2::FaceDetector::PROPERTY_MIN_FACE_SIZE, 20);

4、人脸比对模型的导入与初始化

seeta::FaceDatabase* FDB;

FDB = new seeta::FaceDatabase(seeta::ModelSetting("./model/fr_2_10.dat", seeta::ModelSetting::CPU, 0));

//清除之前导入的人脸

this->FDB->Clear();

注意:此处我使用的人脸比对方法是2.0版本中单独引入的一种方法。FaceDataBase对象,用于管理注册的人脸库,方便进行1v1或者1vN的人脸比对。但是在使用过程中,需要注意适时的清除DB中的face。具体什么时候清除,我没怎么研究。

5、使用FaceRecognizer进行人脸比对的方法:

20191230182939286fzbiwuv4ajwzgz1_3.jpg

6、人脸检测、人脸特征点提取、人脸比对的核心代码如下:

//加载待检测的图片;

//mat是传入的cv::Mat类型的图片

seeta::cv::ImageData image = mat.clone();

//进行人脸检测,获取所有的人脸信息;

//FD是FaceDetector对象的实例

//SeetaFaceInfoArray是SeetaFaceInfo数组

//该数组中存储的是检测出的人脸框

SeetaFaceInfoArray facesArr = FD.detect(image);

//对该脸进行5点或81点定位

//FL是FaceLandmarker对象实例

//vector是二维特征点的数组

std::vector currentFace81Points = FL.mark(image, facesArr.data[i].pos);

//Compare的四个参数分别为:

//SeetaImageData类型的图片,SeetaPointF*类型的特征点数组

FDB->Compare(face1Data, face1Points.data(), face2Data, face2Points.data());

7、更加详细的接口介绍,可以参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值