百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

[常用工具] dlib编译调用指南

liuian 2025-02-06 15:39 37 浏览


dlib是一个C++工具包(dLIB中也有Python接口,但是主要编程语言为C++),包含绝大多数常用的机器学习算法,许多图像处理算法和深度学习算法,被工业界和学术界广泛应用于机器人、嵌入式设备、移动电话和大型高性能计算环境等领域。dlib的开源许可允许您在任何应用程序中免费使用它。在工程实践中,dlib通常和OpenCV结合使用,OpenCV提供图像处理算法,dlib提供机器学习算法。对于从事计算机视觉行业的人,非常推荐学习使用dlib。本文主要讲述dlib在Windows(win10)和linux(ubuntu18.04)下面向C++的编译安装调用。dlib具体介绍见其官网?dlib官网??。

文章目录

  • 1 资源
  • 2 Windows下C++编译安装调用dlib
  • 2.1 编译
  • 2.2 配置与使用
  • 3 Ubuntu下C++编译安装调用dlib
  • 3.1 编译
  • 3.2 配置与使用
  • 4 Python安装调用dlib
  • 5 参考

1 资源

在dlib的github仓库下载对应版本文件。链接地址为:??dlib???。此外,在使用dlib中需要使用dlib提供的模型,下载地址见??dlib-models???。如果网速太慢,可以看看gitee备份。地址为:??dlib-gitee???和??dlib-models-gitee??。

本文判断dlib是否成功编译的示例代码为dlib\examples目录下的3d_point_cloud_ex.cpp。调用该示例代码后会可视化一个简单的3维点云数据。
代码如下:

// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
/*

    This is an example illustrating the use of the perspective_window tool
    in the dlib C++ Library.  It is a simple tool for displaying 3D point 
    clouds on the screen.

*/

#include 
#include 
#include 

using namespace dlib;
using namespace std;

// ----------------------------------------------------------------------------------------

int main()
{
    // Let's make a point cloud that looks like a 3D spiral.
    std::vector points;
    dlib::rand rnd;
    for (double i = 0; i < 20; i+=0.001)
    {
        // Get a point on a spiral
        dlib::vector val(sin(i),cos(i),i/4);

        // Now add some random noise to it
        dlib::vector temp(rnd.get_random_gaussian(),
                                  rnd.get_random_gaussian(),
                                  rnd.get_random_gaussian());
        val += temp/20;

        // Pick a color based on how far we are along the spiral
        rgb_pixel color = colormap_jet(i,0,20);

        // And add the point to the list of points we will display
        points.push_back(perspective_window::overlay_dot(val, color));
    }

    // Now finally display the point cloud.
    perspective_window win;
    win.set_title("perspective_window 3D point cloud");
    win.add_overlay(points);
    win.wait_until_closed();
}

//  ----------------------------------------------------------------------------

2 Windows下C++编译安装调用dlib

Windows下的编译使用很简单,不需要其他的额外安装库,直接拉取dlib的仓库就行了。本文将dlib仓库放在D:\packages\dlib路径下,然后通过cmake和vs2017编译使用dlib。这一部分参考文章【C++】VS2019+Dlib安装及整合详细步骤。

2.1 编译

step1

在D:\packages\dlib路径下创建build文件夹和install文件夹,build文件夹用于存放相关编译数据,install保存最后需要调用的生成文件。文件结构如下图所示:


step2

打开cmake-gui,配置dlib库。cmake安装地址为:??cmake??。打开cmake-gui后设置源代码目录地址和生成文件地址,点击configure。如图所示:


然后配置编译器,选择对应的编译器版本,再选择编译平台版本x64。最后点击finish,cmake将会自动编译文件。

在编译过程会出现找不到cuda的情况,忽视就行了。然后注意将指定的安装目录CMAKE_INSTALL_PREFIX这一项改为D:\packages\dlib\install。然后再点击configure,如果没有标红,点击generate。

step3

生成相关文件,generate成功后打开OpenProject即可,这样就会打开vs2017。 如下图所示:


打开后的vs2017界面如下图所示,确定编译平台为debug/x64,然后点击生成-生成解决方法即可,如下图所示。这样的好处是知道哪些模块生成失败。如果有生成译错误,检查即可。这一过程约3分钟,不同机器时间不一样。


生成成功后,如下图所示。可以有生成跳过,但是不能有生成失败。

如果生成后没有失败的,选择解决方案-INSTALL-仅用于项目-仅生成INSTALL,如下图所示:

此外以上操作只能生成dlib Debug版本。Release版本需要修改配置平台,重复以上操作。如下图所示:

最后如果install文件夹中有include文件夹和lib文件夹,表明编译过程成功。如下图所示:

在windows平台下,某些情况下dlib会使用libjpeg,libpng模块,可能会出现链接libjpeg错误的情况。如果你使用的是anaconda,dlib会自动链接anconda的libjpeg,libpng模块。这些模块是32位的,你只能用x86的dlib版本,否则出错。如果是想用x64平台,需要自己编译第三方模块的x64版本,比如libpng,libjpeg,zlib。github搜索这些模块,然后编译后。用visual studio的命令行开发工具,进入build目录,自行指定libjpeg等链接文件,再进行编译。其中dlib要链接的第三方库自行指定目录(目前看来这一种解决办法),具体命令如下:

# Visual Studio 15 2017指vs2017,vs2015用Visual Studio 14 2015,vs2019用Visual Studio 16 2019
# -DCMAKE_INSTALL_PREFIX=../instal 编译文件安装目录
cmake -G "Visual Studio 15 2017" -DJPEG_INCLUDE_DIR=..\dlib\external\libjpeg -DJPEG_LIBRARY=..\dlib\external\jpeg.lib -DPNG_PNG_INCLUDE_DIR=..\dlib\external\libpng -DPNG_LIBRARY_RELEASE=..\dlib\external\libpng.lib -DZLIB_INCLUDE_DIR=..\dlib\external\zlib -DZLIB_LIBRARY_RELEASE=..\dlib\external\z.lib -DDLIB_GIF_SUPPORT=OFF -DCMAKE_INSTALL_PREFIX=../install -DCMAKE_GENERATOR_PLATFORM=x64 ..


# 编译debug版本
cmake --build . --target INSTALL

# 编译release版本
cmake --build . --config Release --target INSTALL

2.2 配置与使用

新建vs2017项目,然后选择属性管理器,新建属性列表dlib如下图所示。这样该dlib属性列表以后可以重复导入使用,不需要每次新建工程都配置。


修改Release|X64模式下的dlib属性,修改VC++目录下的可执行目录,库目录。如下图所示:

包含目录设置如下,添加头文件:

D:\packages\dlib\install\include

库目录设置如下:

D:\packages\dlib\install\lib

然后修改链接器-输入-附加依赖项,如下图所示:

附加依赖项设置如下。注意不同版本dlib编译生成的lib不一样,注意区分,如果是debug就调用相应的debug版本,都在install\lib目录下。

dlib19.22.99_release_64bit_msvc1916.lib

然后调用本文在第一节提到的示例代码3d_point_cloud_ex.cpp文件,结果如下图所示,就是一个展示3维点云的代码,可以拖动或放大缩小图形。

3 Ubuntu下C++编译安装调用dlib

3.1 编译

ubuntu下编译使用dlib比windows下稍微复杂,因为ubuntu缺少一些dlib所需要的库,有时会出现莫名其妙的错误,一般来说都是缺少图形显示库,比如linux下dlib需要x11图像化界面(windows不需要,其他系统图像化界面可能不一样),所以先安装x11。如果不安装可能会出现X11相关错误。这一部分参考文章??ubuntu下使用 dlib??和??cmake-cant-find-x11??

sudo apt-get install libx11-dev

然后进入dlib根目录,输入以下命令:

mkdir build; cd build; cmake … -DUSE_AVX_INSTRUCTIONS=1; make -j12

上述命令会编译AVX,来加速CPU运行,如果出现错误使用以下命令编译:

mkdir build; cd build; cmake …; make -j12

3.2 配置与使用

新建一个文件夹dlib-test,将3d_point_cloud_ex.cpp复制到该文件夹。进入该文件夹,新建CMakeList.txt文件,CMakeList.txt内容如下。注意CMake文件链接dlib库的路径地址

cmake_minimum_required(VERSION 2.8.12)
# 工程名
project(dlib_test)

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -DDLIB_JPEG_SUPPORT")
 
IF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything")
ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
ENDIF()

# 包含OpenCV
find_package(OpenCV REQUIRED)
if (OpenCV_FOUND)
   include_directories(${OpenCV_INCLUDE_DIRS})
   message("OpenCV found")
endif()

# 包含X11
find_package(X11 REQUIRED)
if (X11_FOUND)
   include_directories(${X11_INCLUDE_DIR})
   message("X11 found")
endif()

#  添加dlib
include_directories(/home/{yourpath}/dlib)
link_directories(/home/{yourpath}/dlib/build/dlib/)

# 添加代码
add_executable(dlib_test 3d_point_cloud_ex.cpp)
# 链接库
# libdlib.a - lpthread - lX11分别表示链接dlib,多线程,X11
target_link_libraries(dlib_test ${OpenCV_INCLUDE_LIBS} ${X11_LIBRARIES} libdlib.a -lpthread -lX11)

然后输入以下命令,即可编译运行示例代码:

mkdir build; cd build; cmake …; make -j12; ./dlib_test

如果出现第二节的三维点云图形,表明dlib安装成功。

4 Python安装调用dlib

通常直接用pip install dlib会出错,所以需要安装一系列的库,主要是cmake、Boost。具体如下:
windows:

pip install cmake
pip install boost
pip install dlib

如果发现编译失败,看看??python–3.8安装dlib??,直接通过whl包安装dlib也行

linux:

sudo apt-get install libx11-dev
sudo apt-get install libboost-all-dev
sudo apt-get install cmake
python3 -m pip install dlib

安装成功后,在python环境import dlib即表明安装成功,当然也可以编译安装,具体步骤见官方仓库文档。

5 参考

  • ??dlib官网??
  • ??dlib??
  • ??dlib-models??
  • ??dlib-gitee??
  • ??dlib-models-gitee??
  • 【C++】VS2019+Dlib安装及整合详细步骤
  • ubuntu下使用 dlib
  • ??cmake-cant-find-x11??

相关推荐

windows7ultimate下载(windows7 ultimate)

要下载澪Ultimate启动器,您可以按照以下步骤进行操作:1.打开您的网络浏览器,访问澪Ultimate启动器的官方网站或相关下载页面。2.在网站上找到适用于您的操作系统的下载选项。3.点击下...

苹果首次激活时间查询(iphone激活查询官网入口)

登陆苹果官网输入手机的序列号,查看手机的保修日期就可以了,一般保修到期的前一年就是手机的开机激活时间。查看第一次开机激活时间操作方法:1、首先打开设置2、点击通用3、点击关于本机...

u盘启动哪个好用(u盘启动盘哪个最好)

大白菜超级U盘启动盘制作工具,打造你真正的万能U盘!安装后你在U盘里是看到什么文件的,是隐藏分区,这样你放存别的东西时也不会搞乱了。大白菜超级U盘启动盘制作工具,是纯傻瓜式制作U盘启动盘功能的超级万能...

腾达路由器高级设置在哪里(腾达路由器怎么设置安全性高)

方法/步骤分步阅读1/11打开新购的腾达路由器,查看路由器背面的默认IP和管理员密码。小提示:密码为:admin默认管理IP:192.168.0.12/11接好腾达路由器和插上电源通电,等待2-3分钟...

dell新版bios设置恢复(戴尔bios恢复设置)

1)、开机后,在看到DELL图标时,按3下F2,进入BIOS。(灰色界面)2)、分别按键盘上的CapsLock,ScrollLock,以及NumLock三个键,使键盘上相应的三个指示灯点亮。3)、...

重装win7系统需要多少钱(重装一个win7系统要多少钱)

1、win7系统装完后需要占用C盘空间10-15GB,如果把常用软件也安装到C盘,大小超过20+。  2、在分区的时候根据硬盘大小,如果硬盘相对较小,一般建议设置50G,最低不能低于30G。因...

性价比笔记本推荐2025(性价比高的笔记本电脑2021年)

2023年联想推出的一款性价比高的笔记本电脑是联想Yoga7Carbon。它是一款轻薄便携的2合1笔记本,采用了高强度碳纤维材质打造,具有出色的抗撞击性和高端外观。配备了英特尔第11代酷睿处理器、...

华为和联想平板哪个好(华为平板和联想平板对比)

联想,是典型的组装厂,CPU不能造,屏幕不能造.而华为,拥有核心技术,大量有价值专利的,比如说:华为mediapad平板电脑小巧轻薄,7英寸便携机身让她成为出行必备,新推出的粉红炫彩版更集美貌与智慧于...

电脑桌面壁纸原始经典(电脑桌面壁纸原图下载)
  • 电脑桌面壁纸原始经典(电脑桌面壁纸原图下载)
  • 电脑桌面壁纸原始经典(电脑桌面壁纸原图下载)
  • 电脑桌面壁纸原始经典(电脑桌面壁纸原图下载)
  • 电脑桌面壁纸原始经典(电脑桌面壁纸原图下载)
win10休眠文件有必要删除吗(win10休眠文件有必要删除吗)

休眠文件的功能是保存当前内存中的所有数据至硬盘后关闭电源,电脑再次开启时还能够很快恢复到关机前的状态。通过保留存储,将留出一些磁盘空间以供更新、应用程序、临时文件和系统缓存使用。目标是通过确保关键的操...

win10内核版本升级(win10 内核版本)

手机系统内核是Linux,linux内核是靠升级系统版本来升级内核的。升级方法:1、使用手机自带的系统更新功能:在安卓手机的设置--关于手机中,可以看到当前安卓手机的系统版本,另外这里也有自动检测更新...

电脑说windows未能启动(开机说windows未能启动)

关于这个问题,电脑Windows未能启动可能有多种原因,以下是一些常见的原因和解决方法:1.硬件故障:可能是硬盘故障,内存不足或显卡故障等。需要检查硬件情况并修复或更换。2.操作系统损坏:可能是系...

路由器和猫图片(路由器和猫图片怎么连接)

因为光猫是光电转换设备,没有光猫不能把光信号转换成网络宽带信号,而路由器是将宽带信号转换成更容易连接使用的网络。两个配合使用还可以增加无线网络,有限网络路数。相当于扩大了宽带的使用范围,宽带上网比较麻...

安装惠普打印机驱动程序(怎么免费安装惠普打印机驱动程序)

安装具体操作步骤如下:一、下载驱动程序进行安装。(安装驱动程序前,不要连接打印机USB连接线。)二、在“许可协议”窗口中,选择“我接受许可协议的条款”选项,然后点击“下一步”按钮。三、驱动程序开始...

excel打不开了不显示内容(excel完全打不开)
  • excel打不开了不显示内容(excel完全打不开)
  • excel打不开了不显示内容(excel完全打不开)
  • excel打不开了不显示内容(excel完全打不开)
  • excel打不开了不显示内容(excel完全打不开)