赞
踩
Dlib 是一个开源的C++机器学习和计算机视觉库,用于解决多种任务,包括图像处理、计算机视觉、机器学习、数据分析等。Dlib 提供了一系列工具和算法,可用于开发各种应用,从人脸检测和识别,到对象检测、形状预测、图像分类等。
以下是 Dlib 主要的特点和功能:
Dlib 被广泛用于学术研究、工业应用和个人项目中,是一个强大而灵活的库,适用于多种计算机视觉和机器学习任务。人脸识别只是它其中的一个子集。
官方网站:http://dlib.net/
Haar特征:
Haar特征是一种基于小波的图像特征,通常用于对象检测,尤其是人脸检测。在Haar特征中,图像被划分成不同大小和形状的矩形区域,然后计算这些矩形区域内像素强度之和或差异。通过对这些特征的组合,可以训练一个强分类器,用于检测目标。
HOG特征:
HOG是一种基于梯度方向的图像特征,通常用于目标检测,如行人检测。HOG特征的计算涉及将图像划分成小的局部区域,计算每个区域内梯度方向的直方图。通过对这些局部直方图的组合,可以得到整个图像的特征向量。支持向量机(SVM)等分类器可以使用这些特征进行目标检测。
这两种特征提取方法都是为了捕捉图像中有用的结构信息,以便于训练分类器进行目标检测。选择使用哪种方法通常取决于应用的需求、计算资源和性能要求。在实际应用中,HOG特征在人脸检测、行人检测等任务上表现得相当出色。
Dlib是一个C++库,提供了许多计算机视觉和机器学习的工具和算法。Dlib包括了用于人脸检测、面部关键点检测、图像处理等功能的实现。在人脸检测中,Dlib使用了基于HOG(Histogram of Oriented Gradients)特征的方法,而不是Haar特征。HOG是一种更复杂和灵活的特征提取方法,相较于Haar特征,HOG更适用于不同场景的人脸检测。
训练深度学习模型通常对机器的要求较高,因为训练深度神经网络需要大量的计算资源和内存。以下是一些对机器要求的方面:
计算资源:训练深度学习模型通常需要大量的计算资源,尤其是在大规模数据集上进行训练时。使用图形处理单元(GPU)可以显著加速深度学习训练过程。更高端的GPU 和专门设计的深度学习加速卡(如NVIDIA的Tesla卡)能够提供更好的性能。内存: 深度学习模型的训练可能需要大量的内存,特别是在处理大规模数据集时。具有足够内存的机器能够更好地支持大型模型和数据。
存储空间: 训练深度学习模型可能会生成大量的中间模型和日志文件,需要足够的存储空间。此外,大规模数据集的存储也需要考虑。
多核处理器: 训练深度学习模型时,能够使用多核处理器进行并行计算会提高效率。多核 CPU 或多 GPU 系统能够更快地完成训练过程。
网络带宽: 当模型和数据集存储在远程服务器上时,快速的网络连接可以加速数据传输,减少训练时间。
由于个人电脑性能等各方面资源有限,以下是Dlib库为使用者提供的已经训练好的模型可供使用
1. 人脸检测:
Dlib 的人脸检测器采用基于 HOG(Histogram of Oriented Gradients)特征的方法。该检测器是通过训练得到的,已经在大规模数据集上进行了训练。可以使用 get_frontal_face_detector() 函数获取该预训练的人脸检测器。
2. 面部关键点检测:
Dlib 提供了一个基于 HOG 特征的面部关键点检测器,也称为形状预测器(shape_predictor)。可以使用shape_predictor_68_face_landmarks.dat 文件加载这个预训练的模型,该模型包含了 68 个面部关键点的位置信息。
3. 人脸识别:
Dlib 的人脸识别器使用深度学习模型,通常是基于 ResNet 架构的深度卷积神经网络。这个模型是通过在大规模数据集上进行训练得到的,用于提取人脸的特征向量。可以使用 dlib_face_recognition_resnet_model_v1.dat 文件加载这个预训练的人脸识别模型。
sudo apt-get update
sudo apt-get install libdlib-dev //OpenCV的安装配置可参考我的其他文章
//在编译dlib之前,安装以下依赖项:
sudo apt-get install build-essential cmake
//可以从dlib的GitHub仓库上下载源码(安装了git工具):
git clone https://github.com/davisking/dlib.git
//也可官网下载安装包(推荐)
http://dlib.net/files/
这里我们解压到/usr/include后进入dlib主目录
tj@ubuntu:~/Downloads$ sudo cp -r dlib-19.24/usr/include/
tj@ubuntu:~/Downloads$ cd /usr/include/dlib-19.24/
tj@ubuntu:/usr/include/dlib-19.24$ ls
CMakeLists.txt documentation.html LICENSE.txt README.md
dlib examples MANIFEST.in setup.py
docs ISSUE_TEMPLATE.md python_examples tools
tj@ubuntu:/usr/include/dlib-19.24$ sudo mkdir build
tj@ubuntu:/usr/include/dlib-19.24$ cd build/
tj@ubuntu:/usr/include/dlib-19.24/build$ sudo cmake -DCMAKE_BUILD_TYPE=Release -DDLIB_GENERATE_PKGCONFIG=ON ../dlib
tj@ubuntu:/usr/include/dlib-19.24/build$ sudo make -j4
tj@ubuntu:/usr/include/dlib-19.24/build$ make install
dpkg -L libdlib-dev //查看自己的dlib安装位置(使用apt,若源码安装则直接上一步查看)
//.pro
INCLUDEPATH += /usr/local/include
LIBS += /usr/local/lib/libopencv_* -ldlib //导入OpenCV和dlib库文件
//.h
#include <iostream>
#include <QPixmap>
#include <opencv2/opencv.hpp>
#include <dlib/opencv.h>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing.h> //导入头文件
using namespace std;
using namespace dlib;
对于上一步,如果使用apt安装出错(提示大量函数未定义),我们就使用源码编译的方式,按照上述步骤编译并且安装后,我们可以在 /usr/local/include/目录下查看到安装好的dlib库(下图),这时我们在QT中链接上dlib的库文件,如果我们使用
INCLUDEPATH += /usr/local/include /usr/local/include/dlib
会报几万个错误(吓人),经过其编译器提示我们只需将其改为INCLUDEPATH += /usr/local/include
即与使用OpenCV时一样,也就是只需要将链接目录设置为dlib所在的上层目录即可,原文如下,可参考:
/* You are getting this error because you have added the dlib folder
to your compiler’s include search path.You should NOT add the dlib folder itself to your compiler’s
include path. Doing so will cause the build to fail because of name
collisions (such as dlib/string.h and string.h from the standard
library). Instead you should add the folder that contains the dlib
folder to your include search path and then use include statements
of the form #include <dlib/queue.h> or #include “dlib/queue.h”.
This will ensure that everything builds correctly.XCode: The XCode IDE often puts all folders that it knows about
into the compiler search path. So if you are using XCode then
either don’t drag the whole dlib folder into the project or
alternatively modify your XCode project settings to not auto-add all
folders to the include path. Instead just make sure that the dlib
folder is itself inside a folder in your include path.
*/
最后,如果按照源码编译,我们的pro文件中应该为如图所示:
//.h
#include <QMainWindow>
#include <QPixmap>
#include <QDebug>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <dlib/opencv.h>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing.h>
using namespace std;
using namespace dlib;
using namespace cv;
//.cpp
// 创建dlib的人脸检测器
frontal_face_detector detector = get_frontal_face_detector();
// 创建dlib的人脸识别器
shape_predictor sp;
deserialize("/home/tj/shape_predictor_68_face_landmarks.dat") >> sp;
VideoCapture cap;
// 打开摄像头
cap.open(0);
if (!cap.isOpened()) {
qDebug() << "open camera faild!";
}
Mat frame;
namedWindow("Face Recognition", cv::WINDOW_NORMAL);
while (true) {
// 读取帧
cap >> frame;
// 将OpenCV图像转换为dlib图像
cv_image<dlib::bgr_pixel> dlibImage(frame);
// 使用人脸检测器检测人脸
std::vector<dlib::rectangle> faces = detector(dlibImage);
// 对每个检测到的人脸进行处理
for (const auto& face : faces) {
// 获取面部关键点
dlib::full_object_detection shape = sp(dlibImage, face);
// 在图像上绘制人脸框
cv::rectangle(frame, cv::Point(face.left(), face.top()), cv::Point(face.right(), face.bottom()), cv::Scalar(0, 255, 0), 2);
// 在图像上绘制面部关键点
for (unsigned int i = 0; i < shape.num_parts(); ++i) {
cv::circle(frame, cv::Point(shape.part(i).x(), shape.part(i).y()), 2, cv::Scalar(255, 0, 0), -1);
}
}
// 显示结果
cv::imshow("Face Recognition", frame);
// 按 'q' 键退出循环
if (cv::waitKey(1) == 'q') {
break;
}
}
至此安装配置并测试dlib成功!(学习记录,后续更新,谢谢点赞收藏)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。