最近人脸识别的技术比较火。由于工作的需要,最近一段时间也在了解人脸识别方面的知识。
先介绍一下Face++,国内的Face++是人脸识别比较优秀的实例,有在线API和离线SDK提供,使用方式也比较简单,不过人脸库建立在Face++的服务器中,个人版免费,企业级收费。
基于数据信息的保密和二次开发的需要,我选择了使用OpenCV用作人脸识别开发,OpenCV是由C(C++)编写的开源的计算机视觉库。提供C++接口用于调用人脸识别、人脸验证等方法。由于配置比较复杂,官方说明不详尽,开发花了较多的时间,所以写下了这篇文章,一方面提供大家学习参考,一方面为自己总结整理。
开发的环境为Win7、VS2015、OpenCV3.1(64位)。
OpenCV:
其中OpenCV 2.x和OpenCV 3.x版本有一个比较大的区别,OpenCV 3.x将人脸识别的部分功能(contrib)提取了出来。所以不建议在官网(http://opencv.org/)上直接下载opencv的exe执行文件来使用。需要正常使用人脸识别,除了下载opencv之外,还要下载opencv_contrib包。可以通过OpenCV的github网站(https://github.com/Itseez)来下载。
下载完opencv和opencv_contrib包后分别解压缩。再通过Cmake软件来对opencv进行搭建sln项目,搭建过程中的指定路径指向opencv_contrib(即下图步骤3)。编译通过之后就会生成一个包含人脸识别功能的完成的OpenCV 3.1项目。然后在VS2015中新建该sln解决方案,编译后就可以使用了。
以下是CMake建立OpenCV 3.1项目的过程,1为opencv的路径,2为建立项目后生成的路径,填写路径后点击Configure,可以得到红色背景部分的内容,3为在OPENCV_EXTRA_MODULRS_PATH下填写opencv_contrib的modules目录路径,然后点击Generate即可生成解决方案。
在VS2015中打开OpenCV3.1的.sln解决方案,在Debug模式下先重新生成解决方案,然后找到CMakeTargets中的install然后右键选择“Project Only”-->“Build Only INSTALL”。
这个时候OpenCV3.1解决方案基本就完成不需要改动了,除非你要改原有的算法和实现。(这里的OpenCV 3.1项目是独立的,需要新建一个解决方案来调用它)
现在就可以开始新建自己的解决方案了,然后在自己的解决方案中,右键点击“属性”,配置相关属性就可以调用到OpenCV3.1的功能了。
Include Directories:
C:\opencv3.1\install\include\opencv;C:\opencv3.1\install\include\opencv2;C:\opencv3.1\install\include;
Library Directories: C:\opencv3.1\install\x64\vc14\bin;C:\opencv3.1\install\x64\vc14\lib;C:\opencv3.1\install\x64\vc14\staticlib;
Additional Dependencies: opencv_aruco310d.lib;opencv_bgsegm310d.lib;opencv_bioinspired310d.lib;opencv_calib3d310d.lib;opencv_ccalib310d.lib;opencv_core310d.lib;opencv_datasets310d.lib;opencv_dnn310d.lib;opencv_dpm310d.lib;opencv_face310d.lib;opencv_features2d310d.lib;opencv_flann310d.lib;opencv_fuzzy310d.lib;opencv_highgui310d.lib;opencv_imgcodecs310d.lib;opencv_imgproc310d.lib;opencv_line_descriptor310d.lib;opencv_ml310d.lib;opencv_objdetect310d.lib;opencv_optflow310d.lib;opencv_photo310d.lib;opencv_plot310d.lib;opencv_reg310d.lib;opencv_rgbd310d.lib;opencv_saliency310d.lib;opencv_shape310d.lib;opencv_stereo310d.lib;opencv_stitching310d.lib;opencv_structured_light310d.lib;opencv_superres310d.lib;opencv_surface_matching310d.lib;opencv_text310d.lib;opencv_tracking310d.lib;opencv_ts310d.lib;opencv_video310d.lib;opencv_videoio310d.lib;opencv_videostab310d.lib;opencv_xfeatures2d310d.lib;opencv_ximgproc310d.lib;opencv_xobjdetect310d.lib;opencv_xphoto310d.lib;ippicvmt.lib;
注意:
1、OpenCV 2.x版本人脸识别需要导入的包为:#include "opencv2/contrib/contrib.hpp",在OpenCV3.1版本中不存在该包,应该导入包:#include "opencv2/face.hpp"
2、C:/opencv3.1为我生成的解决方案目录,其中opencv3.1版本对应为vc14,opencv3.0版本为vc12
3、生成解决方案和配置相关属性时,要注意有Debug和Release两种模式,建议两种都编译配置一次
暂时就写这么多,还有一些实际调用了例子,等有空整理之后再分享,有问题的话可以交流。