SeetaFace开源引擎GitHub地址:https://github.com/seetaface/SeetaFaceEngine
SeetaFace2开源引擎GitHub地址:https://github.com/seetafaceengine/SeetaFace2
本文是使用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在速度和精度上都有数量级上的提升,以下是官方给的一张对比图:

二、SeetaFace1.0的编译

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

三、SeetaFace2.0的编译

    该部分参考https://blog.csdn.net/sinat_33896833/article/details/100183581,使用CMake进行编译。
    需要VS2017版的dll、lib的可以到项目地址中下载。https://github.com/coididy/simple-example-with-SeetaFace2.0
1、下载安装CMake
2、下载SeetaFace2.0源代码:https://github.com/seetafaceengine/SeetaFace2
3、创建一个空文件夹,用于存储编译结果:如下创建了一个空的build文件夹
注意:相关目录不建议有中文
4、打开CMake gui,配置源代码目录和编译输出目录如下:
5、点击CMake左下角的Configure按钮选择需要编译的项目版本,此处我选择VS2017对应的版本:
6、如果出现找不到OpenCV的路径,则手动配置如下路径:
    OpenCV路径配置好之后,再次点击Configure直到无错误为止。
7、点击Generate按钮生成解决方案
8、此时build目录已经生成了SeetaFace2.0项目对应的VS2017 sln解决方案,双击即可打开。或者直接点击CMake 上Generate按钮右侧的Open Project按钮打开项目。
注意:相关目录不建议有中文
9、项目打开之后,选择需要的debug或者release版本
10、右键解决方案中的ALL_BUILD,点击生成,即可得到相应的dll和lib
11、dll、lib目录如下:

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

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

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

    以debug版本为例,VS2017的项目属性配置如下:
1、将需要的头文件从源代码中提取出来,方便项目中使用。我的目录如下:
2、将用到的lib文件提取出来,我的目录如下:
3、项目属性->VC++目录->包含目录:(配置OpenCV和SeetaFace头文件目录)
4、项目属性->VC++目录->库目录:
5、链接器->输入->附加依赖项:
6、将用到的dll文件放置到debug版本生成的exe同级目录下:
7、对于release版本,配置方法与debug一致,只需要把相应的dll、lib特换一下就行。(*-d.dll、*-d.lib是debug版的;*.dll、*.lib是release版的)

六、SeetaFace1.0实例

    VS2017、QT、OpenCV、SeetaFace1.0版本的实例可以参考博客:https://blog.csdn.net/Young__Fan/article/details/81385612
    本人也实现了一个简单的例子,可以进行图片中人脸的检测、人脸特征点(5点)的定位显示、两张人脸的相似度显示。

七、SeetaFace2.0实例

    功能与SeetaFace1.0一致,项目地址如下:
    下面简单介绍下本人项目代码。
1、首先拷贝一份SeetaFace2.0使用的model
2、简单界面:
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进行人脸比对的方法:
6、人脸检测、人脸特征点提取、人脸比对的核心代码如下:
//加载待检测的图片;
//mat是传入的cv::Mat类型的图片
seeta::cv::ImageData image = mat.clone();
//进行人脸检测,获取所有的人脸信息;
//FD是FaceDetector对象的实例
//SeetaFaceInfoArray是SeetaFaceInfo数组
//该数组中存储的是检测出的人脸框
SeetaFaceInfoArray facesArr = FD.detect(image);
//对该脸进行5点或81点定位
//FL是FaceLandmarker对象实例
//vector<SeetaPointF>是二维特征点的数组
std::vector<SeetaPointF> currentFace81Points = FL.mark(image, facesArr.data[i].pos);
//Compare的四个参数分别为:
//SeetaImageData类型的图片,SeetaPointF*类型的特征点数组
FDB->Compare(face1Data, face1Points.data(), face2Data, face2Points.data());

  

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

VS2017+QT5.11.2+SeetaFace1.0/SeetaFace2.0的简单实现的更多相关文章

  1. Windows7 + OSG3.6 + VS2017 + Qt5.11

    一.准备工作 下载需要的材料: 1. OSG稳定版源代码, 3.6.3版本 2. 第三方库,选择VS2017对应的版本  https://download.osgvisual.org/3rdParty ...

  2. qt5.11.2+vs2017环境下配置pcl1.8.1以及第三方依赖库vtk的编译

    1.准备工作 我所用的开发环境是win10下的qt5.11.2配置了vs2017的编译器,根据自己所用的VS的版本去官网下载对应版本的pcl库,如下 PCL-1.8.1-AllInOne-msvc20 ...

  3. 关于本电脑qt5.11+vs2017+opencv3.4的配置问题

    本人想用qt5.11+vs2017+opencv3.4开发程序,配置了很久才成功,现在把配置后的环境变量记录一下,以供自己以后参考,同时也供大家参考. qt5.11+vs2017+opencv3.4的 ...

  4. Oracle Database 11g Release 2(11.2.0.3.0) RAC On Redhat Linux 5.8 Using Vmware Workstation 9.0

    一,简介 二,配置虚拟机 1,创建虚拟机 (1)添加三块儿网卡:   主节点 二节点 eth0:    公网  192.168.1.20/24   NAT eth0:    公网  192.168.1 ...

  5. Oracle_RAC数据库GI的PSU升级(11.2.0.4.0到11.2.0.4.8)

    Oracle_RAC数据库GI的PSU升级(11.2.0.4.0到11.2.0.4.8) 本次演示为升级oracle rac数据库,用GI的psu升级,从11.2.0.4.0升级到11.2.0.4.8 ...

  6. uninstall 11.2.0.3.0 grid & database in linux 5.7

    OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...

  7. maven 的 oracle的Missing artifact com.oracle:******:jar:11.2.0.2.0

    解决方法: 下载ojdbc6对应版本号的包.把下载的包放到: 然后dos命令: -Dpackaging=jar -Dfile=ojdbc6.jar 主:必须确保已经配置了你maven,如何配置mave ...

  8. 单机Oracle+asm(11.2.0.3.0) Patch Set Update(11.2.0.3.7 )

    之前写过一篇关于PSU升级的案例,参考如下: http://blog.csdn.net/jyjxs/article/details/8983880 但是,感觉有些地方理解的不是很透彻明白,照猫画虎的比 ...

  9. hive 0.10 0.11新增特性综述

    我们的hive版本升迁经历了0.7.1 -> 0.8.1 -> 0.9.0,并且线上shark所依赖的hive版本也停留在0.9.0上,在这些版本上有我们自己的bug fix patch和 ...

随机推荐

  1. LeetCode97 Interleaving String

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. (Hard) For example,Giv ...

  2. 巨蟒python全栈开发-第11阶段 ansible3_1入门四个模块command&shell&script&copy

    大纲 1.系统安装与机器克隆 2.ansible介绍和host-pattern格式 3.command模块 4.shell模块 5.script模块 6.copy模块

  3. IDI Open 2016 H 字符串模拟题

    H - Palindrome Names 题意:给定一个字符串,每次可以向末尾添加一个字符或者更改一个字符.求使得字符串为回文串(从前往后和从后往前读一样)所花费的最小步数. 题解: 看来需要多思考啊 ...

  4. day5-python之递归与二分法

    一.递归的定义 递归调用是函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用 二.递归分为两个阶段:递推,回溯 age(5) = age(4) + 2 age(4) = ag ...

  5. hdu 4128 Running relay (线性规划转半平面交)

    Problem - 4128 对偶线性规划转半平面交,这题的正解O(nlogn)解法,目前网上没有找到这样的正解. 原来的不等式组, sigma{-si*xi}>=-W+d*sigma{si} ...

  6. STS Eclipse IDEA 指定启动JDK版本

    使用场景: 开发人员在自己的机器上可能装了多个版本的JDK,但是在环境变量中只能配置一个 JAVA_HOME ,so你的IDEA Eclipse 可能因为你在 JAVA_HOME 配置JDK1.8 以 ...

  7. oracle 通过内部函数提高SQL效率.

    SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*) FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H WHER ...

  8. H3C 其他OSPF显示命令

  9. python模块之hashlib模块

    hashlib模块:提供摘要算法 格式: hashlib格式: obj = hashlib.算法(md5,sha....) obj.update(摘要内容:bytes类型) result = obj. ...

  10. Vue 双向数据绑定v-model

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...