简介
SeetaFace人脸识别解决方案已开源许久,一直拖到最近才看。它提供了一套完整的人脸检测,人脸对齐和人脸验证方案,比较适合做学习。由于开源的代码是DLL项,现编译完成之后,对其进了一定封装,,实现了人脸特征提取,入库保存,以及人脸识别等。
对该系统的介绍可以参见:
SeetaFace开源人脸识别引擎介绍
本文主要参考:
SeetaFace教程: 在 VS 中的编译安装和环境配置 并做了部分整合与修改。
准备
在这之前,请自行下载
SeetaFace源码,并编译出三个lib文件和三个dll文件。我编译出的是
FaceIdentification.lib FaceIdentification.dll
FaceAlignment.lib FaceAlignment.dll
FaceDetection.lib FaceDetection.dll
FaceAlignment.lib FaceAlignment.dll
FaceDetection.lib FaceDetection.dll
编译时直接打开源码里面的example解决方案即可,编译dll文件时无需任何额外的依赖项,只有在测试时才需要opencv。如果不太明白,也可参考上面简介中给出的SeetaFace教程链接,不过我觉得他那有点多余。
项目
新建win32控制台项目,此时需要opencv,我在测试时使用的是opencv2.4.10,其他的应该也行。
① 将项目属性改为x64
② 在配置属性-VC++目录中,将opencv的包含目录和库目录修改好,记得使用x64的lib库
③ 链接器-输入,加入FaceIdentification.lib FaceAlignment.lib FaceDetection.lib opencv_core2410.lib opencv_highgui2410.lib opencv_imgproc2410.lib
④ 与这6个lib文件相对于的dll文件放入可执行文件目录下即可。
⑤ 将seetaface源码中的三个model,放在一起,存于项目文件夹下即可。images文件夹中为一些测试图片
项目整体结构
源码
FeatureGroup.h
#ifndef FEATUREGROUP_H
#define FEATUREGROUP_H
#include <fstream>
#include <io.h>
#include <queue>
#include <string>
#include "FaceRecognition.h"
struct Feature
{
std::string filename;
float* data;
float similarity_with_goal;
friend bool operator < (Feature f1, Feature f2)
{
return f1.similarity_with_goal < f2.similarity_with_goal;
}
};
class FeatureGroup
{
public:
FeatureGroup(int feat_dims, FaceRecognition* fr);
Featur