Dlib初入门:实现人脸特征点检测(附CMake安装教程)

197
0
2020年12月7日 09时11分

我的系统:Win10 64位(其实所有系统都差不多的流程)

软件工具:Visual Studio 2017

 

目录

 

一、安装CMake

二、使用CMake编译生成Dlib库文件(Release版)

三、在Visual Studio中配置Dlib

四、配置openCv

五、实现人脸特征点检测

 


一、安装CMake

 

其实好简单,就两步:

 

1、cmake官网下载cmake(选择后缀为msi的文件,这个文件里面才有cmake.exe)

 

微信图片_20201203170314

 

下载完后我的目录:

 

微信图片_20201203170336

 

2、将cmake.exe所在的bin目录添加到环境变量中

 

在第一步双击msi文件,安装cmake的时候,就有选项询问你是否配置环境变量的,如果那时候没有选择配,就只能手动配置啦。

 

例如我的就是:D:\2018three\class\js\HW\tool\cmakeexe\bin(选择有cmake.exe在的那个路径)

 

3、检查是否成功安装

 

打开“cmake.exe”闪退不要紧,cmake-gui.exe能打开就行。或者直接在cmd输入”cmake”,看看安装是否成功。如下:

 

微信图片_20201203170409

 

二、使用CMake编译生成Dlib库文件(Release版)

 

1、官网上下载文件(可以看看官网的编译教程)

 

例如解压后我的dlib文件夹名是 “ dlib-19.16 ”。

 

2、使用CMake编译dlib(参考链接:使用cmake命令行模式编译dlib

 

在dlib文件夹下打开cmd (主要是为了让cmd的路径在dlib文件夹下)

 

然后执行如下代码,mkdir build的意思是在dlib文件夹下再新建一个“build”文件夹。cd build 是进入build文件夹路径。我是已经在dilb文件夹下新建好了build文件夹,并且路径已经定位到build文件夹下。所以我没有执行这两条语句。

 

mkdir build
cd build
cmake -G "Visual Studio 14 2015 Win64" ..
cmake --build . --config Release

 

一般而言,执行完”cmake –build . –config Release”就编译完成了,但是我报错“Error:could not load cache”了。

这个回答的提醒下,我再执行了一次”cmake ..”,才成功生成库文件。

 

微信图片_20201203170435

 

这时候我们会看到dlib的build目录下生成了一堆文件。

 

三、在Visual Studio中配置Dlib

 

1、首先在VS中创建一个空项目(例如我的项目名是DlibTest2)

2、打开项目属性页,注意切换到“Release”版本下,而不是“Debug”。

3、打开VC++目录->包含目录->添加上dlib文件夹的路径

 

微信图片_20201203170452

 

4、打开链接器->输入->附加依赖项->添加上刚刚编译生成好的dlib.lib的路径

 

微信图片_20201203170518

 

ok,配置完成了。

 

四、配置openCv

 

dlib的example实例代码有不少是需要结合openCv库的。所以最好配置opencv。

大部分弄dlib的都早已配置好了opencv了吧?我就不再详述了。opencv安装配置教程

 

五、实现人脸特征点检测

 

1、将dlib-19.16\dlib\all目录下的source.cpp加入到源文件中(必须要!)

2、下载人脸库,解压后将dat文件放置在 “项目名/项目名”目录下,例如我的:

 

微信图片_20201203170538

 

3、新建cpp文件:facepoint.cpp(代码出自:Dlib提取人脸特征点算法

 

#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 dlib;
using namespace std;
 
int main()
{
	try
	{
		cv::VideoCapture cap(0);
		if (!cap.isOpened())
		{
			cerr << "Unable to connect to camera" << endl;
			return 1;
		}
 
		//image_window win;
 
		// Load face detection and pose estimation models.
		frontal_face_detector detector = get_frontal_face_detector();
		shape_predictor pose_model;
		deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;
 
		// Grab and process frames until the main window is closed by the user.
		while (cv::waitKey(30) != 27)
		{
			// Grab a frame
			cv::Mat temp;
			cap >> temp;
 
			cv_image<bgr_pixel> cimg(temp);
			// Detect faces 
			std::vector<rectangle> faces = detector(cimg);
			// Find the pose of each face.
			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(temp, cvPoint(shapes[0].part(i).x(), shapes[0].part(i).y()), 3, cv::Scalar(0, 0, 255), -1);
					//	shapes[0].part(i).x();//68个
				}
			}
			//Display it all on the screen
			imshow("Dlib特征点", temp);
 
		}
	}
	catch (serialization_error& e)
	{
		cout << "You need dlib's default face landmarking model file to run this example." << endl;
		cout << "You can get it from the following URL: " << endl;
		cout << "   http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2" << endl;
		cout << endl << e.what() << endl;
	}
	catch (exception& e)
	{
		cout << e.what() << endl;
	}
}

 

最后的运行结果:

 

微信图片_20201203170606

 

该项目的结构列表为:

 

微信图片_20201203170623

 

其中”webcam_face_pose_ex.cpp”来自 “dlib / examples” 目录,这是dlib自带的示例代码,可以运行尝试下功能。注意一个项目中只能有一个主函数main,不然会报错。

 

对了,记得也要把vs调到realease,不然可能出现错误。

 

微信图片_20201203170644

发表评论

后才能评论