试玩dlib人脸识别

一、Ubuntu端试玩dlib

源码下载:

wget http://dlib.net/files/dlib-19.18.tar.bz2

使用cmake进行编译。

1.1 编译gcc版本dlib

  1. unzip dlib-19.18.zip
  2. cd dlib-19.18/
  3. mkdir build
  4. cd build
  5. cmake ..
  6. make -j 8 release=1

编译成功

[100%] Linking CXX static library libdlib.a
[100%] Built target dlib

1.2 编译example

  1. cd examples
  2. mkdir build
  3. cd build
  4. cmake ..
  5. cmake --build . --config Release

后续编译只需要修改代码,然后直接make -j 8
但是感觉速度也不是很快,链接比较耗时间。

1.3 微软ResNet模型与特征提取模型下载

下载地址:

wget http://dlib.net/files/shape_predictor_5_face_landmarks.dat.bz2

wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

wget http://dlib.net/files/dlib_face_recognition_resnet_model_v1.dat.bz2

bz2后缀文件解压命令

bzip2 -d shape_predictor_5_face_landmarks.dat.bz2

参考 https://blog.csdn.net/changkaibo/article/details/80091816

1.4 简单实例试玩

dnn_face_recognition_ex 人脸检测还支持人脸对齐。

image

face_landmark_detection_ex


image

二、cmake交叉编译dlib

终端命令行进入build目录后,执行cmake-gui进行配置。

2.1 cmake-gui配置

image

设置好源码路径与交叉编译器路径后点击configure、generate。最后关闭cmake-gui,执行make -j 8即可编译。

出现错误:

Using CMake version: 3.5.1
Compiling dlib version: 19.18.0
CMake Error at dlib/cmake_utils/set_compiler_specific_options.cmake:50 (message):
  C++11 is required to use dlib, but the version of GCC you are using is too
  old and doesn't support C++11.  You need GCC 4.8 or newer.
Call Stack (most recent call first):
  dlib/CMakeLists.txt:30 (include)

原先的交叉编译器版本:
arm-hisiv100nptl-linux-gcc (Hisilicon_v100(gcc4.4-290+uclibc_0.9.32.1+eabi+linuxpthread)) 4.4.1 不支持c++11。

解决办法:

使用高版本编译器
arm-hisiv300-linux-gcc (Hisilicon_v300) 4.8.3 20131202 (prerelease)
Copyright (C) 2013 Free Software Foundation, Inc.

2.2 交叉编译dlib静态库出现错误

错误1:

/home/workspace/project/EC20/my_git_bak/TestRepo/cwr/face/demo/arm_cross_dlib/dlib-19.18/dlib/bigint/../serialize.h:1635:25: error: ‘to_string’ is not a member of ‘std’
                         std::to_string(objects_read+1) + "th object from the file " + filename +
                         ^
make[2]: *** [dlib/CMakeFiles/dlib.dir/bigint/bigint_kernel_1.cpp.obj] Error 1
make[1]: *** [dlib/CMakeFiles/dlib.dir/all] Error 2

解决办法:

在dlib根目录CMakeLists.txt 添加add_compile_options(-D_GLIBCXX_USE_C99)

image

错误2:

/home/workspace/project/EC20/my_git_bak/TestRepo/cwr/face/demo/arm_cross_dlib/dlib-19.18/dlib/data_io/../geometry/rectangle.h:658:24: error: ‘round’ is not a member of ‘std’
         long l = (long)std::round(rect.left()*scale);

解决办法:

由于海思编译器对c++11支持不是很友好,在dlib/geometry/rectangle.h中修改,重新声明个round。

namespace std
{
    double round(double f);
    float erfc(float f);
}
image

编译成功

image

2.3 交叉编译example出现的错误

在example目录下创建arm_build

进入arm_build 使用camke-gui来进行设置交叉编译器

cmake-gui配置内容,只设置好example源码路径和arm_build目录,设置好CMAKE_INSTALL_PREFIX路径,其他默认就好。

image

出现与编译libdlib.a静态库一样的错误。

[  3%] Building CXX object dlib_build/CMakeFiles/dlib.dir/entropy_decoder/entropy_decoder_kernel_2.cpp.obj
In file included from /home/workspace/test/tmp/dlib-19.18/dlib/bigint/bigint_kernel_1.h:8:0,
                 from /home/workspace/test/tmp/dlib-19.18/dlib/bigint/bigint_kernel_1.cpp:5:
/home/workspace/test/tmp/dlib-19.18/dlib/bigint/../serialize.h: In member function ‘dlib::proxy_deserialize& dlib::proxy_deserialize::doit(T&&)’:
/home/workspace/test/tmp/dlib-19.18/dlib/bigint/../serialize.h:1635:25: error: ‘to_string’ is not a member of ‘std’
                         std::to_string(objects_read+1) + "th object from the file " + filename +

参考静态库编译错误的解决办法,只不过修改的CMakeLists.txt是在example目录下的.


image

出现新的问题:

[ 49%] Linking CXX executable threads_ex
dlib_build/libdlib.a(threads_kernel_2.cpp.obj): In function `dlib::threads_kernel_shared_helpers::thread_starter(void*)':
threads_kernel_2.cpp:(.text+0x14): undefined reference to `pthread_detach'
dlib_build/libdlib.a(threads_kernel_2.cpp.obj): In function `dlib::threads_kernel_shared_helpers::spawn_thread(void (*)(void*), void*)':
threads_kernel_2.cpp:(.text+0x58): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
make[2]: *** [timer_ex] Error 1
make[1]: *** [CMakeFiles/timer_ex.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

解决办法:

在arm_build的目录下修改CMakeCache.txt文件
在/CXX compiler与C compiler下添加-lpthread选项。

image

参考:
ubuntu14.04 + dlib19.2 - 简书 //www.greatytc.com/p/653967b87031

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容