dlib库学习之一

1、介绍

跨平台 C++ 通用库 Dlib 发布 ,带来了一些新特性,包括概率 CKY 解析器,使用批量同步并行计算模型来创建应用的工具,新增两个聚合算法:中国低语 (Chinese Whispers) 和纽曼的模块化聚类。

Dlib是一个使用现代C++技术编写的跨平台的通用库,遵守Boost Software licence.

主要特点如下:

1.完善的文档:每个类每个函数都有详细的文档,并且提供了大量的示例代码,如果你发现文档描述不清晰或者没有文档,告诉作者,作者会立刻添加。

2.可移植代码:代码符合ISO C++标准,不需要第三方库支持,支持win32、Linux、Mac OS X、Solaris、HPUX、BSDs 和 POSIX 系统

3.线程支持:提供简单的可移植的线程API

4.网络支持:提供简单的可移植的Socket API和一个简单的Http服务器

5.图形用户界面:提供线程安全的GUI API

6.数值算法:矩阵、大整数、随机数运算等

7.机器学习算法:

8.图形模型算法:

9.图像处理:支持读写Windows BMP文件,不同类型色彩转换

10.数据压缩和完整性算法:CRC32、Md5、不同形式的PPM算法

11.测试:线程安全的日志类和模块化的单元测试框架以及各种测试assert支持

12.一般工具:XML解析、内存管理、类型安全的big/little endian转换、序列化支持和容器类

2.安装使用

  这个和boost使用方法有点像,但小得多,只要下载源码包就可以使用,不需要其他的三方库,帮助文档说了只要添加头文件引用就可以,如果报链接错误需要把all/source.cpp包含在项目中,这个cpp也只是包含一些头文件,假如不需要GUI功能就可以在这个定义宏

DLIB_NO_GUI_SUPPORT  这样可以减小执行文件大小 ,其他的一样

How to compile

To use this library all you have to do is extract it somewhere, make sure the folder containing the dlib folder is in your include path, and finally add dlib/all/source.cpp to your project. It is worth noting that most of dlib is "header-only" which means that, in many cases, you don't actually have to build dlib/all/source.cpp into your application. So if you don't get linker errors when you exclude dlib/all/source.cpp from your project then you don't need it.

3.小试牛刀

这个例子介绍如何使用dlib ,定时器和client、server  pipe信息

将dlib文件夹包含在项目的LINCLUDEPATH中

这里用到了socket和线程所以需要包含 dlib/all/source.cpp

我是用mingw 编译的所以需要指定要链接的系统库,这样编译就不会报错了

SOURCES += main.cpp \
D:/Libs/dlib-18.10/dlib/all/source.cpp LIBS += -lwsock32 -lws2_32 -limm32 -luser32 -lgdi32 -lcomctl32 INCLUDEPATH += D:/Libs/dlib-18.10

client代码

  

 #include <iostream>

 #include <dlib/bridge.h>
#include <dlib/type_safe_union.h>
#include <dlib/timer.h> using namespace std;
using namespace dlib; //管道
dlib::pipe<string> out(),in(); //定时器类
class timer_task
{
public:
//定时执行的函数
void timer_send()
{
string msg("this client msg");
out.enqueue(msg); std::string re; in.dequeue(re);
cout<<"client receive:"<<re<<endl; } }; int main()
{ //这里应该是一个链接tcp server ,因为我开两个client只有一个能收到信息,关闭一个后另一个就能收到
bridge b1(connect_to_ip_and_port("127.0.0.1", ), transmit(out),receive(in)); timer_task task; //这个timer应该不和main在一个线程,应为如果不加下面的 dlib::sleep 程序会直接退出
timer<timer_task> t(task,&timer_task::timer_send); t.set_delay_time(); t.start(); dlib::sleep(); return ;
}

server

 #include <iostream>

 #include <dlib/bridge.h>
#include <dlib/type_safe_union.h>
#include <dlib/timer.h> using namespace std;
using namespace dlib; dlib::pipe<string> in(),out(); class timer_task
{
public:
void timer_send()
{
string msg;
in.dequeue(msg);
cout<<"service receive:"<<msg<<endl; std::string value = "this is server send";
out.enqueue(value); } }; int main()
{
cout << "Hello World!" << endl; bridge b1(listen_on_port(),transmit(out), receive(in)); timer_task task; timer<timer_task> t(task,&timer_task::timer_send); t.set_delay_time(); t.start();
dlib::sleep(); return ;
}

dlib库学习之一的更多相关文章

  1. python 操作exls学习之路1-openpyxl库学习

    这篇要讲到的就是如何利用Python与openpyxl结合来处理xlsx表格数据.Python处理表格的库有很多,这里的openpyxl就是其中之一,但是它是处理excel2007/2010的格式,也 ...

  2. dlib库使用

    最近的工作中用到了dlib这个库,该库是一个机器学习的开源库,使用起来很方便,直接包含头文件即可,并且不依赖于其他库(自带图像编解码库源码).不过由于是开源的,所以bug多少有一些,我在example ...

  3. Windows7 x64 编译Dlib库

    最近用到Dlib库,需要先编译. 本文利用 cmake + Sublime Text 2 + MinGW实现编译. 1. 下载dlib源码[dlib18.17]http://pan.baidu.com ...

  4. Windows系统下 Python(Anaconda)的 Dlib库 的安装

    0.引言 介绍 Windows 10 64位系统下,利用 Anaconda 开发环境,在python中安装 Dlib库 : windows下dlib的安装十分不友好,所以在这里分享下安装过程: win ...

  5. python 中 dlib库的安装

    安装 dlib 库的时候需要用到 CMake 进行本地编译,而Cmake又是基于Visual Studio运行的,我在装这个库的时候,各种找不到教程,就想着分享一下自己的经验. 32位 python3 ...

  6. python_库学习_01

    一.python的库学习之 财经数据接口包 1.安装ThShare 直接pip install tushare 可能会出现缺少依赖库的情况,依次安装,大概有lxml,pandas,bs4,reques ...

  7. numpy, matplotlib库学习笔记

    Numpy库学习笔记: 1.array()   创建数组或者转化数组 例如,把列表转化为数组 >>>Np.array([1,2,3,4,5]) Array([1,2,3,4,5]) ...

  8. python爬虫解析库学习

    一.xpath库使用: 1.基本规则: 2.将文件转为HTML对象: html = etree.parse('./test.html', etree.HTMLParser()) result = et ...

  9. 【mmall】Guava库学习Collections

    参考链接 Guava库学习:学习Collections(三)Sets

随机推荐

  1. Q_D宏

    Qt 源码中有很多Q_Q和Q_D宏,使用这些宏的地方总会看到有q指针和d指针,查了查KDE文档,大体搞清了其中的机理,欧也!Qt的这些私有数据访问策略还是挺值得借鉴.下面就简单总结一下. 访问器 , ...

  2. 动态规划以及在leetcode中的应用

    之前只是知道动态规划是通过组合子问题来解决原问题的,但是如何分析,如何应用一直都是一头雾水.最近在leetcode中发现有好几道题都可以用动态规划方法进行解决,就此做下笔录. 动态规划:应用于子问题重 ...

  3. Ubuntu_16.04 配置 Apache Rwrite URL 重写

    Ubuntu Apache配置Rwrite URL重写 0. apache目录

  4. Hibernate学习之延迟加载

    转自:http://www.cnblogs.com/xiaoluo501395377/p/3371776.html 在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通 ...

  5. Java判断字符串是中文还是英文

    在做开发的时候我们经常需要用到根据某个字符或者字符串来判断其是中文还是英文,从而做相应的处理,其实不难,大多数人们都是用到正则来判断的,下面小贝就给大家分享一下Java判断字符串是中文还是英文 推荐文 ...

  6. SQL Server 取前一天的0点和23点59分59秒

    DECLARE @startDate1 DATE; DECLARE @startDate DATETIME; ,@startDate1); ,CONVERT(DATETIME,@startDate1) ...

  7. pwntools安装使用方法

    pwntools是一个CTF框架和漏洞利用开发库,用Python开发,由rapid设计,旨在让使用者简单快速的编写exploit. pwntools对Ubuntu 12.04和14.04的支持最好,但 ...

  8. shell学习-读取输入

    功能:读取输入,打印:如果长度小于MINLEN,那么输出空格. #!/bin/bash # paragraph-space.sh # Insert a blank line between parag ...

  9. Protel99se教程六:创建原理图元件库

    在我们平时使用protel99se进行电路以及PCB设计的时候,系统自带的元件库和PCB封装库,只有一小部分,大部份元件的元件库以及封装库,我们都需要自己制作,使用protel99se,我们可以很容易 ...

  10. 微软的MCE(Media Center Edition 媒体中心)标准

    Windows VISTA和Windows 7操作系统上,电脑遥控器01RN的强劲功能更是发挥得淋漓尽致,不仅可以单凭遥控器一键即实现“听歌.看碟.播放控制.曲目选择.照片欣赏.幻灯片播放.网络电影电 ...