开源项目推荐:Dlib C++ Libraries使用说明与内存泄漏问题解决(★firecat推荐★)

Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具。它广泛应用于工业界和学术界,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。Dlib的开源许可证 允许您在任何应用程序中免费使用它。Dlib有很长的时间,包含很多模块,近几年作者主要关注在机器学习、深度学习、图像处理等模块的开发。

相比于深度学习库而言,dlib内部更多的是封装了很多传统机器学习计算函数,例如回归分析、支撑向量机、聚类,开箱即用,对外提供了C++和python两种接口。在工程实践中,dlib通常和OpenCV结合使用,OpenCV提供图像处理算法,dlib提供机器学习算法。

Dlib是一个包含机器学习算法的C++开源工具包。Dlib可以帮助您创建很多复杂的机器学习方面的软件来帮助解决实际问题。

一、官网

dlib C++ Library

Index of /files 源码下载

dlib C++ Library 编译说明

https://github.com/davisking/dlib

二、教程

win10之dlib安装过程(c++调用库,非python版)_Dawnfox的博客-CSDN博客 win10之dlib安装过程(c++调用库,非python版)

Dlib相关问题_YiYueHuan的博客-CSDN博客 Dlib相关问题

https://jingyan.baidu.com/article/48b37f8d0461831a6464889c.html Dlib机器学习库的安装和使用

三、我个人的VS2015环境配置(Dlib v19.1版本之后必须要VS2015才能编译)

1、使用CMake转换生成VS2015工程。使用默认配置即可,不修改任何参数。

2、VS2015打开Dlib 程。点击dlib属性页。需要注意的地方有两处。

(1)配置属性》c/c++》常规中的附加包含目录,需要添加dlib解压文件dlib目录中external中的libjpeg,libpng,zlib三个文件目录

D:\My Resources\7-cmakeprj\dlib-19.17\dlib\external\libjpeg

D:\My Resources\7-cmakeprj\dlib-19.17\dlib\external\libpng

D:\My Resources\7-cmakeprj\dlib-19.17\dlib\external\zlib

(2)配置属性》c/c++》预处理器中的预处理器定义。需要注意是否存在

DLIB_JPEG_SUPPORT
DLIB_PNG_SUPPORT
DLIB_JPEG_STATIC

(3)Debug和Release分别编译,生成dlibd.lib和dlib.lib

3、VS2015新建新建Win32控制台应用工程,测试dlib库是否可以用。

(1)把Dlib源码包拷贝到Win32 exe工程。

(2)Win32 exe工程,配置属性》c/c++》常规中的附加包含目录

..\dlib-19.17
..\dlib-19.17\dlib\external\libjpeg
..\dlib-19.17\dlib\external\libpng
..\dlib-19.17\dlib\external\zlib

注意,千万不要包含..\dlib-19.17\dlib,否则会报错:

***\dlib\dlib-19.4\dlib\dlib_include_path_tutorial.txt(1): fatal error C1189: #error: “Don’t put the dlib folder in your include path”

(3)Win32 exe工程,配置属性》c/c++》预处理器中的预处理器定义,添加:

DLIB_JPEG_SUPPORT
DLIB_PNG_SUPPORT
DLIB_JPEG_STATIC

(4)Win32 exe工程,配置属性》链接器》常规中的附加库目录。添加dlib.lib所在文件目录

..\Dlib-19.17\Win32

(5)Win32 exe工程,配置属性》链接器》输入的附加依赖项。添加dlibd.lib和dlib.lib。

(6)如果在链接(编译一般不会有问题)的时候出现下面的问题

error LNK2001: 无法解析的外部符号 USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives

那么就需要将 dlib/all/source.cpp 该文件添加到Win32 exe项目中,注意要以添加现有项的方式直接选取该文件。

若没有出现上面的问题,则一般不需要添加该文件。

添加soure.cpp,编译会报错:

在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”

解决办法是:鼠标右键soure.cpp,属性,不使用预编译头

4、如何使用SQLite,官网下载SQLite Download Page,sqlite-amalgamation-3280000.zip

解压,自己新建工程编译成静态库,请参考:VS2015编译SQLite3 动态链接库DLL和静态库Lib_IceCreHaker的博客-CSDN博客

然后把sqlite3.h拷贝到路径\Dlib-19.17\dlib\sqlite即可。

修改\Dlib-19.17\dlib\sqlite.h头文件

#include <sqlite3.h>//原来

#include "sqlite3.h" //firecat修改后

5、把\dlib-19.17\tools\visual_studio_natvis\dlib.natvis拷贝到

C:\Users\<用户名>\Documents\Visual Studio 2015\Visualizers

四、MFC建立项目,发现内存泄漏

使用windbg可以检测到:

1b55c8d SmartDispenser!operator new+0x0000000d
1826e7e SmartDispenser!dlib::threads_kernel_shared::thread_pool+0x0000008e
1539eb0 SmartDispenser!dlib::unregister_thread_end_handler<dlib::logger::global_data>+0x00000040
15c6e5a SmartDispenser!dlib::logger::global_data::~global_data+0x0000005a
16557cb SmartDispenser!dlib::logger::global_data::`scalar deleting destructor'+0x0000002b
15c8b51 SmartDispenser!dlib::logger::~logger+0x000000e1
1bf6968 SmartDispenser!dlib::logger_helper_stuff::`dynamic atexit destructor for 'log''+0x00000028

我提交的问题:https://github.com/davisking/dlib/issues/1784

解决方法:https://github.com/davisking/dlib/blob/master/dlib/threads/threads_kernel_shared.cpp#L78

说白了就是Dlib-19.17\dlib\threads\threads_kernel_shared.cpp,把变量值修改一下:

//do_not_ever_destruct = true;
do_not_ever_destruct = false; //firecat,Detected memory leaks

五、Dlib主要功能

主要特点

---

C++库大全

https://github.com/fffaraz/awesome-cpp

C++常用机器学习库

https://www.cnblogs.com/oliver2022/p/16609478.html

mlpack

mlpack - Home

https://github.com/mlpack/mlpack 

mlpack 是一个 C++ 的机器学习库,它重点在于其扩展性、高速性和易用性。它的目的是让新用户通过简单、一致的 API 使用机器学习,同时为专业用户提供 C++ 的高性能和最大灵活性。他的性能超出大量类似的机器学习库,如 WEKA、Shogun、MATLAB、mlpy 及 sklearn,这一对比工作可以参考文献 [1]。

mlpack 含有丰富的文档和教程,可以参考项目主页。教程中包含的算法有:近邻搜索(NeighborSearch)、范围搜索(RangeSearch)、线性回归(LinearRegression)、欧几里德最小生成树(The Euclidean Minimum Spanning Tree)、K - 均值(K-Means)、FastMKS(Fast max-kernel search)等。

mlpack 提供了大量的类或 API 供程序调用,同时还提供了很多可执行程序供不懂 C++ 的用户使用。这些可执行文件包括:allkfn, allknn, emst, gmm, hmm_train, hmm_loglik, hmm_viterbi, hmm_generate, kernel_pca, kmeans, lars, linear_regression, local_coordinate_coding, mvu, nbc, nca, pca, radical, sparse_coding。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值