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 的相关文章

  • 翻译-Frustum PointNets for 3D Object Detection from RGB-D Data

    Frustum PointNets for 3D Object Detection from RGB D Data 摘要介绍相关工作从RGB D数据中检测三维物体基于前视图图像的方法 xff1a 基于鸟瞰图的方法 基于3D的方法 点云的深度
  • 【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
  • H264码流RTP封装方式详解:rfc3984

    264码流RTP封装方式详解 文章目录 H264码流RTP封装方式详解 1 H264基本概念 2 NALU Header介绍 3 RTP封装H264码流 3 1 单一NALU模式 3 2 组合帧封装模式 3 3 分片封装模式 4 代码解析
  • 面试遇到了算法题?看这篇就够啦。

    原文地址 github com kdn251 interviews 译文出自 掘金翻译计划 译者 王下邀月熊 校对者 PhxNirvana 根号三 这个 链接 用来查看本翻译与英文版是否有差别 如果你没有看到 README md 发生变化
  • 阻止脚本编写者攻击您的网站

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

    我正在尝试找到一种简单的方法来检测我的扩展程序是否安装在 Firefox 3 6 中 这应该从网页完成 可能使用 JavaScript 我读过很多博客 说我应该尝试从我的扩展程序加载图像 由于我拥有该扩展 并且我可以编写代码 因此这似乎是不
  • 如何在 PHP 中检查重复的电子邮件地址,考虑 Gmail([电子邮件受保护])

    如何在 PHP 中检查重复的电子邮件地址 考虑到 Gmail 自动标签和标点符号的可能性吗 例如 我希望这些地址被检测为重复 email protected email protected email protected email pro
  • Microsoft Face API 中“解码错误,图像格式不受支持”

    我正在尝试使用 Microsoft Face API 为此 我有 Microsoft 提供的以下代码作为示例 在本页末尾 https dev projectoxford ai docs services 563879b61984550e40
  • 检测复制或相似的文本块

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

    使用opencv 可以在图像或视频帧中检测某种颜色 在一定范围的rgb值之间 吗 您需要定义 RGB 阈值 并处理图像中适合定义的像素 希望不是整个图像 而是较小的感兴趣区域 可能是移动的前景形状 与所讨论的内容类似here http ww
  • 适用于 ASP.NET 的恶意爬虫拦截器

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

    我希望通过检测某些无法键入的组合键 转义序列 的按键来模拟 C 中的串行通信的超级终端功能 例如 Ctrl C Ctrl Z 等 我知道这些键有其 ASCII等价物 并且可以按原样传输 但我在检测多个按键时遇到问题 我提供一些代码作为参考
  • iOS / C:检测音素的算法

    我正在寻找一种算法来确定实时音频输入是否与 144 个给定 且完全不同的 音素对之一匹配 最好是完成这项工作的最低级别 我正在为 iPhone iPad 开发激进 实验性音乐培训软件 我的音乐系统包含 12 个辅音音素和 12 个元音音素
  • Python Opencv自定义控制(增加/减少)视频播放速度

    我正在编写一个程序来控制视频播放速度为自定义速率 有办法实现这一点吗 应该添加什么代码来控制播放速度 import cv2 cap cv2 VideoCapture video mp4 while cap isOpened ret fram
  • HOG 人体检测器:背景减除图像的误报检测

    我正在开展一个需要检测场景中的人员的项目 最初在原始帧上运行 HOG 检测器后 所有帧上的特定背景对象都被检测为人 从而产生 3021 个误报检测 因此 我采取了合理的步骤 通过对所有帧应用背景减法器 BackgroundSubtracto
  • 如何使用 PHP 检测访问我们网站的用户的 MAC 地址?

    我知道如何追踪 IP 地址 但我需要追踪查看我的页面的用户的 MAC 地址 如何做到这一点 除非用户与网络服务器位于同一 LAN 上 否则无法执行此操作 MAC 地址位于 TCP IP 下面的以太网层 并且不包含在从用户本地网络路由出去的
  • MapBox水/陆检测

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

    不幸的是 我无法找到我的问题的任何解决方案 我想做的是使用 OpenCV 方法改进结果cvFindChessboardCorners为了能够实现更好的相机校准 因为我认为这就是为什么我在不扭曲 校正图像时得到较差结果的原因 就像我之前的问题
  • 如何使用mb_detect_encoding检测编码是否正确?

    我想检测编码是否正确 但我发现 mb detect encoding 总是得到错误结果 并且我添加了很多encoding list UTF8 ISO 8859 你试图做的事情只是有时作品 编码检测并不是一门精确的 科学 因此您能做的最好的事

随机推荐