[常用工具] dlib编译调用指南 dsdt编译
liebian365 2024-11-09 13:41 23 浏览 0 评论
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 <dlib/gui_widgets.h>
#include <dlib/image_transforms.h>
#include <cmath>
using namespace dlib;
using namespace std;
// ----------------------------------------------------------------------------------------
int main()
{
// Let's make a point cloud that looks like a 3D spiral.
std::vector<perspective_window::overlay_dot> points;
dlib::rand rnd;
for (double i = 0; i < 20; i+=0.001)
{
// Get a point on a spiral
dlib::vector<double> val(sin(i),cos(i),i/4);
// Now add some random noise to it
dlib::vector<double> 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??
相关推荐
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
-
明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
-
首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
-
齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...
- Qt界面——搭配QCustomPlot(qt platform)
-
这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
-
老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
-
用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
-
前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...
- 掌握Visual Studio项目配置【基础篇】
-
1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
-
随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...
- Visual Studio Community 2022(VS2022)安装图文方法
-
直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...
- Qt添加MSVC构建套件的方法(qt添加c++11)
-
前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...
- Qt为什么站稳c++GUI的top1(qt c)
-
为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...
- qt开发IDE应该选择VS还是qt creator
-
如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...
- Qt 5.14.2超详细安装教程,不会来打我
-
Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...
- Cygwin配置与使用(四)——VI字体和颜色的配置
-
简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
- Qt界面——搭配QCustomPlot(qt platform)
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
- 掌握Visual Studio项目配置【基础篇】
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
- Visual Studio Community 2022(VS2022)安装图文方法
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)