日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

dlib+vs2013+opencv实现人脸特征点检测

發布時間:2024/7/23 pytorch 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dlib+vs2013+opencv实现人脸特征点检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

刷知乎的時候發現dlib做特征點檢測和人臉識別的效果都好于OpenCV,就想著動手玩一下。沒想到也是遇坑重重。

首先,在官網 install命令和setup.py文件進行安裝時報錯,先是報錯cmake沒有找到,添加了環境變量之后仍然報錯c++11需要在vs2015下才能運行。后來找到的資料也說明了要想在vs2013下開發需要安裝較早的版本。不想再重新安裝vs了,可是官網也找不到早期的dlib版本,幸好有人做了匯總。下載了18.17版本,發現文件夾中沒有setup文件,這時應該還需要cmake進行編譯。

Cmake編譯已經很熟悉了,選擇編譯的源文件和生成文件的目的地址,目的地址可以選擇dlib主目錄下新建的文件夾。第一步是configuration,要選擇和自己vs版本對應的配置。Vs2013win32就選擇visual studio 12 2013 (沒有ARM)。下一步generation,然后就可以打開sln或者open project了。

然后就是新建c++工程,配置包含目錄、庫目錄、附加依賴項。Vs2013預編譯頭已經包含了stdafx.h,不必在cpp文件中重新包含,否則會報錯。期間遇到了LNK2019: 無法解析的外部符號的問題,不用說,鏈接庫肯定沒添加對。錯誤各有各的錯法,我遇到的是在cmake的時候就出錯了:configuration應該選擇和自己vs平臺一樣的,我的是vs2013win32版的,卻選擇了win64,后來改成arm還是不對,只能是下圖中所選的。

這下編譯終于通過了,但是在讀入shape_predictor_5_face_landmarks.dat中就異常中斷了,中斷處的代碼顯示是未能正確打開文件。郁悶了半天才意識到應該是路徑中有中文連接符號-。把文件放到工作目錄就解決問題了。

可以看到程序已經實現了在圖像中檢測人臉位置并將人臉中標志性的符號(如眼角,嘴角)標記出來,可以根據這些標志信息進一步知道人臉的表情信息(或者說動作pose)。實現人臉位置檢測的是frontal_face_detector,實現標志提取的是shape_predictor,前者使用傳統的HOG特征和線性分類器、圖像金字塔、滑窗實現,后者通過根據2014年的一篇CVPR文章訓練好的網絡模型實現。在網上可以找到兩個模型,一個可以找出68個人臉中的特征點,一個可以找到5個特征點。更換對應的.dat文件就可以實現,當然特征點更少時耗時更少。

P.s 更改模型文件后要記得更改繪制特征點圓圈的for循環中的循環次數,不然會溢出中斷。

在這里的代碼中使用了OPenCV實現圖像導入和最后的顯示和保存,在官網提供的例子中,可以全部使用dlib庫完成。

/*dlib::deserialize("D:\\program\Anaconda2\\Tools\dlib-18.17\\shape_predictor_68_face_landmarks.dat") >> pose_model;cv::Mat img = imread("D:\\program\Anaconda2\\Tools\dlib-18.17\\zkaj.jpg", 1);*/ #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{// Load face detection and pose estimation models. frontal_face_detector detector = get_frontal_face_detector();//正臉檢測器,得到人臉的邊界框//檢測器使用經典的HOG特征和線性分類器,圖像金字塔和滑窗完成shape_predictor pose_model;//shape_predictor用于預測臉上標志的位置deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model;//讀取已經訓練好的模型,在 iBUG 300-W人臉數據集(禁止商用)上訓練得到 http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2.// Grab and process frames until the main window is closed by the user. // Grab a frame cv::Mat temp;//cap >> temp; temp = cv::imread("timg.jpg", 1);//cv::VideoCapture cap(0);也可以從攝像頭獲取當前畫面cv_image<bgr_pixel> cimg(temp);//拷貝賦值 dlib的圖像格式是array2d// 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]));//68個點組成人臉poseif (!shapes.empty()){for (int j = 0; j < shapes.size(); j++)//遍歷每個檢測到的人臉{for (int i = 0; i < 68; i++)//遍歷每個人臉的68個特征點{circle(temp, cvPoint(shapes[j].part(i).x(), shapes[j].part(i).y()), 3, cv::Scalar(0, 0, 255), -1);//半徑是3,顏色是紅色。-1表示圓被填充putText(temp, to_string(i), cvPoint(shapes[j].part(i).x(), shapes[j].part(i).y()), CV_FONT_HERSHEY_PLAIN, 1, cv::Scalar(255, 0, 0), 1, 4);//線條寬度是1,字形是4鄰域。to_string將int轉為string,這是c++11新添加的}}}//Display it all on the screen imshow("Dlib特征點", temp);imwrite("Dlib特征點1.jpg", temp);cv::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_68_face_landmarks.dat.bz2" << endl;cout << endl << e.what() << endl;}}

Python接口的配置

直接下載安裝包更方便。dlib · PyPI注意還是要選擇和自己python版本和機器相符合的安裝包。通過命令pip install dlib-18.17.100-cp35-none-win_amd64.whl進行安裝。我遇到的問題是pip版本不夠高,使用python -m pip install --upgrade pip進行升級。總是弄不清楚到底進不進入python命令行,現在看來看來命令行中含python的就可以直接在cmd中執行。Pip也是直接在cmd中執行。

但是在pycharmn中的python版本是anaconda(python2.7),沒有安裝opencv。在https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy中找到了opencv的安裝包。

使用pip install命令安裝opencv,注意應該將D:\Anaconda3\Scripts(這是我電腦的安裝目錄)加入到環境變量,這樣就可以使用pip命令。

一切就緒以后以管理員身份運行cmd或PowerShell。依次輸入以下命令:

pip install --upgrade setuptools

pip install opencv-python

雖然網絡還可以,順利下載成功,但是依然無法import。原來pip自動下載也可能版本不對,于是下載了whl安裝包(名字叫輪子?),再使用pip安裝。

然后又遇到了numpy無法導入的問題,也是先卸載,重新安裝。conda remove numpy;conda install numpy。

最后一個問題是cv2.rectangle的使用,我的opencv版本沒有cv2.LINE_AA這個參數,注釋掉就好了。

反正就是一步步走,一個個解決問題。終于看到了結果:

Reference:

  • 手把手手把手教你Dlib+VS2013+Win7配置(詳細)_凌桑的自我修養--You are the Eternity-CSDN博客_dlib vs2013
  • Python:Widows下安裝dlib(通過Python調用)_ezhchai的博客-CSDN博客
  • 攝像頭https://blog.csdn.net/qq_15807167/article/details/68944673
  • Python接口Widows下安裝dlib(通過Python調用)_ezhchai的博客-CSDN博客
  • 用anaconda安裝dlib庫(python—opencv)_Snowing_ST的博客-CSDN博客_anaconda安裝dlib
  • Cv2:https://blog.csdn.net/Yeah_snow/article/details/79438097
  • Uninstall:https://blog.csdn.net/zyfortirude/article/details/70176705
  • 總結

    以上是生活随笔為你收集整理的dlib+vs2013+opencv实现人脸特征点检测的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。