Win下 C++版SDM(Supervised Descent Method)算法实现

源码下载地址

前期相关安装配置工作:

OpenCV version >= 2.4.3 (我使用的版本为2.4.9)官网下载地址

下载后解压至相关路径(我的解压路径为:F:/opencv,添加环境变量(右键我的电脑->属性->高级系统设置->环境变量)
在系统变量Path中添加F:\opencv\build\x64\vc12\bin;
新建变量OpenCV,值为:F:\opencv\build;
新建环境变量OpenCV_include,值为:F:\opencv\build\include;F:\opencv\build\include\open;F:\opencv\build\include\opencv2;

打开VS2013,新建win32控制台项目进行VS中opencv的配置。
右键选择项目属性,在VC++目录包含目录中添加
F:\opencv\build\include;F:\opencv\build\include\open;F:\opencv\build\include\opencv2;
在VC++目录库目录中添加F:\opencv\build\x86\vc12\lib;
链接器->输入->附加依赖项,添加所需lib文件即完成配置。

Eigen version >= 3.2(我使用的版本为3.2.9)官网下载地址
我的解压路径为:F:\Eigen\Eigen3.2.9

Boost version >=1.54.0 (我使用的版本为1.61.0) 未编译版本已编译版本
我的解压路径为:F:\Boost\boost_1_61_0
新建环境变量BOOST_LIBRARYDIR,值为:F:\Boost\boost_1_61_0\lib64-msvc-12.0
环境变量BOOST_ROOT,值为:F:\Boost\boost_1_61_0

注:已编译版本下载时注意编译器版本一定要相同(如:boost_1_61_0-msvc-12.0-64.exe,则为64位系统,VS2013编译而成)如果选择未编译版则需要自己进行编译。编译过程如下:

  1. Win+R后弹出运行框
  2. 输入cmd后回车进入命令行窗口
  3. 使用cd命令进入boost解压路径
  4. 在命令行运行bootstrap.bat文件,操作为:输入bootstrap.bat后回车,原路径自动生成bjam.exe文件
  5. 运行bjam.exe文件(系统会自动匹配已有编译器)
  6. 编译完成

Doxygen 官网下载地址

CMake 官网下载地址
选择下载windows版本.msi文件。下载完成运行,选择安装目录,随后在目录中进入bin目录里双击cmake-gui.exe即可进入CMake的gui界面。
具体cmake过程如下:

  1. 在源码解压路径中添加build文件夹(用以放置cmake后的项目文件,也可选择其他路径)

  2. 将源码完整路径添加至gui界面的where is source code部分,将build文件夹完整路径添加至where to build the binaries部分。如图:
    这里写图片描述

  3. 单击Configure,在弹窗中选择编译器后回车。
    这里写图片描述

  4. 找不到opencv相关文件,出现如图所示错误界面:
    这里写图片描述

  5. OpenCV_DIR中添加相关路径,我的为:F:/opencv/build

  6. 点击Configure后会出现新的错误,提示找不到Eigen相关文件,在EIGEN3_INCLUDE_DIR中添加路径F:\Eigen\Eigen3.2.9即可成功configure,截图如下:
    这里写图片描述

  7. 勾选BUILD_DOCUMENTATIONBUILD_TESTS点击Generate,完成首次Generate,出现下图界面:
    这里写图片描述

  8. 可将首次Generate后出现的未勾选框勾选后进行第二次Generate,截图如下:
    这里写图片描述

至此完成前期工作。

注:boost库编译生成的文件命名格式为boost_xxx-vc1x0-mt-1_61.lib/dll或是boost_xxx-vc1x0-mt-gd-1_61.lib/dll,但是cmake中仅识别命名格式为boost_xxx.lib/dll格式的文件(我不知道怎么修改这个识别问题),因此我将该项目中所需要的lib文件进行了名称的更改:
boost_xxx-vc1x0-mt-gd-1_61.lib 改为 boost_xxx.lib。

测试程序

测试landmark_detection项目:
将opencv路径中的haarcascade_frontalface_alt2.xml文件移至相关位置。
将landmark_detection.cpp中与路径有关的代码进行更改:
(380行)

("data,d", po::value<fs::path>(&trainingset)->required()->default_value("D:\\superviseddescent-master\\examples\\data\\ibug_lfpw_trainset"),
                "path to ibug LFPW example images and landmarks")
            ("mean,m", po::value<fs::path>(&meanfile)->required()->default_value("D:\\superviseddescent-master\\examples\\data\\mean_ibug_lfpw_68.txt"),
                "pre-calculated mean from ibug LFPW")
            ("facedetector,f", po::value<fs::path>(&facedetector)->required()->default_value("D:\\superviseddescent-master\\examples\\haarcascade_frontalface_alt2.xml"),
                "full path to OpenCV's face detector (haarcascade_frontalface_alt2.xml)")
            ;

即可运行。

运行结果比较

运行结果图在D:\superviseddescent-master\build\examples目录下生成。

原图:
这里写图片描述

结果图:
这里写图片描述

参考博客
本人初次接触人脸对齐方面的项目,十分感谢博主那年聪聪耐心解答我的疑问。

猜你喜欢

转载自blog.csdn.net/qq_30019237/article/details/52336512