windows 下編譯dlib-18.17及測試
阿新 • • 發佈:2019-02-15
Dlib是一個機器學習的C++庫,裡面包含了許多常用的機器學習演算法,如人臉檢測識別,而且文件和例子都非常詳細,學習了OenCV後準備也學習下。
Dlib官網地址:http://www.dlib.net/ml.html
目前官方最新的版本是:19.8。這個版本的dlib只支援VS2015及以後的版本,前面的版本需要自己去搗鼓,而本人用的是VS2013,於是下載了dlib-18.17。下載地址:https://pan.baidu.com/s/1gey9Wd1
1、安裝cmake,這個很簡單,一直next就可以了。
2、開啟cmake,設定source code路徑為解壓目錄,新建生成目錄,起名為build,設為二進位制生成輸出目錄。
3、點選Configure生成如下介面:
4、確保DLIB_LINK_WITH_LIBJPEG選項和DLIB_LINK_WITH_LIBPNG選項被勾選,再次點選Configure,Configuring done後,然後點選Generate,生成完畢後,在build目錄下開啟:dlib.vcxproj,然後選擇dlib專案,點選生成,記得分別選擇Debug 64 和Release 64模式生成對應的靜態庫檔案:dlib.lib。
5、編譯完成後,就可以使用了,
在C/C++ —>常規—>附加包含目錄中加入 :F:\OpenCV\dlib-18.17,如果出現jpeg和png的錯誤,記得新增包含F:\OpenCV\dlib-18.17\dlib\external\libjpeg和F:\OpenCV\dlib-18.17\dlib\external\libpng,然後在連結器—>常規—>附加庫目錄中新增:F:\OpenCV\dlib-18.17\build\Release(如果是Debug模式,則為:F:\OpenCV\dlib-18.17\build\Debug),然後在連結器—>輸入,中加入dlib.lib。
為了保證順利載入jpeg和png影象,還需要在c++的前處理器中加入
DLIB_PNG_SUPPORT
DLIB_JPEG_SUPPORT
6、測試
// OpenCVDLIB.cpp : 定義控制檯應用程式的入口點。
//
#include "stdafx.h"
#include <dlib/opencv.h>
#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>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
using namespace dlib;
int _tmain(int argc, _TCHAR* argv[])
{
try
{
cv::VideoCapture cap(0);
if (!cap.isOpened())
{
cerr << "Unable to connect to camera" << endl;
return 1;
}
frontal_face_detector detector = get_frontal_face_detector();
shape_predictor pose_model;
deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;
cv::namedWindow("show", 0);
while (cv::waitKey(30) != 27)
{
// Grab a frame
cv::Mat temp;
cap >> temp;
cv_image<bgr_pixel> cimg(temp);
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(temp, cvPoint(shapes[0].part(i).x(), shapes[0].part(i).y()), 3, cv::Scalar(0, 0, 255), -1);
}
}
imshow("show", 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;
}
}
編譯成功,執行就能開啟電腦usb攝像頭,檢測人臉了。