VS2015 编译FaceDetection+(详细教程),附带出现问题的解决方法(一)

    首先需要进行声明,FaceDetection并不一定必须在VS2013平台下进行编译以及运行,本文是在VS2015编译平台下,利用openCV 3.4.1进行的编译以及测试,以下的编译都是基于Debug模式的编译,如果需要Release模式,利用相同的方法进行编译。如果你是在VS2015下编译的dll和lib,在其他的平台就不能用了(测试过,在VS2013下编译的就不能再VS2015中用),需要重新编译,当然,最低的编译版本也许就是VS2013(我没有测试过),同时在Debug模式下编译的不能应用于Release模式。

1.编译FaceDetection

首先要新建一个工程,用来生成所需要的dll和lib库,在VS2015里面新建工程,如下所示:

    文件建立完成后,设置配置管理器,设置过程如下所示:

    配置完成后,首先将下载后的SeetaFaceEngine-master内的FaceDetection文件夹中的data文件夹拷贝到新建的工程中,在我的电脑上新建文件夹路径是


因此data文件夹放置的路径如下:


接下来将下载后的SeetaFaceEngine-master内的FaceDetection文件夹中的include、model、src这三个文件夹拷贝到新建的工程中,要注意的是,拷贝的地方与data不在同一个目录下:


接下来要在工程中添加我们加入的相干文件:



添加完成后,一共有11个文件


接下来,右击 项目->属性





接下来就是见证奇迹的时刻,


生成成功。



2.编译FaceAlignment

在编译FaceAlignment时,其他的步骤与上面的步骤一模一样,当生成项目解决方案时,有可能会出现如下的问题:


解决方法是:


项目生成成功:



3.编译FaceIdentification

    对于FaceIdentification文件的编译,我们要特别的注意,这个文件,我们不需要新建项目进行编译,我们仅仅需要打开下载下来的原始文件

打开FaceIdentification里面的examples,用VS2013打开examples.sln。


此时将会导入两个工程,我们在Identification工程上面点击右键生成解决方案:


之后就可以生成最后希望得到的.dll和.lib文件。


最后将以上生成的文件进行保存,其中Debug模式和Release模式文件分别有6个,方便以后的使用。

4.测试

    分别对以上编译成功的dll和lib进行测试。

    首先对FaceDetection.lib进行测试

    (1)新建项目,名称为FaceDetectionTest。在新建项目之后,由于是在同一个解决方案下面建立的项目,因此,设定该项目为启动项目,新建文件,命名为main.cpp。将FaceDetection源码中src\test\下的代码复制到新建的文件中。

    

    (2)接下来配置所需要用的opencv以及调用编译生成的FaceDetection.dll文件,首先配置opencv,本文所用的opencv版本为opencv 3.4.1,看到太多的博主使用的仍然是很老版本的opencv,无疑新版的opencv配置更加方便。项目单击右键,进行配置,如下图所示。


特别需要说明的是,opencv_world341d.lib是在debug模式下的附加依赖项,如果配置release模式,将341d后的d去掉即可。(3)接下来配置预处理器,如下图所示,添加红框中的三行内容:


(4)配置命令参数,由于官方的FaceDetection测试例子采用命令行的输入方法,因此需要进行输入参数的配置,配置方法如下所示:


需要特别说明的是,我将FaceDetection源码中的data文件放在了我工程项目的根目录下,因此可以用以上的方式进行配置,我的工程目录结构如下所示。


如果不想配置命令行,可以对程序进行修改,第一个参数对应的是待检测文件的路径,第二个是分类器的路径。可以根据自己的文件路径进行修改。


(5)接下来点击VC++目录,配置包含目录和库目录。配置分别如下所示:



(6)配置完成以上的工作后进行测试。


结果如下所示:


    证明我们自己编译的FaceDetection.dll可以很好地使用。

    接下来对FaceDetection.lib进行测试

    在对FaceDetection.lib进行测试时,首先需要更改data以及model的路径,如果不进行路径的更改,将会出现异常,更改到自己电脑的路径。配置如下图所示。

    (1)配置包含路径


    (2)配置库目录


    (3)配置连接器-->输入


    通过以上的配置可以成功的运行出来结果,如果你在以上的配置过程中出现了问题,请看我的第5点,也许会对你有一些启发。结果如下所示,本文的结果与网上好多说的都不一样,并且原始的程序都有问题,进行了更改,并且打印了关键点的信息:


    最后对FaceIdentification进行编译

    由于我们使用的是VS2015编译器,而原始的文件是在VS2013中生成的,因此需要对平台工具集进行修改。右击项目,此时对配置属性的平台工具集进行修改。


    利用源码中自带的测试程序进行测试,首先还需要对平台工具集进行修改,修改方式如上图所示。设置Tester项目为启动项目,将生成的Identification.lib放置到lib文件夹中。对Tester进行属性的配置。最终测试结果如下所示:


5.问题及解决方法

    5.1 对Identification.lib进行测试出现的问题

    在对Identification.lib进行测试时,由于使用的OpenCV版本的不同,在OpenCV 3.4.1版本中,只需要包含一个lib,因此需要对程序进行修改,修改方式就是将下图中红色方框的部分注释掉。否则将会出现库包含的错误。


    在编译Identification.lib时,出现的第二个错误就是,需要更改源程序中的model和data目录,如果model和data目录不正确的话,将会出现文件包含错误,这个错误如果不能及时看到将会一闪而过,因此要进行适当的截图,错误如下图所示。


5.2 对FaceAlignment.lib进行测试出现的问题

    在将FaceAlignment中的测试源码进行测试时,出现了如下的问题:



    对以上的问题进行解决通过分析知道,在进行数据的读取时候采用了IplImage*类型的数据,但是此时如果用OpenCV 3.4.1版本中的cvSaveImage()函数,将会由于数据类型不一样发生错误,因此需要对数据进行转换,数据转换方式如下所示,将IplImage类型的图像转变为Mat类型的数据,最后通过imwrite函数进行数据保存:


    数据保存后的结果如下所示:


    可以成功的获得到结果。



    通过程序可以打印出关键点信息,结果如下所示:

    接下来的问题是要将Data以及Model的路径更改为自己的路径,否则将会出现错误。路径更改的位置如下所示:


    具体的路径要根据自己的路径进行更改。

    在我们的测试过程中还出现过程序不能正常启动的情况,出现的错误为0xc000007b,这个情况有以下的几种原因:1.编译的dll以及lib出现问题,即编译不成功;2.路径配置错误;3.电脑中插件错误。这三种情况,出现第1和第2种情况是最多的。要特别的注意。

    以上就是所有的编译过程以及对编译后的lib库进行的测试。

接下来将会利用MFC进行可视化,做到更加的直观。

猜你喜欢

转载自blog.csdn.net/qq_34258054/article/details/80431874