SeetaFaceEngine系列1:Face Detection编译和使用
SeetaFace,根据GitHub上的介绍,就是一个开源的人脸检测、矫正和识别的开源库,是采用C++来编写的,并且是在CPU上执行的,没有用到GPU,但是可以用SSE或者OpenMP来加速。整个库分为三部分,SeetaFace Detection, SeetaFace Alignment 和 SeetaFace Identification,分别对应人脸检测,人脸矫正和人脸识别三个功能。
好了,这一篇就介绍下第一部分Face Detection的编译和使用。
首先是编译工具,这里SeetaFace要用到OpenCV,编译用的VS2013;然后是下载GitHub的源码,GitHub上已经有seetaFace2了,但是我打开之后好像只有一些文件夹,没有具体的文件,所以,估计是暂时还没有吧,所以还是用的seetaFace。

这个编译过程还是比较简单的,步骤如下:
1、打开VS2013后创建一个空的DLL工程:

更改编译其设置为x64,这个看自己需求了,我基本上大部分程序都告别win32了,所以用的x64:

添加include:

添加OpenCV的lib路径和依赖项文件


添加detection的源文件到工程中:

也就是SeetaFaceEngine\FaceDetection\src下的所有文件和文件夹(除了test)复制到工程下,并添加到工程中,然后修改预编译器设置:

然后打开OpenMP设置:

然后就编译工程就可以了,同样Release下也是这样设置。
2、使用例程:
这里用的是SeetaFace的例子:FaceDetection\src\test的facedetection_test.cpp
int testFaceDetection(std::string src_Path)
{
std::string path = "D:/SeetaFaceEngine/include_lib/model/FaceDetection/seeta_fd_frontal_v1.0.bin";
seeta::FaceDetection detector();
detector.SetMinFaceSize(40);
detector.SetScoreThresh(2.f);
detector.SetImagePyramidScaleFactor(0.8f);
detector.SetWindowStep(4, 4);
cv::Mat img = cv::imread(src_Path, cv::IMREAD_UNCHANGED);
cv::Mat img_gray;
if (img.channels() != 1)
cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
else
img_gray = img;
seeta::ImageData img_data;
img_data.data = img_gray.data;
img_data.width = img_gray.cols;
img_data.height = img_gray.rows;
img_data.num_channels = 1;
long t0 = cv::getTickCount();
std::vector<seeta::FaceInfo> faces = detector.Detect(img_data);
long t1 = cv::getTickCount();
double secs = (t1 - t0) / cv::getTickFrequency();
std::cout << "Detections takes " << secs << " seconds " << std::endl;
#ifdef USE_OPENMP
std::cout << "OpenMP is used." << std::endl;
#else
std::cout << "OpenMP is not used. " << std::endl;
#endif
#ifdef USE_SSE
std::cout << "SSE is used." << std::endl;
#else
std::cout << "SSE is not used." << std::endl;
#endif
std::cout << "Image size (wxh): " << img_data.width << "x" << img_data.height << std::endl;
cv::Rect face_rect;
int32_t num_face = static_cast<int32_t>(faces.size());
for (int32_t i = 0; i < num_face; i++)
{
face_rect.x = faces[i].bbox.x;
face_rect.y = faces[i].bbox.y;
face_rect.width = faces[i].bbox.width;
face_rect.height = faces[i].bbox.height;
cv::rectangle(img, face_rect, CV_RGB(0, 0, 255), 2, 8, 0);
}
cv::namedWindow("Test", cv::WINDOW_AUTOSIZE);
cv::imshow("Test", img);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
人脸检测结果如下:

速度上还是慢了一点,可能还跟前面的参数设置有关。
玉阶生白露,夜久侵罗袜。
却下水晶帘,玲珑望秋月。
--李白 《玉阶怨》
SeetaFaceEngine系列1:Face Detection编译和使用的更多相关文章
- SeetaFaceEngine系列3:Face Identification编译和使用
前面两篇介绍了怎样编译SeetaFace的前两部分,现在就来讲下第三部分Face Identification的编译和使用. 其实,步骤基本上是一直的,如下: 1.新建一个空的DLL工程: 2.修改配 ...
- SeetaFaceEngine系列2:Face Alignment编译和使用
前面一篇写了编译人脸检测部分,现在就介绍下人脸配准部分,SeetaFace的Face Alignment通过人脸的五个关键点来配准人脸,也就是双眼.鼻尖.两个嘴角. 这部分的编译也和上一篇一样,步骤如 ...
- 读论文系列:Object Detection CVPR2016 YOLO
CVPR2016: You Only Look Once:Unified, Real-Time Object Detection 转载请注明作者:梦里茶 YOLO,You Only Look Once ...
- Linux Kernel系列三:Kernel编译和链接中的linker script语法详解
先要讲讲这个问题是怎么来的.(咱们在分析一个技术的时候,先要考虑它是想解决什么问题,或者学习新知识的时候,要清楚这个知识的目的是什么). 我在编译内核的时候,发现arch/arm/kernel目录下有 ...
- spring源代码系列(一)sring源代码编译 spring源代码下载 spring源代码阅读
想对spring框架进行深入的学习一下,看看源码,提升和沉淀下自己,工欲善其事必先利其器,还是先搭建好开发环境吧. 环境搭建 sping源代码之前是svn管理,如今已经迁移到了github中了.新版本 ...
- JVM系列之二:编译过程
1. Java的编译和执行 编译包括两种情况: 1,源码编译成字节码2,字节码编译成本地机器码(符合本地系统专属的指令) 解释执行也包括两种情况: 1,源码解释执行2,字节码解释执行 解释和编译执行的 ...
- [ffmpeg 扩展第三方库编译系列] 关于libopenjpeg mingw32编译问题
在mingw32如果想编译libopenjpeg 会比较麻烦 会出现undefined reference to `_imp__opj_destroy_cstr_info@4' 等错误 因此编译时候需 ...
- [ffmpeg 扩展第三方库编译系列] 关于libvpx mingw32编译问题
在编译libvpx的时候遇到挺多的问题, 1.[STRIP] libvpx.a < libvpx_g.a strip: Bad file number 这个错误也是比较难搞的,一开始以为只是 ...
- [ffmpeg 扩展第三方库编译系列] frei0r mingw32 下编译问题
在编译安装frei0r的时候遇到两个错误地方, 两个都是在install的时候. 一开始编译都很顺利,输入了 make install之后就走开了,回来一看,报错误. 提示mkdir -p //usr ...
随机推荐
- UVA - 10305 Ordering Tasks(拓扑排序)
题意:给定优先关系进行拓扑排序. 分析:将入度为0的点加入优先队列,并将与之相连的点入度减1,若又有度数为0的点,继续加入优先队列,依次类推. #pragma comment(linker, &quo ...
- ffmpeg “inttypes.h”: No such file or directory
编译过程:错误一:无法打开包括文件:“inttypes.h”: No such file or directory解决方法:删除之,并在其之前添加如下代码: #if defined(WIN32) &a ...
- idea开发springboot 的mysql数据库连接问题
今天在家用idea进行springboot开发,前面一些坑相对避免了,但是到数据库这块总是连接不上,报错主要是: Access denied for user 'root'@'localhost' ( ...
- idea中使用maven运行wordcount代码
1.创建maven项目 pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- 【STM32H7教程】第51章 STM32H7的LTDC应用之LCD汉字显示和2D图形显示
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第51章 STM32H7的LTDC应用之LCD汉字 ...
- css选择器权重、样式继承、默认样式
学过css的小伙伴都是指css选择器的权重 !important Infinity 行间样式 1000 id 100 class|属性|伪类 10 标签|伪元素 1 通配符 0 权重相同 相同cs ...
- 十九、SAP查询所有数据库表的所有数据
一.我们打款SAP自带的一个演示数据库SCARR 二.表结构如下 三.代码如下 四.执行结果如下 我们对比一下数据库的内容,很perfect 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微 ...
- Linux每日一练20200220
- 关于SI4432数据手册的简单讲解
SI4432是高度集成度单芯片无线ISM收发器件.EZRadioPRO系列包括了发射机.接收机和射频收发器,让设计工程师可以有选择的设计利用里面的无线部分. SI4432提供了先进的无线功能,包括连续 ...
- 覆盖.project
<?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name ...