您的位置:首页 > 其它

seetaface VS2013下的编译安装he环境配置

2017-03-23 11:02 597 查看
最近由于毕设所做是关于人脸识别的,在毕设老师的推荐下尝试着倒腾下seetaface。在进行环境搭建的过程中不得不说是一波三折,

以下是环境配置过程的步骤、遇到的问题以及解决办法:

源代码是在点击打开链接这里面下载的。

seetaface一共提供了三个API,按照山世光老师所介绍的基本上都已经达到了state of the art的水准,而且用的是BSD开源标准,可以

用于商业用途。

首先是FaceDetection环境的搭建:

How to Build Shared Lib with Visual Studio

Create a dll project: New Project -> Visual C++ -> Win32 Console Application -> DLL.
(Optional) Create and switch to x64 platform.
Add additional include directories: (Project) Properities -> Configuration Properties -> C/C++ -> General -> Additional Include Directories.
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.
(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.
Build.

在进行这一步需要注意的是在VS下直接进行build(编译),并没有生成对应的dll文件和lib文件。此时点一下生成解决方案按钮,则先点解决方案资源管理器->选中所选项目->

右键在资源管理器中打开文件夹->在此文件夹的上一个目录下的dubug文件夹里即可找到所需的dll文件和lib文件

上面不会步骤中的optional意为可选项,做与否并不会对最后的编译成功造成影响。

dll项目只可编译,不可运行!

点击生成解决方案,出现如下报错:



进行如下操作即可:



再次点击生成解决方案即可正确运行

之后是FaceAlignment环境的搭建:

Build Shared Lib with Visual Studio

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.
在这一步与上面相当吧,照猫画虎即可

此时点击生成解决方案,发生如下报错:



依据提示,在属性管理器->通用属性->C/C++->预处理器->预处理器定义里添加_CRT_SECURE_NO_WARNINGS即可

后面的可参考这篇文章点击打开链接。我在做的过程中还是遇到了很多问题。

纠其原因都是因为细节未处理好。例如没有准确处理好,忘记include某个文件夹之类的。

在进行FaceIdentification步骤时我遇到了这个问题:

错误 12 error LNK2019: 无法解析的外部符号 "private: char * __cdecl cv::String::allocate(unsigned __int64)" (?allocate@String@cv@@AEAAPEAD_K@Z),该符号在函数 "public: __cdecl cv::String::String(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char>
> const &)" (??0String@cv@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 中被引用D:\SeetaFaceEngine-master\SeetaFaceEngine-master\FaceIdentification\examples\Tester\test_face_recognizer.objTester



但是所属项目为Tester,并不是我们所想用来生成dll和lib文件的Identification项目,所以此时可以选择性忽略。

在最后新建项目的时候发生了一个错误

如下图所示:



经过很多次的检查感觉均未出现错误,最后在GitHub上seetaface的issue70下看了一个评论:



发现我也是这么错的,于是根据这个改了下,就好了。

不过之后又出现了这个问题:





最后运行效果如图所示。

在项目搭建过程中,还遇到了error LINK2038 RuntimeLibrary不匹配这个问题,可参考点击打开链接这篇文章。

遇到其他问题,百度或者Google应该都可以解决。这种环境搭建其实最难的是第一次,随着经验的累加,会越来越轻车熟路。

其实之前有这么一个理论作为程序员有两种能力是必备的:一、算法能力,这个可以通过做oj之类的题来体现;二、环境搭建项目开发的能力。

后者只有在实践中慢慢积累了。与诸君共勉!


注:一、首先得保证opencv的path路径设置正确,x64以及x86的路径均设置正确,这样之后建opencv工程的时候可以自由选择x86或者x64项目。

二、确保生成的dll文件以及之后创建的测试工程文件是同在x86下编译的或者同在x64下编译的。

三、当报错过多,解决一个问题后面还是问题不断时,建议自己重新根据步骤重建工程,这样也许混来的更快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: