dlib库学习之一

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代码

  

 1 #include <iostream>
 2
 3 #include <dlib/bridge.h>
 4 #include <dlib/type_safe_union.h>
 5 #include <dlib/timer.h>
 6
 7 using namespace std;
 8 using namespace dlib;
 9
10 //管道
11 dlib::pipe<string>  out(4),in(4);
12
13
14 //定时器类
15 class timer_task
16 {
17   public:
18        //定时执行的函数
19        void timer_send()
20        {
21            string msg("this client msg");
22            out.enqueue(msg);
23
24            std::string re;
25
26            in.dequeue(re);
27            cout<<"client receive:"<<re<<endl;
28
29        }
30
31 };
32
33
34
35
36 int main()
37 {
38
39     //这里应该是一个链接tcp server  ,因为我开两个client只有一个能收到信息,关闭一个后另一个就能收到
40     bridge b1(connect_to_ip_and_port("127.0.0.1", 12345), transmit(out),receive(in));
41
42
43
44     timer_task task;
45
46     //这个timer应该不和main在一个线程,应为如果不加下面的 dlib::sleep  程序会直接退出
47     timer<timer_task> t(task,&timer_task::timer_send);
48
49     t.set_delay_time(1000);
50
51     t.start();
52
53
54     dlib::sleep(10000000);
55
56     return 0;
57 }

server

 1 #include <iostream>
 2
 3 #include <dlib/bridge.h>
 4 #include <dlib/type_safe_union.h>
 5 #include <dlib/timer.h>
 6
 7 using namespace std;
 8 using namespace dlib;
 9
10 dlib::pipe<string>  in(4),out(4);
11
12
13
14 class timer_task
15 {
16   public:
17        void timer_send()
18        {
19            string msg;
20            in.dequeue(msg);
21            cout<<"service receive:"<<msg<<endl;
22
23
24            std::string value = "this is server send";
25            out.enqueue(value);
26
27        }
28
29 };
30
31
32
33 int main()
34 {
35     cout << "Hello World!" << endl;
36
37     bridge b1(listen_on_port(12345),transmit(out), receive(in));
38
39     timer_task task;
40
41     timer<timer_task> t(task,&timer_task::timer_send);
42
43     t.set_delay_time(1000);
44
45     t.start();
46     dlib::sleep(10000000);
47
48     return 0;
49 }
时间: 2024-10-12 17:26:24

dlib库学习之一的相关文章

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

0. 引言 介绍 Windows 10 64位 系统下,利用 Anaconda 开发环境,在 Python 中安装 Dlib库 : windows 下 dlib 的安装十分不友好,所以在这里分享下安装过程: Windows10 + Anaconda + pip + Dlib : (借助 Anaconda 的话,不需要自己 build 和 make 源码, cmake 和 boost 这里不需要,操作友好很多) 1. Dlib的简介(官网:http://dlib.net/) Dlib 是一个机器学

【python标准库学习】thread,threading(二)多线程同步

继上一篇介绍了python的多线程和基本用法.也说到了python中多线程中的同步锁,这篇就来看看python中的多线程同步问题. 有时候很多个线程同时对一个资源进行修改,这个时候就容易发生错误,看看这个最简单的程序: import thread, time count = 0 def addCount(): global count for i in range(100000): count += 1 for i in range(10): thread.start_new_thread(ad

【python标准库学习】thread,threading(一)多线程的介绍和使用

在单个程序中我们经常用多线程来处理不同的工作,尤其是有的工作需要等,那么我们会新建一个线程去等然后执行某些操作,当做完事后线程退出被回收.当一个程序运行时,就会有一个进程被系统所创建,同时也会有一个线程运行,这个线程就是主线程main,在主线程中所创建的新的线程都是子线程,子线程通常都是做一些辅助的事.python中提供了thread和threading两个模块来支持多线程. python中使用线程有两种方式,第一种是用thread模块的start_new_thread函数,另一种是用threa

0806------Linux网络编程----------Echo 网络库 学习笔记

1.Echo网络库的编写 1.1 Echo网络库1.0 1.1.1 Echo网络库 1.0 框架分析 a)class InetAddress: 主要用来定义一个struct sockaddr_in 结构(用自定义端口号初始化),并提供获取这个结构体成员如IP.Port等的接口: b)class Socket : 主要用来把一个普通的 sockfd 变为 listenfd(这里用一个sockfd初始化对象),提供bind .listen.accept 等接口. c)class TcpConnect

c++ boost库学习三:实用工具

noncopyable 大家都知道定义一个空类的时候,它实际包含了构造函数,拷贝构造函数,赋值操作符和析构函数等. 这样就很容易产生一个问题,就是当用户调用A a(“^_^") 或者A c="^_^" 时会发生一些意想不到的行为,所以很多时候我们需要禁用这样的用法. 一种方法就是把拷贝构造函数和赋值操作符显式的定义为private,但是这样需要很多代码. 于是boost库为大家提供了一个简单的方法:只需要将类继承于noncopyable就可以了. #include "

C++标准模板库学习。。。

作为C++标准库相当重要的一部分,STL库提供一系列组件操作.它主要可以分为容器.迭代器.基本算法.函数对象以及内存分配器和配接器六个部分.整个STL库的代码都采用模板函数以及模板类的方式实现,具有高度的通用性.对于传统的应用程序来讲,模板库支持并且倡导一种新的编程风格,即称为泛型编程思想,以通用的模板方式来编写应用程序中的数据结构与算法. 16.1  STL常见容器 C++标准STL库中封装实现了常见数据结构,并以容器的方式提供给用户使用.STL容器主要包含vector向量.deque队列.l

python第三方库学习之xlrd读取Excel文件

因为经常会涉及到从Excel表中导数据,所以就学习了python的xlrd来读取excel中的数据. 1.xlrd的安装 xlrd是python的第三方库,所以是需要自己安装的,可以在python的官网http://pypi.python.org/pypi/xlrd下载该模块来安装,也可以通过其他手段,比如easy_install或者pip啥的,我已经安装好pip所以就用最懒的方式来安装了pip install xlrd来安装. 2.分析excel文件的层级对象 要读取excel的数据,就要了解

2 C++ ACE 面向对象跨平台网络库学习

2   C++ ACE  面向对象跨平台网络库学习  ACE I/O相关对象 阻塞式 TCP连接Linux Kernel网站服务器的443端口 非阻塞模式 TCP连接百度服务器 设置 TCP连接超时: ACE 客户端 TCP模式.请求HTTP 一个简单的 TCP HTTP server HTTP server 代码 创建网页文件 浏览器测试访问结果 ACE UDP通信单播测试: UDP 单播 服务器端: UDP 单播 客户端: ACE UDP 多播实验: UDP 多播 发送端程序: UDP 多播

python标准库学习-random

想想这么多年,也是没有好好梳理一下自己的知识体系,以至于总是会有书到用时方恨少的遗憾. 最近既然有学习的动力,干脆就趁着这份工作不是特别忙的机会,写一点东西吧,也理理自己的逻辑思维能力. python有哪些库? 这个问题呢可以参照http://blog.csdn.net/python_wangjunji/article/details/8689297这篇博文来看. 当然咯,首先要先推荐一个可厉害的学习程序:Dash.学编程必备查询库,各种语言,专治"我要看源码病". 那第一篇呢,我就先