Linux开发

推荐列表 站点导航

当前位置:首页 > 服务器技术 > Linux开发 >

人脸特征检测--基于DLIB库

来源:网络整理  作者:wy  发布时间:2020-12-24 01:25
Dlib是一个C++编写的工具包,它包含了机器学习算法以及一些用来解决现实复杂问题的工具,可以广泛应用于机器人、...

Dlib是一个C++编写的工具包,它包含了机器学习算法以及一些用来解决现实复杂问题的工具,可以广泛应用于机器人、嵌入式设备、手机,甚至高性能计算中,可以在其官网了解更多。这里下载它来试用一下,下载后解压,目录结构如下:

人脸特征检测--基于DLIB库

 

在examples目录下是C++的一些例子,我们可以参考来学习下怎么使用:

人脸特征检测--基于DLIB库

 

下面基于这个库来检测一下人脸的特征数据,使用Eclipse For CPP IDE新建一个空的C++的Makefile工程,然后新建main.cpp与makefile文件,并复制官方的人脸识别文件到工程目录下,完成后项目结构如下:

人脸特征检测--基于DLIB库

 

"shape_predictor_xxxx"就是已经弄好的人脸识别数据文件,可以搜索下载即可。

"2.png"是一张人脸,就取我的证件照吧。

为了能够跳转查看头文件,配置一下dlib库的include路径:

人脸特征检测--基于DLIB库

 

编辑main.cpp文件如下:

#include <iostream>  

#include <dlib/opencv.h>  

#include <opencv2/opencv.hpp>  

#include <dlib/image_processing/frontal_face_detector.h>  

#include <dlib/image_processing/render_face_detections.h>  

#include <dlib/image_processing.h>  

#include <dlib/gui_widgets.h>

using namespace std;  

using namespace cv;  

using namespace dlib;

int   

main(int argc, char IT之家argv[], char IT之家IT之家env) {  

cout << "OpenCV Version: " << CV_VERSION << endl;

try {  

Mat source = imread("2.png");

cout << "Detecting, wait a minute..." << endl;  

double start = static_cast<double>(getTickCount());

frontal_face_detector detector = get_frontal_face_detector();  

shape_predictor pose_model;  

deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;

cv_image<bgr_pixel> cimg(source);  

std::vector<dlib::rectangle> faces = detector(cimg);  

std::vector<full_object_detection> shapes;  

for (unsigned long i = 0; i < faces.size(); ++i) {  

shapes.push_back(pose_model(cimg, faces[i]));  

}

if (!shapes.empty()) {  

for (int i = 0; i < 68; i++) {  

circle(source, cvPoint(shapes[0].part(i).x(), shapes[0].part(i).y()),  

3, cv::Scalar(0,0,255), -1);  

}  

}

double end = static_cast<double>(getTickCount());  

double seconds = (end-start) / getTickFrequency();  

cout << "Detect finish, time: " << seconds << endl;  

imshow("Face Feature", source);

waitKey();  

}  

catch (exception &e) {  

cout << "[Error]: " << e.what() << endl;  

}

return 0;  

}

 

编辑Makefile文件如下:

TARGET = main  

SRC_FILES = main.cpp \  

/home/linjk/usr/dlib-19.4/dlib/all/source.cpp  

COMPILER = g++  

CXXFLAGS = -Wall -std=c++11 -lX11 -lpthread  

INCLUDE_DLIB = /home/linjk/usr/dlib-19.4/  

LIB_PATH = /usr/local/lib/  

LINK_LIBS_OPENCV = -lopencv_videoio \  

-lopencv_core \  

-lopencv_highgui \  

-lopencv_imgproc \  

-lopencv_imgcodecs 

$(TARGET):$(SRC_FILES)  

$(COMPILER) -o $(TARGET) $(SRC_FILES) $(CXXFLAGS)\  

-I$(INCLUDE_DLIB) -L$(LIB_PATH) $(LINK_LIBS_OPENCV)

clean:  

rm -rf $(TARGET)

 

这里定义的目标可执行文件main的编译规则,在其他平台修改这个文件的-I或-L参数,指向正确的路径即可。

 

编译执行结果如下:

人脸特征检测--基于DLIB库

 

左边是特征点检测结果,右边是从0到67总共68个点的特征数据本地保持,结果输出,检测完用了5.02秒,这里人脸部分图片越小,时间越短,经过Mac与Ubuntu的执行时间对比,Ubuntu比Mac居然快了1秒,而Ubuntu是运行在虚拟机上面的。

后续再用这个数据来进行分析了。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/server/kaifa/8401.shtml

相关文章
Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

人脸特征检测--基于DLIB库

2020-12-24 编辑:wy

Dlib是一个C++编写的工具包,它包含了机器学习算法以及一些用来解决现实复杂问题的工具,可以广泛应用于机器人、嵌入式设备、手机,甚至高性能计算中,可以在其官网了解更多。这里下载它来试用一下,下载后解压,目录结构如下:

人脸特征检测--基于DLIB库

 

在examples目录下是C++的一些例子,我们可以参考来学习下怎么使用:

人脸特征检测--基于DLIB库

 

下面基于这个库来检测一下人脸的特征数据,使用Eclipse For CPP IDE新建一个空的C++的Makefile工程,然后新建main.cpp与makefile文件,并复制官方的人脸识别文件到工程目录下,完成后项目结构如下:

人脸特征检测--基于DLIB库

 

"shape_predictor_xxxx"就是已经弄好的人脸识别数据文件,可以搜索下载即可。

"2.png"是一张人脸,就取我的证件照吧。

为了能够跳转查看头文件,配置一下dlib库的include路径:

人脸特征检测--基于DLIB库

 

编辑main.cpp文件如下:

#include <iostream>  

#include <dlib/opencv.h>  

#include <opencv2/opencv.hpp>  

#include <dlib/image_processing/frontal_face_detector.h>  

#include <dlib/image_processing/render_face_detections.h>  

#include <dlib/image_processing.h>  

#include <dlib/gui_widgets.h>

using namespace std;  

using namespace cv;  

using namespace dlib;

int   

main(int argc, char IT之家argv[], char IT之家IT之家env) {  

cout << "OpenCV Version: " << CV_VERSION << endl;

try {  

Mat source = imread("2.png");

cout << "Detecting, wait a minute..." << endl;  

double start = static_cast<double>(getTickCount());

frontal_face_detector detector = get_frontal_face_detector();  

shape_predictor pose_model;  

deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;

cv_image<bgr_pixel> cimg(source);  

std::vector<dlib::rectangle> faces = detector(cimg);  

std::vector<full_object_detection> shapes;  

for (unsigned long i = 0; i < faces.size(); ++i) {  

shapes.push_back(pose_model(cimg, faces[i]));  

}

if (!shapes.empty()) {  

for (int i = 0; i < 68; i++) {  

circle(source, cvPoint(shapes[0].part(i).x(), shapes[0].part(i).y()),  

3, cv::Scalar(0,0,255), -1);  

}  

}

double end = static_cast<double>(getTickCount());  

double seconds = (end-start) / getTickFrequency();  

cout << "Detect finish, time: " << seconds << endl;  

imshow("Face Feature", source);

waitKey();  

}  

catch (exception &e) {  

cout << "[Error]: " << e.what() << endl;  

}

return 0;  

}

 

编辑Makefile文件如下:

TARGET = main  

SRC_FILES = main.cpp \  

/home/linjk/usr/dlib-19.4/dlib/all/source.cpp  

COMPILER = g++  

CXXFLAGS = -Wall -std=c++11 -lX11 -lpthread  

INCLUDE_DLIB = /home/linjk/usr/dlib-19.4/  

LIB_PATH = /usr/local/lib/  

LINK_LIBS_OPENCV = -lopencv_videoio \  

-lopencv_core \  

-lopencv_highgui \  

-lopencv_imgproc \  

-lopencv_imgcodecs 

$(TARGET):$(SRC_FILES)  

$(COMPILER) -o $(TARGET) $(SRC_FILES) $(CXXFLAGS)\  

-I$(INCLUDE_DLIB) -L$(LIB_PATH) $(LINK_LIBS_OPENCV)

clean:  

rm -rf $(TARGET)

 

这里定义的目标可执行文件main的编译规则,在其他平台修改这个文件的-I或-L参数,指向正确的路径即可。

 

编译执行结果如下:

人脸特征检测--基于DLIB库

 

左边是特征点检测结果,右边是从0到67总共68个点的特征数据本地保持,结果输出,检测完用了5.02秒,这里人脸部分图片越小,时间越短,经过Mac与Ubuntu的执行时间对比,Ubuntu比Mac居然快了1秒,而Ubuntu是运行在虚拟机上面的。

后续再用这个数据来进行分析了。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/server/kaifa/8401.shtml

相关文章

风云图片

推荐阅读

返回Linux开发频道首页