「seetaface2」中科院人脸识别引擎seetaface2在Linux Qt上的配置教程
筆者的最新私人博客網(wǎng)站經(jīng)過一段時間的努力,已經(jīng)初期建設(shè)完畢,csdn上的博文會逐漸轉(zhuǎn)移過去~~ 歡迎訪問呀~ |=傳=送=門=> 多多洛的博客
2016年,中科院山世光老師開源了其研發(fā)的seetaface人臉識別引擎,使用VS編譯,只能在window系統(tǒng)上運(yùn)行,若想在Mac和Linux系統(tǒng)上使用,還需進(jìn)行手動編譯;隨后又發(fā)布了seetaface2版本,這一版本的重大特性在于增加了對Linux和Android的支持,為這兩個平臺的研發(fā)人員提供了很大的便利。
筆者目前主要在Linux平臺上進(jìn)行人臉識別研究和學(xué)習(xí),發(fā)現(xiàn)網(wǎng)絡(luò)上目前幾乎沒有對seetaface2在Linux平臺上的完整配置教程,經(jīng)過筆者的多次試驗(yàn),總結(jié)出在Linux Qt上的較為完整的配置教程(及配置過程中可能遇到的問題),記錄如下。
一、seetaface2在LInux上的配置
先介紹一下筆者的開發(fā)環(huán)境:操作系統(tǒng)是Ubuntu 16.04,Qt版本是4.8.6,Qt Creator版本是4.4.0,OpenCV版本是2.4.9,g++/gcc 編譯器的版本是5.4.0。
(一)配置前的準(zhǔn)備
Step1 安裝依賴環(huán)境
打開終端,輸入以下命令進(jìn)行安裝:
# 更新軟件列表 sudo apt-get update # 安裝依賴環(huán)境 sudo apt-get install libopenblas-dev libprotobuf-dev libssl-devStep2 下載seetaface2的源碼、模型文件
官方的下載鏈接是:Seetaface2 For Linux
進(jìn)入鏈接,依次下載以下四個文件(頭文件、鏈接庫文件、FaceCropper鏈接庫文件、模型文件),如下圖所示:
并將其放到本地相關(guān)目錄里。
Step3 在計算機(jī)中進(jìn)行配置
一般來說,第三方的頭文件和鏈接庫都統(tǒng)一放于“/usr/local/”目錄下,從而便于管理和使用(之前配置OpenCV時,頭文件和鏈接庫也是放在這個目錄下的)。所以筆者將頭文件放在了“/usr/local/include/” 目錄下(為了便于整理,新建一個子文件夾,叫seeta,將頭文件放入),將鏈接庫放在了“/usr/local/lib/” 目錄下。筆者的配置步驟如下,可供參考:
筆者先將所有庫文件統(tǒng)一整理到lib文件夾里,頭文件整理到seeta文件夾里,如下圖所示:
在當(dāng)前目錄下打開終端,輸入命令:
sudo mv seeta /usr/local/include/ sudo mv ./lib/lib*.so /usr/local/lib/這樣,在計算機(jī)上的配置就完畢了,接下來是在Qt里的配置。
Step4 在Qt中進(jìn)行配置
新建一個基于C++的Qt Console Application,Build System選擇Qmake,創(chuàng)建完成后打開pro文件,加入以下內(nèi)容,對頭文件和庫文件進(jìn)行配置:
INCLUDEPATH += /usr/local/include# OpenCV libs LIBS += -L/usr/local/lib \ -lopencv_core\ -lopencv_imgproc\ -lopencv_highgui\ -lopencv_ml\ -lopencv_video\ -lopencv_features2d\ -lopencv_calib3d\ -lopencv_objdetect\ -lopencv_contrib\ -lopencv_legacy\ -lopencv_flann # Seetaface2 libs LIBS += -L/usr/local/lib \ -lholiday -lSeetaFaceDetector200 -lSeetaFaceRecognizer200 \ -lSeetaPointDetector200 -lSeetaFaceCropper200(注:筆者的OpenCV頭文件也是在/usr/local/include下的,庫文件也是在/usr/local/lib下的,讀者可自身的路徑情況進(jìn)行修改)
關(guān)于pro文件的配置:
筆者最初由于pro文件配置錯誤,導(dǎo)致Build工程的時候出現(xiàn)了很多問題,所以pro文件一定要書寫正確,不然會導(dǎo)致無法找到庫文件。
INCLUDEPATH += 是用于指定頭文件的目錄,可以用絕對或相對路徑;相對路徑中./可以省略;路徑中不允許出現(xiàn)空格。
LIBS += 是動態(tài)鏈接庫的配置語句,注意“+=”中間一定不能有空格,這是一個符號,一個整體;后接“-L”指定路徑,然后“-l”(小寫的L)指定庫的名稱,注意這里庫的名稱指的是庫文件名“l(fā)ib”之后,“.so”之前的那段字,比如:
這個庫文件的文件名是“l(fā)ibSeetaPointDetector200.so”,那么對應(yīng)的庫的名稱是“SeetaPointDetector200”。
LIBS += 可以寫在一行,也可以用 \ 斷行。
其他的注意事項可以參考這位博主的博文,總結(jié)得很不錯。
到這里就基本上配置完成了,接下來通過一個demo來檢驗(yàn)配置是否成功。
二、seetaface2實(shí)例
配置完成后,打開主程序main.cpp,添加以下代碼:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>#include <seeta/FaceDetector2.h> #include <seeta/PointDetector2.h> #include <seeta/FaceCropper2.h> #include <seeta/Struct_cv.h>#define FD_MODEL "./bindata/SeetaFaceDetector2.0.ats" #define PD_MODEL "./bindata/SeetaPointDetector2.0.pts5.ats"int main() {seeta::FaceDetector2 FD(FD_MODEL);seeta::PointDetector2 PD(PD_MODEL);seeta::FaceCropper2 FC;cv::Mat mat = cv::imread("demo.png");seeta::cv::ImageData image = mat;auto face = FD.Detect(image);auto points = PD.Detect(image, *face);// crop face according to 5 landmarksseeta::cv::ImageData cropped_face = FC.Crop(image, points);cv::Mat cropped_face_mat = cropped_face;cv::imwrite("cropped_face.jpg", cropped_face_mat);return 0; }這是官方上提供的一個SeetaFace2 Cropper的例子,可以通過人臉的5個特征點(diǎn)將一幅圖像中的人臉ROI切割出來并保存在本地。實(shí)驗(yàn)結(jié)果如下:
三、編譯時可能出現(xiàn)的問題(持續(xù)總結(jié)更新中…)
? 報錯:’nullptr’ was not declared in this scope
這是因?yàn)閟eetaface2使用了大量的C++11的新特性,所以編譯時需要開啟C++11的全部特性。解決方法如下:
總結(jié)
以上是生活随笔為你收集整理的「seetaface2」中科院人脸识别引擎seetaface2在Linux Qt上的配置教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学术相关】年度重磅|从2020年中科院
- 下一篇: linux(debian系列)和 Win