嘗試探索基于OpenCV和dlib建立的faceswap應(yīng)用程序的過(guò)程中备禀,從部署環(huán)境到程序順利跑通斤寇,踩了許許多多的坑,記錄下來(lái)以便參考表箭。
下載并部署OpenCV——win10+vs2015+CV3.2
解壓之后可以看到是x64版,world整合版钮莲。
先添加了環(huán)境變量免钻,然后在vs中新建項(xiàng)目配置OpenCV環(huán)境彼水,在屬性中修改包含目錄,庫(kù)目錄极舔,以及l(fā)inker的附加依賴項(xiàng)凤覆,此時(shí)要注意配置的是debug時(shí),附加依賴項(xiàng)為opencv_world320d.lib,配置release時(shí)拆魏,附加依賴項(xiàng)是opencv_world320.lib盯桦。
然后放入OpenCV樣例代碼——bingo,出錯(cuò)了-_-
提示missing OpenCV——world320d.dll
解決:在64位debug模式下稽揭,將opencv文件下的/x64/vc14/bin下面的3個(gè)dll文件拷貝到C盤system32文件夾中;或者環(huán)境變量path中加入OpenCV_world.dll的路徑肥卡,重新啟動(dòng)工程編譯運(yùn)行即可溪掀。再次注意此方法適用win10+64位+debug模式
測(cè)試程序:
#include using namespace cv;
int main()
{ Mat picture = imread("wallpaper.jpg");
//圖片必須添加到工程目錄下
?imshow("測(cè)試程序", picture);
waitKey(20150901); }
下載并部署dlib——dlib19.7+vs2015
針對(duì)編譯報(bào)錯(cuò)USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives FaceSwap
解決:先用cmake編譯dlib文件,生成build中包含dlib.sln,在vs中打開(kāi)并在Debug x64設(shè)置下生成解決方案步鉴,得到我們所需要的dlib.lib文件揪胃。之后在鏈接器->輸入->附加依賴項(xiàng)中添加dlib.lib。但是在運(yùn)行項(xiàng)目時(shí)氛琢,需要把dlib-19.7\dlib下所有文件拷貝至vs project相應(yīng)的路徑下喊递,其中包含all/source.cpp文件以及該文件調(diào)用的所有資源文件,注意source.cpp需要被添加到本項(xiàng)目的源文件與其他源碼一同編譯運(yùn)行阳似,并注意文件的相對(duì)路徑名(../xx.cpp).
然后重新編譯運(yùn)行就接觸到了下一個(gè)bug.——source.cpp中節(jié)數(shù)超過(guò)對(duì)象文件格式限制 請(qǐng)使用 /bigobj 進(jìn)行編譯
解決:屬性–>C/C++–>Command Line–>其他選項(xiàng) 添加 /bigobj 選項(xiàng)骚勘。
原因:默認(rèn)情況下,目標(biāo)文件最多可容納65,536(2 ^ 16)個(gè)可尋址部分撮奏。無(wú)論指定了哪個(gè)目標(biāo)平臺(tái)俏讹,都是如此。/ bigobj將地址容量增加到4,294,967,296(2 ^ 32)畜吊。大多數(shù)模塊永遠(yuǎn)不會(huì)生成包含超過(guò)65,536個(gè)部分的.obj文件泽疆。但是,機(jī)器生成的代碼或使用模板庫(kù)的代碼可能需要可容納更多部分的.obj文件玲献。
程序運(yùn)行
經(jīng)過(guò)上述努力殉疼,程序終于可以開(kāi)始運(yùn)行,然后就提示了VideoCapture does not work. OpenCV 3.2.0
bug顯示頁(yè)↓
SETUP: Setting up device 0
SETUP: WebCam SC-13HDL11624N
SETUP: Couldn't find preview pin using SmartTee
SETUP: Default Format is set to 640x480
SETUP: trying specified format RGB24 @ 640x480
SETUP: Capture callback set
SETUP: Device is setup and ready to capture.
Event: Code: 0x0d Params: 0, 0 Event: Code: 0x0e Params: 0, 0 Event: Code: 0x03 Params: -2147024891, 0
解決:修改調(diào)用harrcascade_frontalface_default.xml和shape_predictor_68_face_landmarks.dat的路徑為當(dāng)前路徑捌年,另外要在設(shè)置->隱私->相機(jī)中開(kāi)啟其他應(yīng)用調(diào)用相機(jī)的權(quán)限瓢娜,才能成功的調(diào)用相機(jī)實(shí)現(xiàn)換臉功能。
最后終于成功跑通~