尝试探索基于OpenCV和dlib建立的faceswap应用程序的过程中,从部署环境到程序顺利跑通,踩了许许多多的坑,记录下来以便参考。
下载并部署OpenCV——win10+vs2015+CV3.2
解压之后可以看到是x64版,world整合版。
先添加了环境变量,然后在vs中新建项目配置OpenCV环境,在属性中修改包含目录,库目录,以及linker的附加依赖项,此时要注意配置的是debug时,附加依赖项为opencv_world320d.lib,配置release时,附加依赖项是opencv_world320.lib。
然后放入OpenCV样例代码——bingo,出错了-_-
提示missing OpenCV——world320d.dll
解决:在64位debug模式下,将opencv文件下的/x64/vc14/bin下面的3个dll文件拷贝到C盘system32文件夹中;或者环境变量path中加入OpenCV_world.dll的路径,重新启动工程编译运行即可。再次注意此方法适用win10+64位+debug模式
测试程序:
#include using namespace cv;
int main()
{ Mat picture = imread("wallpaper.jpg");
//图片必须添加到工程目录下
imshow("测试程序", picture);
waitKey(20150901); }
下载并部署dlib——dlib19.7+vs2015
针对编译报错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中打开并在Debug x64设置下生成解决方案,得到我们所需要的dlib.lib文件。之后在链接器->输入->附加依赖项中添加dlib.lib。但是在运行项目时,需要把dlib-19.7\dlib下所有文件拷贝至vs project相应的路径下,其中包含all/source.cpp文件以及该文件调用的所有资源文件,注意source.cpp需要被添加到本项目的源文件与其他源码一同编译运行,并注意文件的相对路径名(../xx.cpp).
然后重新编译运行就接触到了下一个bug.——source.cpp中节数超过对象文件格式限制 请使用 /bigobj 进行编译
解决:属性–>C/C++–>Command Line–>其他选项 添加 /bigobj 选项。
原因:默认情况下,目标文件最多可容纳65,536(2 ^ 16)个可寻址部分。无论指定了哪个目标平台,都是如此。/ bigobj将地址容量增加到4,294,967,296(2 ^ 32)。大多数模块永远不会生成包含超过65,536个部分的.obj文件。但是,机器生成的代码或使用模板库的代码可能需要可容纳更多部分的.obj文件。
程序运行
经过上述努力,程序终于可以开始运行,然后就提示了VideoCapture does not work. OpenCV 3.2.0
bug显示页↓
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
解决:修改调用harrcascade_frontalface_default.xml和shape_predictor_68_face_landmarks.dat的路径为当前路径,另外要在设置->隐私->相机中开启其他应用调用相机的权限,才能成功的调用相机实现换脸功能。
最后终于成功跑通~
换脸效果图 时间帧率显示结果
网友评论