SeetaFace教程(一) 在 VS 中的编译安装和环境配置
SeetaFace开源库由FaceDetection、FaceAlignment、FaceIdentification三部分组成。FaceDetection是在一副图片中检测出人脸区域,以一个方形区域表示。FaceAlignment利用FaceDetection中检测出的方框,进一步检测出人脸的5个关键点(两眼中心,鼻尖和两个嘴角)。最后,FaceIdentification利用FaceAlignment中检测出的关键点,提取出单个人脸的特征。
使用SeetaFace首先需要把原始的文件进行编译,本文先介绍SeetaFace在Visual Studio中三个部分的编译过程,然后再简要介绍如何配置Visual Studio中的SeetaFace开发环境。
注意:
SeetaFace需要Opencv环境,要先安装好。
SeetaFace使用了一些C++ 11的新特性,因此最好在VS2013中编译。(详见:这个平台怎么在Visual studio2010上搭建(电脑是Windows8.1,64位的) · Issue #33 · seetaface/SeetaFaceEngine · GitHub)。本文是在VS2012环境下编译的,因此会出现一些问题,但通过修改源码这些问题都解决了。如果编译环境不是VS2013的,可以参考这篇文章解决一下相应的编译问题。
一、编译FaceDetection部分
FaceDetection在目录SeetaFaceEngine\FaceDetection下。
按照官方的步骤安装:
在其他地方创建一个空DLL工程: New Project -> Visual C++ -> Win32 Console Application -> DLL.
(Optional) Create and switch to x64 platform.
添加include目录:(Project) Properities -> Configuration Properties -> C/C++ -> General -> Additional Include Directories.。加入SeetaFaceEngine\FaceDetection\include目录。

添加cpp文件: 拷贝 SeetaFaceEngine\FaceDetection\src中的文件到项目文件夹,src/test文件夹中的东西不复制。在解决方案资源管理器中选择显示所有文件,然后右键选择包括在项目中,把文件都包含进来。

Define SEETA_EXPORTS macro: (Project) Properities -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.
(Optional) Switch to Intel C++ (for better code optimization).
(Optional) Enable OpenMP support: (Project) Properities -> Configuration Properties -> C/C++ -> Language -> Open MP Support (or ... C/C++ -> Language [Intel C++] -> OpenMP Support). Define USE_OPENMP macro if necessary.
F7 编译
遇到的问题:kStdDevThresh初始化方法不对。
解决方法:把原来的初始化去掉,只留声明。在类的构造函数的地方初始化:LABBoostedClassifier() : use_std_dev_(true),kStdDevThresh(10.0f)
编译后可得到FaceDetection.lib和FaceDetection.dll。
二、编译FaceAlignment部分
FaceAlignment在目录SeetaFaceEngine\FaceAlignment下。
同样安装官方的步骤。包含.h和.cpp的方法和上面一样。
Create a dll project: New Project -> Visual C++ -> Win32 Console Application -> DLL.
(Optional) Create and switch to x64 platform.
Add header files: all *.h files in include.
Add source files: all *.cpp files in src except for those in src/test.
Define SEETA_EXPORTS macro: (Project) Properities -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.
Build.
遇到的问题1:min,max函数模板函数重载无法确定。
解决方法:在引用函数的地方,把两个参数都加入强制类型转换double()
遇到的问题2:没有isnan函数
解决方法:自行定义
#ifndef isnan
#define isnan(x) ((x)!=(x))
#endif
编译成功后可得到FaceAlignment.dll和FaceAlignment.lib
三、编译FaceIdentification 部分
这个模块的编译不需要创建工程。
直接打开打开SeetaFaceEngine\FaceIdentification\examples中的VS解决方案文件examples.sln。这个文件中有两个工程Identification和Tester。
先编译Identification工程就可以得到Identification.dll和Identification.lib了。
这里编译时,如果v120的工具集不对,可以调成你的VS版本,这里我是VS2012所以调成v110
四、搭建独立项目环境
上面都编译好后,就可以搭建新的独立项目的环境了。
首先新建一个空的项目。
将上面得到的6个文件FaceAlignment.dll、FaceAlignment.lib、FaceDetection.lib、FaceDetection.dll、Identification.dll和Identification.lib拷贝到项目根目录下。
在项目属性 -> VC++ -> 包含目录中加入3个include路径,写你自己的SeetaFace所在地址,我这里是:D:\SeetaFaceEngine\FaceIdentification\include、D:\SeetaFaceEngine\FaceAlignment\include、D:\SeetaFaceEngine\FaceDetection\include。

在项目属性 -> 连接器 -> 输入 -> 附加依赖项加入Identification.lib、FaceAlignment.lib、FaceDetection.lib:

这样环境就搭建好了。我们可以新建一个cpp,把SeetaFaceEngine\FaceIdentification\src\test\test_face_recognizer.cpp中的内容都拷贝进来,应该就编译成功了。
不过此时运行会出现“../../model/seeta_fr_v1.0.bin not exist!”错误:
其实是因为SeetaFace需要它提前训练好的model文件,除此之外,还需要data文件。model文件在SeetaFaceEngine\FaceIdentification\model下,把它解压好,data文件在SeetaFaceEngine\FaceIdentification\data中。
我们把程序中的定义model和data的地方改到自己电脑的对应位置:

(也可以把文件复制过来,然后改为相对目录)
这样运行,就可以了:

以上转自https://zhuanlan.zhihu.com/p/22604228
最后提及一下自己遇到的问题,系统win7,vc2013,运行程序遇到0xc000007b问题,坑爹啊!!!!!!网上百度多种方法:
1.DirectX修复,无效
2.2013运行库重装,无效
3.vs2013修复,无效
最后!!!用管理员权限打开VS2013解决!!!
SeetaFace教程(一) 在 VS 中的编译安装和环境配置的更多相关文章
- 年终福利,PHP7+Apache2.4+MySQL5.6 源码编译安装,环境配置,搭建你自己的LAMP环境
PHP7 都出来了,你还在玩PHP5吗? MySQL5.6 早都出来了,你还在玩MySql5.2吗? Apache2.4 早都出来了,你还在玩Apache2.2吗? 笔者不才,愿意亲自搭建环境,供搭建 ...
- 【转】linux 编译安装nginx,配置自启动脚本
linux 编译安装nginx,配置自启动脚本 本文章来给各位同学介绍一篇关于linux 编译安装nginx,配置自启动脚本教程,希望有需要了解的朋友可一起来学习学习哦. 在公司的suse服务器装ng ...
- linux 编译安装nginx,配置自启动脚本
本文章来给各位同学介绍一篇关于linux 编译安装nginx,配置自启动脚本教程,希望有需要了解的朋友可一起来学习学习哦. 在公司的suse服务器装nginx,记录下安装过程: 参照这篇文章:Linu ...
- LINUX 编译安装 PHP 环境
今天终于有时间 总结一下 linux 的编译安装 php 环境同学给我发了他写的文档 ,基本就可以实现编译安装了我同学文章地址: http://penghui.link/articles/2016/0 ...
- Laravel教程 一:安装及环境配置
Laravel教程 一:安装及环境配置 此文章为原创文章,未经同意,禁止转载. Homestead 最近在SF上面看到越来越多的Laravel相关的问题,而作为一个Laravel的脑残粉,本来打算有机 ...
- Python学习 1 一 Python2.75的安装及环境配置教程
Python2.75的安装及环境配置教程 Python的语法简洁,功能强大,有大量的第三方开发包(模块),非常适合初学者上手.同时Python不像java一样对内存要求非常高,适合做一些经常性的任务方 ...
- CentOS编译安装LNMP环境
这里是教大家如何在centos下利用源码编译安装LNMP环境. 工具/原料 centos服务器一台 自用电脑一台 准备篇 配置好IP.DNS .网关,确保使用远程连接工具能够连接服务器 配置防火墙,开 ...
- Centos 6.8编译安装LNMP环境
Centos 6.8编译安装LNMP环境 参考资料: http://www.jb51.net/article/107429.htm https://phperzh.com/articles/1360 ...
- 【转】编译安装PHP并配置PHP-FPM
1.前言上一篇讲述了如何编译安装MySQL,虽然可以通过yum install 或者rpm来安装,但是yum install和rpm安装有一个特点,就是有些参数是别人根据大众需求定制的,如果需要进行自 ...
随机推荐
- JavaScritpt的DOM初探之Node(一)
DOM(文档对象模型)是针对HTML和XML文档的一个API. DOM描绘了一个层次化的节点树.同意开发者加入,移除和改动页面的某一部分.DOM脱胎于微软公司的DHTLM(动态HTML),可是如今它已 ...
- python 基础 5.1 python 构造器
一. 类的构造器 __init__ 构造函数,在生成对象时调用.由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去.通过定义一个特殊的__init__方法, ...
- python 基础 1.2--pycharm 的安装及使用
一. windows 先安装pycharm. PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,其提供了一个带编码补全,代码片段,支持代码折 ...
- TCP交换数据流——Nagle算法简单记录
Nagle算法: 该算法提出的目的是想解决网络中大量的小的TCP数据包造成网络拥塞的问题,举个例子,当客户端要发送一个字节的TCP数据包到服务器时,我们实际上产生了41字节长的分组:包括20字节的IP ...
- 九度OJ 1049:字符串去特定字符 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8499 解决:3860 题目描述: 输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果. 输入: 测试数据有多组,每组输入字符串s和 ...
- python 创建一个实例:步骤一 编写一个构造函数
编写一个构造函数 #在python中,person 类的第一件是就是记录关于人员的基本信息,这叫做实例对象属性,并且它们通常通过给类方法函数中的self 属性赋值来创建. #赋给实力属性第一个值得通常 ...
- opencv操作相机相关函数
1.基本操作 capture = cv2.VideoCapture(0) ret, image = capture.read() cv2.imwrite("photo.jpg", ...
- keras:Exception: Error when checking model target
问题: 用keras的functional API搭建多输入多输出模型时,报错某个输出层对应的类标数组大小与模型中不一致. 解决办法:升级keras到最新版(doge脸)keras迭代太快了啊摔,总有 ...
- API的理解和使用——键管理
核心知识点: 1.键重命名:rename和renamenx,使用renamenx时newkey必须不存在,重命名后会使用del删除原来的键,如果值比较大也会会造成阻塞. 2.随机返回一个值:rando ...
- CentOS下配置静态IP
第一.在VMware中进行配置使用桥接的方式.点击编辑选择虚拟网络编辑器 选择桥接模式,选择桥接到外部的网卡.选择我们主机下的网卡 第二步.配置虚拟机使用桥接模式 第三步:启动虚拟机进入到 /etc/ ...