美文网首页822思享实验室
基于OpenCV和dlib的人脸交换踩坑记录篇

基于OpenCV和dlib的人脸交换踩坑记录篇

作者: HellyCla | 来源:发表于2017-12-12 00:02 被阅读102次

    尝试探索基于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

    感谢来自GitHub的讨论

    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的路径为当前路径,另外要在设置->隐私->相机开启其他应用调用相机的权限,才能成功的调用相机实现换脸功能。


    最后终于成功跑通~

    换脸效果图 时间帧率显示结果

    相关文章

      网友评论

        本文标题:基于OpenCV和dlib的人脸交换踩坑记录篇

        本文链接:https://www.haomeiwen.com/subject/wxjwixtx.html