Giter Club home page Giter Club logo

seetafaceengine's Introduction

SeetaFace Engine

License

Description

SeetaFace Engine is an open source C++ face recognition engine, which can run on CPU with no third-party dependence. It contains three key parts, i.e., SeetaFace Detection, SeetaFace Alignment and SeetaFace Identification, which are necessary and sufficient for building a real-world face recognition applicaiton system.

  • SeetaFace Detection implements a funnel-structured (FuSt) cascade schema for real-time multi-view face detection, which achieves a good trade-off between detection accuracy and speed. State of the art accuracy can be achieved on the public dataset FDDB in high speed. See SeetaFace Detection for more details.

  • SeetaFace Alignment cascades several stacked auto-encoder networks to detect landmarks in real time (more than 200 fps on a single I7 desktop CPU), and achieves the state-of-the-art accuracy at least on some public datasets AFLW. See SeetaFace Alignment for more details.

  • SeetaFace Identification is a modification of AlexNet CNN for face recognition, with better performance in terms of both accuracy (97.1% on [LFW] (http://vis-www.cs.umass.edu/lfw/) and speed (about 120ms on a single I7 desktop CPU). See SeetaFace Identification for more details.

This face recognition engine is developed by Visual Information Processing and Learning (VIPL) group, Institute of Computing Technology, Chinese Academy of Sciences. The codes are written in C++ without dependence on any 3rd-party libraries. The open source is now released under BSD-2 license (see LICENSE for details), which means the codes can be used freely for both acedemic purpose and industrial products.

If you meet problems when using SeetaFace Engine, you may seek help from Configuration Documentation.

Contact Info

If you have any problem on SeetaFace Engine, please contact us by sending email to [email protected]. If Seetaface can not meet your business needs, please contact [email protected] for business cooperation. For more AI services, please visit SeetaTech official website: http://www.seetatech.com.

SeetaTech is a start-up company with the focus on computer vision technology, whose founding team comes from Visual Information Processing and Learning (VIPL) group, Institute of Computing Technology, Chinese Academy of Sciences. We have always been adhering to the development principle of "open source striving to develop AI", promoting the rapid integration of Artificial Intelligence and other industries.

Other Documentation

seetafaceengine's People

Contributors

jiaolong avatar jiezhang-zz avatar seeta-wushuzhe avatar seetaface avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

seetafaceengine's Issues

建议提供训练方式

如题。人多力量大,群策群力,搜集更多的图片,训练的素材往往来自民间,尤其是监控现场的图片,对于提高类似背景下的准确度还是很有价值的。毕竟,监控现场图片跟实验室还是有差别的。

关键点检测问题

这个算法的关键点是不是无法处理正面人脸,我试了一下,如果人脸稍微有一点侧面,关键点定位就不准确了。

人脸检测的问题

试了一下detection,性能不佳啊。
我用的是那个例子facedetection_test.cpp
测试了一下这个图片,一张人脸都没检测出来:
test_image

怎么判断人脸特征点的质量?

在已经标注好的训练和测试数据集上,算法得出的人脸特征点的误差是可以计算的。在其他的未标注的图片上,如何判断特征点的质量呢?就好比人脸识别和比对的时候的置信度。

FaceIdentification人脸相似度问题

如果用于判断人脸相似度的两张照片来源于不通的相机,并且拍摄角度不同是否会极大的影响判断的准确性?
我用两个相机,一个平视一个俯视(大概20°的俯视角度)拍同一个人,得到的人脸相似度不可靠。有没有什么办法提升准确率呢?

OpenCV 不是第三方库?

Readme中有段描述:“The codes are written in C++ without dependence on any 3rd-party libraries. ”

我想问下OpenCV不是第三方库?

FaceIdentification中example的代码不全

我在测试过程中发现这个example的代码编译不过, 需要添加一下头文件才能编译通过, 希望官方能不全。

include<opencv2/core/core.hpp>

include <opencv2/imgproc/imgproc.hpp>

include<opencv2/highgui/highgui.hpp>

关于FaceAlignment和FaceDetection

我把FaceAlignment和FaceDetection都编译成DLL,但是测试例子中加载不了:
---- 已启动生成: 项目: Tester_FaceAlignment, 配置: Release Win32 ------
1> 正在创建库 F:\Work\人脸识别\SeetaFaceEngine-master\SeetaFaceEngine-master\FaceAlignment\examples\Release\Tester_FaceAlignment.lib 和对象 F:\Work\人脸识别\SeetaFaceEngine-master\SeetaFaceEngine-master\FaceAlignment\examples\Release\Tester_FaceAlignment.exp
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: void __thiscall seeta::FaceDetection::SetScoreThresh(float)" (?SetScoreThresh@FaceDetection@seeta@@QAEXM@Z)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: void __thiscall seeta::FaceDetection::SetWindowStep(int,int)" (?SetWindowStep@FaceDetection@seeta@@QAEXHH@Z)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: void __thiscall seeta::FaceDetection::SetImagePyramidScaleFactor(float)" (?SetImagePyramidScaleFactor@FaceDetection@seeta@@QAEXM@Z)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: void __thiscall seeta::FaceDetection::SetMinFaceSize(int)" (?SetMinFaceSize@FaceDetection@seeta@@qaexh@Z)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: class std::vector<struct seeta::FaceInfo,class std::allocator > __thiscall seeta::FaceDetection::Detect(struct seeta::ImageData const &)" (?Detect@FaceDetection@seeta@@QAE?AV?$vector@UFaceInfo@seeta@@v?$allocator@UFaceInfo@seeta@@@std@@@std@@ABUImageData@2@@z)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall seeta::FaceDetection::~FaceDetection(void)" (??1FaceDetection@seeta@@QAE@XZ)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall seeta::FaceDetection::FaceDetection(char const *)" (??0FaceDetection@seeta@@QAE@PBD@Z)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: bool __thiscall seeta::FaceAlignment::PointDetectLandmarks(struct seeta::ImageData,struct seeta::FaceInfo,struct seeta::FacialLandmark *)" (?PointDetectLandmarks@FaceAlignment@seeta@@QAE_NUImageData@2@UFaceInfo@2@PAUFacialLandmark@2@@z)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall seeta::FaceAlignment::~FaceAlignment(void)" (??1FaceAlignment@seeta@@QAE@XZ)
1>face_alignment_test.obj : error LNK2001: 无法解析的外部符号 "public: __thiscall seeta::FaceAlignment::FaceAlignment(char const *)" (??0FaceAlignment@seeta@@QAE@PBD@Z)
1>F:\Work\人脸识别\SeetaFaceEngine-master\SeetaFaceEngine-master\FaceAlignment\examples\Release\Tester_FaceAlignment.exe : fatal error LNK1120: 10 个无法解析的外部命令

FaceDetection 和 FaceAlignment中common.h文件不一致

你好,FaceDetection和FaceAlignment中common.h文件不一致,在运行FaceAlignment的测试脚本时,发现如果先include FaceDetection的头文件,则优先引入这个common文件,导致FaceAlignment中的common文件无法正确导入,检测不到FacialLandmark结构体的定义。

Face identification performance

Thank you for releasing codes.

For the performance, it achieves a mean accuracy of 97.1% on LFW under the standard Image-Restricted protocol, is this accuracy open-set or close set for identification?

For the training data, it seems that it is much larger than your paper[1]. How much improvement for the difference training data?

关于人脸验证的demo代码

test_face_recognizer.cpp没看懂,dst_image好像一直没有读取,而只有src_image。

个人理解,是不是应该有这样的函数:
compare(cv::mat srcimage, cv::mat dstimage), 然后得出一个相似度0-1也可以,或者直接返回百分比?

在现有的demo的情况下,改如何做呢,谢谢。

FaceIdentification中test_face_verification的问题

没有添加test_face_verification.cpp 的时候,可以编译运行成功。但是加了这个测试案例后编译失败,这是什么原因,是不是需要修改相应CMakeLists.txt里面的设置,需要如何修改?

img_name值的怎么获取的?

你好,我在测试这个example的程序vs程序时发现在 while (ifs >> img_name) {这个位置时img_name都还没有赋值,但是在接下来的一句函数 img_num ++ ;时就能获取到了NF_200001_001.jpg名字, 此处我始终没有明白,不知能否帮助解答下, 谢谢!
void TEST(FaceRecognizerTest, CropFace) {
FaceIdentification face_recognizer((MODEL_DIR + "seeta_fr_v1.0.bin").c_str());
std::string test_dir = DATA_DIR + "test_face_recognizer/";
/* data initialize */
std::ifstream ifs;
std::string img_name;
FacialLandmark pt5[5];
ifs.open(test_dir + "test_file_list.txt", std::ifstream::in);
clock_t start, count = 0;
int img_num = 0;
while (ifs >> img_name) {
img_num ++ ;
// read image
cv::Mat src_img = cv::imread(test_dir + img_name, 1);
EXPECT_NE(src_img.data, nullptr) << "Load image error!";

FaceIdentification 我自己写了makefile跑在arm上,编译通过可是一跑就飞了。

跟踪代码是CommonNet::Load 的时候 --》NetRegistry::CreateNet(net_type);
static std::shared_ptr CreateNet(const std::string type) {
CreatorRegistry& registry = Registry();
if (registry.count(type) != 1) {
LOG(ERROR) << "Net type " << type << " haven't registered.";
}
return registrytype;
}
感觉这里没地方插入map为何直接调用。不会出错吗?难道是GCC版本不对吗?
谢谢,大家指教。

特征点检测部分

你好,
在特征点检测部分,我有希望把它从5个特征点改成68个特征点吗?( 新手学习~~~ 请不要嫌弃我的问题 ( ̄▽ ̄)" 感谢!)

代码使用问题

您好!我想问一下这个代码该怎么使用,是在vs3013上运行的吗?为什么我编译出来好多错误,希望能有好心的大神讲一下,谢谢!(新手望提点)

关于FaceDetection的ScoreThresh

您好,在使用工程的时候,发现根据ScoreThresh筛选确信图片时候的代码有些问题,关键代码如下:
`for (int32_t i = 0; i < impl_->pos_wnds_.size(); i++) {

if (impl_->pos_wnds_[i].score < impl_->cls_thresh_) {

  impl_->pos_wnds_.resize(i);

  break;

}

}`
Debug发现impl->pos_wnds_并没有根据score进行排序,所以筛选图片的时候有些确信度很高的排在后面的就被提前pass掉了。

我应该如何训练自己的人脸库?

目前项目提供的是已经训练好的人脸库,这个跑测试,没问题。

但是如果我用到自己的项目中,应该如何完成用户的人脸训练和比较了?

召回率问题

40*40以上人脸大小为检测,为什么我在FDDB上测出来的召回率只有80,不过误检是67,请问84.4@100的结果是基于什么样的参数设置得出来的。。。

编译FaceAlignment dll 和FaceDetection dll时一直报错

@seetaface 请问为什么我建立编译FaceAlignment dll 和FaceDetection dll时,一直报错,请问什么原因?在每个提示错误处加上#include“”stdafx.h“错误反倒更多了。错误如下:”error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?

Alignment load models error!

seeta::FaceAlignment point_detector("seeta_fa_v1.0.bin"); couldn't load the facial landmark detection model. error this line: `fread(mean_shape_, sizeof(float), pts_num_ * 2, fp);` in cfan.cpp

FaceIdentification Debug

I generate all the necessary DLL files with debug mode and run FaceIdentification test file, the problem I met was that my program kept waiting even if I had inserted break points in main function or the beginning of the test cpp.

有关特征点提取的问题

您好!
我有疑问,
1.类FaceIdentification的函数feature_size()返回的值一定要是2048吗?这个值是否可以根据需要进行修改?
2.裁剪图像的调用的函数crop_height(),crop_width(),crop_channels()返回的值分别是256,256,3。这三个值有什么特殊含义吗?crop_height()一定要是256吗?crop_width()一定要是256吗?是否可以根据需要进行修改?

some problems about FaceDetection

There're some problems when i run ’facedetection_test.cpp‘ after building shared lib.
It shows that 'Debug Assertion Failed‘& ‘Expression: vector subscript out of range’.
anyone meet the same problem ?

代码好像没有ReLU 层?

您好,感谢分享!

看代码好像没有ReLU层,且调试代码读取模型是Conv后接的是Elewise的BIAS_ADDER,然后就是BN,接着是Max Pooling。请问你们训练是没用ReLU层吗?
谢谢! @seetaface

编译时出现error C2039: “max”: 不是“std”的成员

用的VS2013,直接把detection和alignment的代码弄到vs里编译

出现如下错误

1>------ 已启动全部重新生成:  项目: SeetaDetectionAndAlignment, 配置: Release x64 ------
1>  cfan.cpp
1>..\..\FaceAlignment\src\cfan.cpp(109): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\stdio.h(211) : 参见“fopen”的声明
1>..\..\FaceAlignment\src\cfan.cpp(166): warning C4305: “初始化”: 从“double”到“float”截断
1>..\..\FaceAlignment\src\cfan.cpp(167): warning C4305: “初始化”: 从“double”到“float”截断
1>..\..\FaceAlignment\src\cfan.cpp(170): error C2039: “max”: 不是“std”的成员
1>..\..\FaceAlignment\src\cfan.cpp(170): error C3861: “max”:  找不到标识符
1>..\..\FaceAlignment\src\cfan.cpp(171): error C2039: “min”: 不是“std”的成员
1>..\..\FaceAlignment\src\cfan.cpp(171): error C3861: “min”:  找不到标识符
1>..\..\FaceAlignment\src\cfan.cpp(172): error C2039: “max”: 不是“std”的成员
1>..\..\FaceAlignment\src\cfan.cpp(172): error C3861: “max”:  找不到标识符
1>..\..\FaceAlignment\src\cfan.cpp(173): error C2039: “min”: 不是“std”的成员
1>..\..\FaceAlignment\src\cfan.cpp(173): error C3861: “min”:  找不到标识符
1>..\..\FaceAlignment\src\cfan.cpp(214): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
1>..\..\FaceAlignment\src\cfan.cpp(247): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
1>..\..\FaceAlignment\src\cfan.cpp(290): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
1>..\..\FaceAlignment\src\cfan.cpp(323): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
1>..\..\FaceAlignment\src\cfan.cpp(394): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
1>..\..\FaceAlignment\src\cfan.cpp(395): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据
1>..\..\FaceAlignment\src\cfan.cpp(396): error C2039: “max”: 不是“std”的成员
1>..\..\FaceAlignment\src\cfan.cpp(396): error C3861: “max”:  找不到标识符
1>..\..\FaceAlignment\src\cfan.cpp(397): error C2039: “min”: 不是“std”的成员
1>..\..\FaceAlignment\src\cfan.cpp(397): error C3861: “min”:  找不到标识符
1>..\..\FaceAlignment\src\cfan.cpp(398): error C2039: “max”: 不是“std”的成员
1>..\..\FaceAlignment\src\cfan.cpp(398): error C3861: “max”:  找不到标识符
1>..\..\FaceAlignment\src\cfan.cpp(399): error C2039: “min”: 不是“std”的成员
1>..\..\FaceAlignment\src\cfan.cpp(399): error C3861: “min”:  找不到标识符
1>  face_alignment.cpp
1>..\..\FaceAlignment\src\face_alignment.cpp(46): warning C4273: “seeta::FaceAlignment::FaceAlignment”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceAlignment\include\face_alignment.h(49) : 参见“{ctor}”的前一个定义
1>..\..\FaceAlignment\src\face_alignment.cpp(59): warning C4273: “seeta::FaceAlignment::PointDetectLandmarks”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceAlignment\include\face_alignment.h(61) : 参见“PointDetectLandmarks”的前一个定义
1>..\..\FaceAlignment\src\face_alignment.cpp(79): warning C4273: “seeta::FaceAlignment::~FaceAlignment”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceAlignment\include\face_alignment.h(54) : 参见“{dtor}”的前一个定义
1>  sift.cpp
1>  lab_boosted_classifier.cpp
1>  mlp.cpp
1>  surf_mlp.cpp
1>  face_detection.cpp
1>..\..\FaceDetection\src\face_detection.cpp(73): warning C4273: “seeta::FaceDetection::FaceDetection”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceDetection\include\face_detection.h(44) : 参见“{ctor}”的前一个定义
1>..\..\FaceDetection\src\face_detection.cpp(77): warning C4273: “seeta::FaceDetection::~FaceDetection”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceDetection\include\face_detection.h(45) : 参见“{dtor}”的前一个定义
1>..\..\FaceDetection\src\face_detection.cpp(83): warning C4273: “seeta::FaceDetection::Detect”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceDetection\include\face_detection.h(54) : 参见“Detect”的前一个定义
1>..\..\FaceDetection\src\face_detection.cpp(111): warning C4273: “seeta::FaceDetection::SetMinFaceSize”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceDetection\include\face_detection.h(62) : 参见“SetMinFaceSize”的前一个定义
1>..\..\FaceDetection\src\face_detection.cpp(118): warning C4273: “seeta::FaceDetection::SetMaxFaceSize”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceDetection\include\face_detection.h(70) : 参见“SetMaxFaceSize”的前一个定义
1>..\..\FaceDetection\src\face_detection.cpp(123): warning C4273: “seeta::FaceDetection::SetImagePyramidScaleFactor”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceDetection\include\face_detection.h(79) : 参见“SetImagePyramidScaleFactor”的前一个定义
1>..\..\FaceDetection\src\face_detection.cpp(128): warning C4273: “seeta::FaceDetection::SetWindowStep”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceDetection\include\face_detection.h(87) : 参见“SetWindowStep”的前一个定义
1>..\..\FaceDetection\src\face_detection.cpp(135): warning C4273: “seeta::FaceDetection::SetScoreThresh”: dll 链接不一致
1>          E:\Code\SeetaFaceEngine-master\FaceDetection\include\face_detection.h(96) : 参见“SetScoreThresh”的前一个定义
1>  lab_feature_map.cpp
1>  surf_feature_map.cpp
1>  fust.cpp
1>  lab_boost_model_reader.cpp
1>  surf_mlp_model_reader.cpp
1>  facedetection_test.cpp
1>..\..\FaceDetection\src\test\facedetection_test.cpp(74): warning C4244: “初始化”: 从“int64”转换到“long”,可能丢失数据
1>..\..\FaceDetection\src\test\facedetection_test.cpp(76): warning C4244: “初始化”: 从“int64”转换到“long”,可能丢失数据
1>  image_pyramid.cpp
1>  nms.cpp
========== 全部重新生成:  成功 0 个,失败 1 个,跳过 0 个 ==========

关于计算features值的问题

使用ExtractFeatureWithCrop()计算出来的features 的值,大多数时候都是零点几,但偶尔会出现 x e33 这种数据,我想问下正常数据都是0~1之内吗?

FaceIdentification模块该怎么弄?

1.前两个模块已生成相应的.dll文件,第三个模块在建立工程时还是选择生成.dll?
2.那么多的代码文件该加载哪些(还是只加载include和scr中的代码文件)?
3.该模块该怎么添加前两个模块生成的.dll文件?
4.测试中的代码该怎么用?
新手,望谅解.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.