我的系统:Win10 64位(其实所有系统都差不多的流程) 软件工具:Visual Studio 2017
目录
一、安装CMake
二、使用CMake编译生成Dlib库文件(Release版)
三、在Visual Studio中配置Dlib
四、配置openCv
五、实现人脸特征点检测
一、安装CMake
其实好简单,就两步: 1、去cmake官网下载cmake(选择后缀为msi的文件,这个文件里面才有cmake.exe)
下载完后我的目录:
2、将cmake.exe所在的bin目录添加到环境变量中 在第一步双击msi文件,安装cmake的时候,就有选项询问你是否配置环境变量的,如果那时候没有选择配,就只能手动配置啦。 例如我的就是:D:\2018three\class\js\HW\tool\cmakeexe\bin(选择有cmake.exe在的那个路径) 3、检查是否成功安装 打开“cmake.exe”闪退不要紧,cmake-gui.exe能打开就行。或者直接在cmd输入”cmake”,看看安装是否成功。如下:
二、使用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 ..”,才成功生成库文件。
这时候我们会看到dlib的build目录下生成了一堆文件。
三、在Visual Studio中配置Dlib
1、首先在VS中创建一个空项目(例如我的项目名是DlibTest2) 2、打开项目属性页,注意切换到“Release”版本下,而不是“Debug”。 3、打开VC++目录->包含目录->添加上dlib文件夹的路径
4、打开链接器->输入->附加依赖项->添加上刚刚编译生成好的dlib.lib的路径
ok,配置完成了。
四、配置openCv
dlib的example实例代码有不少是需要结合openCv库的。所以最好配置opencv。 大部分弄dlib的都早已配置好了opencv了吧?我就不再详述了。opencv安装配置教程
五、实现人脸特征点检测
1、将dlib-19.16\dlib\all目录下的source.cpp加入到源文件中(必须要!) 2、下载人脸库,解压后将dat文件放置在 “项目名/项目名”目录下,例如我的:
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;
}
}
最后的运行结果:
该项目的结构列表为:
其中”webcam_face_pose_ex.cpp”来自 “dlib / examples” 目录,这是dlib自带的示例代码,可以运行尝试下功能。注意一个项目中只能有一个主函数main,不然会报错。 对了,记得也要把vs调到realease,不然可能出现错误。