深度学习工程实践 1.Dlib的使用
深度學(xué)習(xí)工程實踐 1.Dlib的使用
- 1.概述
- 2. 目標(biāo)
- 3. 工程實踐
- 3.1 編譯
- 3.2 工程配置
- 3.3 測試demo
- 4. 總結(jié)
1.概述
這個系列的博客,主要是記錄一下機(jī)器學(xué)習(xí),深度學(xué)習(xí)在工程實踐中遇到的一些問題。 作為工程筆記留下。 最終的目標(biāo)是使用現(xiàn)有的AI技術(shù),開發(fā)一個將人臉變成矢量線條的素描系統(tǒng)。這個區(qū)別于普通的人臉二值化,本系統(tǒng)將單獨(dú)對人臉的各個部位單獨(dú)進(jìn)行處理。
在這里分享出一些實踐經(jīng)驗。 看過不少相關(guān)的論文,但是均沒有將代碼細(xì)節(jié)以及實踐,過程沒有,只有結(jié)果和算法分析。 但是在實踐過程中,回有很多的問題,譬如,我在搭建深度學(xué)習(xí)的開發(fā)環(huán)境這個點上,就將近花費(fèi)了5個工作日的時間。 失敗了又再來,失敗了有再來。 本系列的文章記錄這些坑,希望能幫助大家。 對于深度學(xué)習(xí),筆者也只是會用,會搭配環(huán)境。 但我覺得,應(yīng)用起來,才是最好的學(xué)習(xí),學(xué)習(xí)的第一步,就是把這個技術(shù)用到自己的項目中去,不是么。 開始吧!
2. 目標(biāo)
在window是使用DLib,識別人臉的61個特征點,81個特征點
3. 工程實踐
3.1 編譯
筆者使用的是Qt 作為C++的一個開發(fā)環(huán)境,第一次使用DLib,是基于Qt mingw來進(jìn)行編譯的。 Dlib的編譯也比較簡單,參考如下鏈接: https://blog.csdn.net/liangchunjiang/article/details/77050688
這里總結(jié)一下幾個要點:
- CMake-Gui 安裝
- mingw的bin目錄要添加進(jìn)環(huán)境變量
編譯完成后,我們工程中主要需要的是build目錄下的lib文件夾里面的libdlib.a文件,還有一個include文件夾。
3.2 工程配置
剩下的主要就是Qt的pro文件配置了,筆者的配置如下:
INCLUDEPATH+= D:\dlib-19.17\include LIBS +=-L"D:\dlib-19.17\lib" LIBS+=-ldlib LIBS += -lmingw32 LIBS+=-lOle32 LIBS+=-lOleaut32 LIBS+=-lm LIBS+= -ldinput8 LIBS+=-lcomctl32 LIBS+=-ldxguid LIBS+= -ldxerr8 LIBS+=-luser32 LIBS+=-lgdi32 LIBS+=-lwinmm LIBS+= -limm32 LIBS+= -lole32 LIBS+=-loleaut32 LIBS+=-lshell32 LIBS+= -lversion LIBS+= -luuid LIBS+=-lglut32 LIBS+=-lopengl32 LIBS+=-lglu32 LIBS+=-lgdi32 LIBS+=-lwinmm LIBS += -lws2_32上述配置,可使用于Qt5.97-Mingw版本。
3.3 測試demo
測試代碼如下:
#include <opencv2/opencv.hpp> #include <opencv2/opencv_modules.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #define FACE_DOWNSAMPLE_RATIO 4 #define SKIP_FRAMES 2 #define DLIB_PNG_SUPPORT #define DLIB_JPEG_SUPPORT using namespace cv; using namespace std; using namespace dlib; int main(int argc, char** argv) {QCoreApplication a(argc, argv);try{// Load face detection and pose estimation models.frontal_face_detector detector = get_frontal_face_detector();shape_predictor pose_model;deserialize("shape_predictor_81_face_landmarks.dat") >> pose_model;cv::Mat temp = cv::imread("2.jpg");cv_image<bgr_pixel> cimg(temp);// Detect facesstd::vector<dlib::rectangle> faces = detector(cimg);// std::cout<<"faces size:"<<faces.size()<<std::endl;// 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]));}std::cout<<"get parts number size:"<<shapes[0].num_parts();if (!shapes.empty()){for (int i = 0; i < 81; i++){circle(temp, cvPoint(shapes[0].part(i).x(), shapes[0].part(i).y()), 2, cv::Scalar(0, 0, 255), -1);}}//Display it all on the screenimshow("Dlib特征點", temp);waitKey(0);}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_81_face_landmarks.dat.bz2" << endl;cout << endl << e.what() << endl;}catch(exception& e){cout << e.what() << endl;}return 0; }執(zhí)行效果如下:
在編譯過程中,可能會出現(xiàn):
錯誤,這時候,要把dlib編譯后build目錄下的config.h 拷貝到include目錄下,錯誤消除。
4. 總結(jié)
dlib的環(huán)境搭建非常順利,幾乎沒有難度。 要實現(xiàn)快速的人臉識別,使用默認(rèn)的shape_predictor_68_face_landmarks.dat.bz2預(yù)訓(xùn)練文件即可,如果要81個識別點,可以谷歌dlib + 81關(guān)鍵字,下載相關(guān)的預(yù)訓(xùn)練文件即可。
總結(jié)
以上是生活随笔為你收集整理的深度学习工程实践 1.Dlib的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 响应式html轮播图,最简单的响应式jQ
- 下一篇: 100、网页端的人脸识别