VS2015或2013下两种Dlib库配置方法
首先,Dlib是一个包含机器学习算法的C++开源工具包。最出名的就是它的人脸检测和特征点定位的功能。人脸检测侧脸效果比opencv好太多,特征点定位比什么ASM准确多了。但是如果仅仅只是需要完成人脸检测和特征点定位这两个功能,可以试试使用于仕其老师的库https://github.com/ShiqiYu/libfacedetection,速度更快且配置起来比dlib方便。
言归正传,在vs中配置过opencv的同学都知道,我们第一是需要配好环境变量;第二是配好包含目录和库目录;第三是要在附加依赖项中把.lib文件写好。这种opencv的配置方式可以理解为是静态加载的动态库。为什么这么说,在目录opencv\build\x86\vc12下中有bin、lib和staticlib三个文件夹(lib和staticlib中的同名的.lib文件大小并不同)。Bin文件夹中.dll称之为动态链接库;lib文件夹中的.lib称之为引入库文件;而staticlib中的.lib称之为静态库。我们只用到前两个文件夹中的.dll和.lib文件便完成了opencv库的动态链接,这种方式opencv在编译过程中是没有被加入目标代码的,只是在运行时被链接。
而dlib的配置方法不同,我们在下载好、解压好的文件夹dlib19.2中找不到任何.dll文件,也就是说我们需要以静态加载静态库的方法完成配置。而我们需要的正是如staticlib文件夹中的.lib文件一样的静态库。因此我们的目标就是得到一个包含了所有dlib函数方法的静态库dlib.lib。
打开dlib的网站http://dlib.net/中的How to compile,我们可以看到其实官方已经给出了两种dlib配置方法。但是内容极其不友好,太不详细,以至于当初的我即便用google翻译完仍然看不懂该怎么做(这些写说明的糟老头子实在坏得很)。
我们详细介绍两种完成dlib的配置的方法。
一、用Cmake编译工具生成dlib.lib文件
1、进入dlib官网,下载dlib库(注意:19.2及以上版本需用vs2015或更高版本),解压。我的目录是D:\dlib-19.1
2、下载cmake工具https://cmake.org/download/,按步骤安装即可。如果你下载的版本是用压缩文件解压的,记得把到bin文件夹的目录添加到环境变量。比如我的是D:\cmake-3.10.1-win64-x64\bin
3、现在我们使用cmake工具生成dlib.lib文件,以下两种选择:
(1) 你只需要在命令提示符窗口运行以下代码就可以了,快而且很帅。
具体操作:首先在dlib-19.1目录下,按下shirt键+点击鼠标右键,选择“在此处打开命令窗口”。
cd examples
mkdir build
cd build
cmake -G "Visual Studio 14 2015 Win64" -T host=x64 ..或者 cmake -G -T host=x64 ..
cmake --build . --config Release
然后,在D:\dlib-19.1\examples\build\dlib\Release下就可以找到你的dlib.lib了。
注意:
1)首先建议一行一行输入
2)第4行第一句是用vs2015,第二句则是有什么用什么(比如我的是vs2013)
3) -T host=x64是使用64位编译器,这样不仅可用内存大而且速度还快,用release版本也是为了加速(debug版的dlib库你不会想用的,不用去尝试)
4)如果你的编译器不支持c11比如vs2013,可能会提示你部分cuda功能不能用
5)如果提示你找不到opencv所以没编译某某,而你明明装了opencv,那就去新建环境变量,变量名:OpenCV_DIR,变 量值:opencv下build目录(我的是D:\opencv\build),重启电脑。
(2)如果用代码不开心,好,那我们用gui来操作。
打开cmake-gui.exe,并指定源码路径与编译后的项目路径,如下图:
点击Configure按钮,配置编译器,如下图:
选好64位编译器,点击Generate。完成后,点击open project,然后就会用你的vs2013或15打开一个叫examples的项目,选择平台x64和release,点击生成解决方案。
然后在目录D:\dlib-19.1\examples\build\dlib_build\Release下就可以找到dlib.lib了。
4、剩下就是像配置opencv一样了
1)包含目录新建D:\dlib-19.1,
2)库目录为dlib.lib所在的路径,你放在哪都行
3) 附加依赖项加上dlib.lib,
4)还有一点必须在你的 项目属性页>C\C++>预处理器>预处理器定义 加入下两项(在全局属性页上加好像不行不知道为什么)
DLIB_PNG_SUPPORT
DLIB_JPEG_SUPPORT
这就完成了。
二、用Dlib源码直接生成dlib.lib文件
1、新建win32控制台程序
2、选择解决方案平台x64和release;
3、打开属性页,修改箭头所指的两项
4、在附加包含目录中添加libjpeg,libpng和zlib三个目录
5、添加DLIB_PNG_SUPPORT、DLIB_JPEG_SUPPORT到预处理定义
6、在新建的项目中
源文件 >添加现有文件,将dlib/all/source.cpp导入
资源文件 >添加现有项,将dlib/external/中zlib,libpng,libjpeg三个目录下的文件都加入到工程中
7、生成解决方案即可得到dlib.lib文件。
8、按照 方法一 中第4步配置即可。
用以下代码测试一下配置是否成功吧!
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_io.h>
#include <iostream>
using namespace dlib;
using namespace std;
// ----------------------------------------------------------------------------------------
int main()
{
frontal_face_detector detector = get_frontal_face_detector();
image_window win;
array2d<unsigned char> img;
load_image(img, "lena.jpg");
std::vector<rectangle> dets = detector(img);
cout << "Number of faces detected: " << dets.size() << endl;
win.clear_overlay();
win.set_image(img);
win.add_overlay(dets, rgb_pixel(255,0,0));
system("pause");
return 0;
}
参考文献
https://blog.csdn.net/wugou2014/article/details/53895327
https://blog.csdn.net/qq_15715657/article/details/81302283
https://blog.csdn.net/what_lei/article/details/78289906
https://blog.csdn.net/xingchenbingbuyu/article/details/53236541