zoukankan      html  css  js  c++  java
  • SeetaFace教程(一) 在 VS 中的编译安装和环境配置

    SeetaFace开源库由FaceDetection、FaceAlignment、FaceIdentification三部分组成。FaceDetection是在一副图片中检测出人脸区域,以一个方形区域表示。FaceAlignment利用FaceDetection中检测出的方框,进一步检测出人脸的5个关键点(两眼中心,鼻尖和两个嘴角)。最后,FaceIdentification利用FaceAlignment中检测出的关键点,提取出单个人脸的特征。

    使用SeetaFace首先需要把原始的文件进行编译,本文先介绍SeetaFace在Visual Studio中三个部分的编译过程,然后再简要介绍如何配置Visual Studio中的SeetaFace开发环境。

    注意:

    1. SeetaFace需要Opencv环境,要先安装好。

    2. SeetaFace使用了一些C++ 11的新特性,因此最好在VS2013中编译。(详见:这个平台怎么在Visual studio2010上搭建(电脑是Windows8.1,64位的) · Issue #33 · seetaface/SeetaFaceEngine · GitHub)。本文是在VS2012环境下编译的,因此会出现一些问题,但通过修改源码这些问题都解决了。如果编译环境不是VS2013的,可以参考这篇文章解决一下相应的编译问题。

    一、编译FaceDetection部分

    FaceDetection在目录SeetaFaceEngineFaceDetection下。

    按照官方的步骤安装:

    1. 在其他地方创建一个空DLL工程: New Project -> Visual C++ -> Win32 Console Application -> DLL.

    2. (Optional) Create and switch to x64 platform.

    3. 添加include目录:(Project) Properities -> Configuration Properties -> C/C++ -> General -> Additional Include Directories.。加入SeetaFaceEngineFaceDetectioninclude目录。

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

    5. Define SEETA_EXPORTS macro: (Project) Properities -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.

    6. (Optional) Switch to Intel C++ (for better code optimization).

    7. (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.

    8. F7 编译

    遇到的问题:kStdDevThresh初始化方法不对。

    解决方法:把原来的初始化去掉,只留声明。在类的构造函数的地方初始化:LABBoostedClassifier() : use_std_dev_(true),kStdDevThresh(10.0f)

    编译后可得到FaceDetection.lib和FaceDetection.dll。

    二、编译FaceAlignment部分

    FaceAlignment在目录SeetaFaceEngineFaceAlignment下。

    同样安装官方的步骤。包含.h和.cpp的方法和上面一样。

    1. Create a dll project: New Project -> Visual C++ -> Win32 Console Application -> DLL.

    2. (Optional) Create and switch to x64 platform.

    3. Add header files: all *.h files in include.

    4. Add source files: all *.cpp files in src except for those in src/test.

    5. Define SEETA_EXPORTS macro: (Project) Properities -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.

    6. Build.

    遇到的问题1:min,max函数模板函数重载无法确定。

    解决方法:在引用函数的地方,把两个参数都加入强制类型转换double()

    遇到的问题2:没有isnan函数

    解决方法:自行定义

    #ifndef isnan

    #define isnan(x) ((x)!=(x))

    #endif

    编译成功后可得到FaceAlignment.dll和FaceAlignment.lib

    三、编译FaceIdentification 部分

    这个模块的编译不需要创建工程。

    直接打开打开SeetaFaceEngineFaceIdentificationexamples中的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:SeetaFaceEngineFaceIdentificationinclude、D:SeetaFaceEngineFaceAlignmentinclude、D:SeetaFaceEngineFaceDetectioninclude。

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

    这样环境就搭建好了。我们可以新建一个cpp,把SeetaFaceEngineFaceIdentificationsrc est est_face_recognizer.cpp中的内容都拷贝进来,应该就编译成功了。

    不过此时运行会出现“../../model/seeta_fr_v1.0.bin not exist!”错误:

    其实是因为SeetaFace需要它提前训练好的model文件,除此之外,还需要data文件。model文件在SeetaFaceEngineFaceIdentificationmodel下,把它解压好,data文件在SeetaFaceEngineFaceIdentificationdata中。

    我们把程序中的定义model和data的地方改到自己电脑的对应位置:

    (也可以把文件复制过来,然后改为相对目录)

    这样运行,就可以了:

    以上转自https://zhuanlan.zhihu.com/p/22604228

    最后提及一下自己遇到的问题,系统win7,vc2013,运行程序遇到0xc000007b问题,坑爹啊!!!!!!网上百度多种方法:

    1.DirectX修复,无效

    2.2013运行库重装,无效

    3.vs2013修复,无效

    最后!!!用管理员权限打开VS2013解决!!!

  • 相关阅读:
    2020年“3D视觉工坊”视频号最受欢迎视频 Top 10!
    缓存一致性解决方案杂谈
    Mybatis的@Param注解在多参数时候不写,可以正确执行。
    Redis设计与实现之简单动态字符串
    YApi mac上部署
    拖拽方式生成Vue用户界面
    终于可以愉快的撸Java异步代码了!
    Windows 取证之ShellBags
    初识Fastjson漏洞(环境搭建及漏洞复现)
    mongo-express 远程代码执行漏洞分析
  • 原文地址:https://www.cnblogs.com/pkjplayer/p/6944871.html
Copyright © 2011-2022 走看看