ubuntu14.04 + dlib19.2+【 C++ 】+Face Landmark Detection

2023-05-16

1、安装dlib

dlib官网这里好像只有最新的dlib版本包,下载选项在左下角有个蓝色的按钮,写着download
这里写图片描述
博主用的还是目前最新的版本19.2,因为最新的dlib版本添加了一些新的人脸检测器,mmod+cnn算法,可以看看dlib的blog。
这里写图片描述

2、 C++编译dlib

如果你是使用的C++,那么很简单,不用安装,直接按照官网的指示(也是在官网首页,左边栏目里有个how to compile,这个指示只是交你怎么快速使用dlib库中的examples).
从官网下载的dlib文件如下:
这里写图片描述

从dlib的根目录执行下面语句即可:

>>首先进入dlib的根目录下
>>再执行如下语句:
cd examples  #进入dlib下的examples文件夹
mkdir build  #新建build文件夹,存放cmake编译后的执行文件
cd build     #进入新建好的build文件夹
cmake ..     #cmake编译examples整个文件夹
cmake --build . --config Release  

最终,dlib/examples/build文件夹如下:

这里写图片描述

这只是编译好了examples下的dlib,要想编译整个dlib库,则执行以下代码即可:

>>进入dlib根目录下
mkdir build
cd build
cmake ..
make release=1 

3、 新建dlib工程

如果要自己建立工程,可以仿照dlib/examples/CMakeLists.txt,直接include(dlib/dlib/cmake)文件即可。
在其他地方新建工程(不要放dlib根目录下),首先新建一个文件夹放置工程,进入文件夹下,新建CMakeList.txt文件,可以采用vim指令编辑,如下参考如下代码:

vim CMakeList.txt

再将如下代码复制到CMakeList.txt中:

cmake_minimum_required(VERSION 2.8.4)  #版本最小为2.8.4

PROJECT(dlib_facedetector)   #设置工程名

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()

#INCLUDE OPENCV
FIND_PACKAGE(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
message(STATUS "Opencv include dir found at ${OpenCV_INCLUDE_DIRS}")

#包含头文件
INCLUDE_DIRECTORIES(/home/fr/fr/dlib) #dlib根目录地址

LINK_DIRECTORIES(/home/fr/fr/dlib/build/dlib/) #dlib编译后bulid下dlib地址

#生产类似于.exe的可执行文件
ADD_EXECUTABLE(dlib_detector dlib_test.cpp)
#链接库
TARGET_LINK_LIBRARIES(dlib_detector dlib ${OpenCV_LIBS})
#TARGET_LINK_LIBRARIES(dlib_detector libjpeg.so)

以上代码含OpenCV。
然后再自己vim test.cpp文件,编译执行,编译代码如下:

>>在自己建的工程文件夹下新建build文件夹
mkdir build
cd build
cmake ..
make -j8 #用make也行

编译正确后,在build文件夹中会出现dlib_detector:
这里写图片描述
这就是我们需要的可执行文件。
然后再执行.cpp文件,执行代码如下:

>>在build文件夹下继续执行一行代码即可显示结果:
./dlib_detector

注意:一旦我们修改过CMakeList.txt,我们需要将之前编译过的build文件删除掉,重新新建编译过一次

>>在工程目录下删除build文件夹,用rm -r指令
rm -r build  
mkdir build
cd build
cmake ..
make -j8

4、 dlib下examples中的Face Landmark Detection功能实现

按上述方法新建好了一个工程,将官网给的例程复制在我们的.cpp中。
该算法来源于One Millisecond Face Alignment with an Ensemble of Regression Trees by Vahid Kazemi and Josephine Sullivan, CVPR 2014

if (argc == 1)
        {
            cout << "Call this program like this:" << endl;
            cout << "./face_landmark_detection_ex shape_predictor_68_face_landmarks.dat faces/*.jpg" << endl;
            cout << "\nYou can get the shape_predictor_68_face_landmarks.dat file from:\n";
            cout << "http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2" << endl;
            return 0;
        }

首先要去官网下载面部特征点检测模型,接着进行解压。这是一个.bz2的压缩文件,不是.dat.bz2,不要搞错了。解压代码可以参考我之前的一篇博客:Ubuntu解压命令集

bunzip2 shape_predictor_68_face_landmarks.dat.bz2

注意,编译通过后运行.cpp根据程序内容,代码如下:

./dlib_detector ../shape_predictor_68_face_landmarks.dat ../*.jpg   #   ../*.jpg为实验图片地址  

需要将源码给出的./face_landmark_detection_ex换成我们自己生成的./dlib_detector可执行文件
运行最后结果:
这里写图片描述

小图为7个人脸被剪切出来的图,已对齐。大图为7个人脸的68个特征点定位图。
这里写图片描述

博主用自己的头像做了一次实验,结果如下:
这里写图片描述

我故意歪了一定角度的头,可以看到,小图中人脸已经矫正了。

关于人脸检测,对齐,识别等过程,可详见《人脸识别笔记:Deep Face Recognition》 ,写得很详细。

这里写图片描述
上图来源于:http://www.cnblogs.com/cv-pr/p/5438351.html

鸣谢

博主师兄 Michaelliu_dev 亲临指导,感谢师兄写的blog。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu14.04 + dlib19.2+【 C++ 】+Face Landmark Detection 的相关文章

  • windows配置tensorflow python object detection 环境

    option 1 pip install lt binary gt pip install upgrade https storage googleapis com tensorflow mac cpu tensorflow 1 12 0
  • python 人脸识别和手势识别应用(face++)开发

    一 基础认识 本项目使用的是face 43 43 平台 xff0c 人脸识别 43 手势识别双确认显示 python编程 xff0c 代码简介 xff0c 方便扩展 该项目适用于Windows系统和Linux系统 xff0c 但必须安装相应
  • 【Lane】 Ultra-Fast-Lane-Detection 复现

    引言 笔者Ultra Fast Lane Detection专栏链接 x1f517 导航 xff1a Lane Ultra Fast Lane Detection 复现 Lane Ultra Fast Lane Detection xff0
  • 【Lane】Ultra-Fast-Lane-Detection(1)自定义数据集训练

    引言 笔者Ultra Fast Lane Detection专栏链接 x1f517 导航 xff1a Lane Ultra Fast Lane Detection 复现 Lane Ultra Fast Lane Detection xff0
  • 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点 包括5个点 两个眼的中心 鼻尖 两个嘴角 以下是测试代码 int test alignment std vector
  • face++人脸识别初探

    依然是实训第一周 由于选定了face 作为api 我摸索了一下face 的人脸识别api的情况 下面我来为大家分析一下face api的情况 face 人脸识别有 1 人脸检测 2 人脸别对 3 人脸搜索 4 人脸关键点 5 人脸属性 6
  • 人脸识别引擎SeetaFaceEngine简介及在windows7 vs2013下的编译

    SeetaFaceEngine是开源的C 人脸识别引擎 无需第三方库 它是由中科院计算所山世光老师团队研发 它的License是BSD 2 SeetaFaceEngine库包括三个模块 人脸检测 detection 面部特征点定位 alig
  • 构造函数与 typeof 检测 JavaScript 中的类型

    In 这个问题我没有看到使用构造函数的建议 所以而不是typeof callback function 我会用callback callback constructor Function 对我来说 很明显 在运行时性能和编码安全性方面 与内
  • 检测用户所在国家/地区的最快方法

    我需要检测用户的国家 地区并按他 她的国家 地区显示网站的语言 土耳其人用土耳其语 其他人用英语 我怎样才能以最快的方式做到这一点 表现对我来说很重要 我在看IPInfoDB 的 API 还有更好的选择吗 我使用的是PHP 对于可能在 20
  • 检测是否支持事件监听器

    是否可以检测某些浏览器是否支持某些事件 我可以检测浏览器是否支持document addEventListener 但我需要知道它是否支持该事件DOMAttrModified Firefox 和 Opera 支持它 但 Chrome 和其他
  • 阻止脚本编写者攻击您的网站

    我已经接受了答案 但遗憾的是 我相信我们仍停留在最初的最坏情况 验证码大家都在尝试购买垃圾 简短说明 缓存 网络场使得无法跟踪点击量 并且任何解决方法 发送非缓存网络信标 写入统一表等 都会比机器人更慢地减慢网站速度 思科等公司可能有一些昂
  • 二维等距网格中的点击检测?

    我从事网络开发已经很多年了 我正在慢慢地参与游戏开发 对于我当前的项目 我有这个等轴测图 我需要使用算法来检测正在单击哪个字段 顺便说一句 这一切都是在浏览器中使用 Javascript 实现的 The map看起来像this https
  • 检测复制或相似的文本块

    我有很多关于 Markdown 格式编程的文本 有一个构建过程能够将这些文本转换为 Word HTML 并执行简单的验证规则 例如拼写检查或检查文档是否具有所需的标题结构 我想扩展该构建代码以检查所有文本中的复制粘贴或类似块 是否有任何现有
  • 适用于 ASP.NET 的恶意爬虫拦截器

    我刚刚偶然发现不良行为 http www bad behavior ioerror us 一个 PHP 插件 承诺通过阻止垃圾邮件和恶意爬虫访问该网站来检测它们 ASP NET 和 ASP NET MVC 是否存在类似的东西 我感兴趣的是完
  • NLTK 和语言检测

    如何使用 NLTK 检测文本是用什么语言编写的 我见过的例子使用nltk detect 但是当我在我的Mac上安装它时 我找不到这个包 您是否遇到过以下代码片段 english vocab set w lower for w in nltk
  • 如何使用头文件签名(幻数)检查文件类型?

    通过输入文件及其扩展名 我的代码成功地从 幻数 中检测到文件的类型 magic numbers png bytes 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A jpg bytes 0xFF 0xD8 0x
  • jQuery:检测 cmd+click / control+click

    我在选项卡中有我的网络应用程序的选项 ul li a href a php aaa a li li a href b php bbb a li li a href c php ccc a li li a href d php ddd a l
  • 如何使用 PHP 检测访问我们网站的用户的 MAC 地址?

    我知道如何追踪 IP 地址 但我需要追踪查看我的页面的用户的 MAC 地址 如何做到这一点 除非用户与网络服务器位于同一 LAN 上 否则无法执行此操作 MAC 地址位于 TCP IP 下面的以太网层 并且不包含在从用户本地网络路由出去的
  • 维奥拉-琼斯算法 - “像素之和”?

    我看过很多关于 Viola Jones 算法如何真正工作的文章和问题的答案 我不断找到答案 说某个区域中的 像素总和 减去相邻区域中的 像素总和 我对 像素总和 的含义感到困惑 其价值依据是什么 是该区域的像素数吗 颜色的强度 提前致谢 这
  • MapBox水/陆检测

    我开始使用MapBox iOS SDK https www mapbox com mapbox ios sdk 有没有可能的方法通过坐标查询 MapView 并返回地形类型 水 土地 作为结果 我一直在读API doc https www

随机推荐