本文主要从零开始讲解,如何为基于opencv、dlib的算法,构建人脸识别系统。
Dlib安装
1.dlib安装需要的依赖有 openblas, opencv,都可以通过brew安装
$brew install openblas
$brew install opencv
2.然后安装X11 https://www.xquartz.org/ ,X11是啥,请自行百度吧~ 就这么任性。
$ cd /usr/local/opt
$ ln -s /opt/X11 X11
然后重新启动Mac
3.如果没有安装过cmake的话,先配置一下Cmake,有的人用homebrew,反正我是直接网上下载的。地址是: https://cmake.org/download/
安装后,选择open打开,启动程序后,从菜单栏选择Tools ->How to Install For Command Line Use.
然后会弹出对话框,告诉你如何配置才能使终端也可以使用cmake命令,这是为下面编译dlib库做准备工作。
如果你在终端输入 cmake --version,系统并不认识,
那么你就要输入PATH="/Applications/CMake.app/Contents/bin":"$PATH"
当你关闭命令行窗口后,再重新开启一个命令行窗口,系统仍然表示无法识别cmake命令。所以我们来尝试第二种方法
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
此时,再次打开新的命令行窗口,cmake也可以正常运行了!
如果一上来就安装过cmake ,直接跳到第4步。
4.下载安装dlib
打开终端
git clone https://github.com/davisking/dlib.git
当下载下来dlib文件的时候,如果有一些更改dlib文件夹里面的库内容,在此时修改,比如,我们就用到了某一个类中的一个私有变量,我们改为了public的情况,导致编译了好多次都有问题的弯路。
cd 到你下载下来的dlib-master 文件夹下面
然后继续执行:
mkdir build
cd build
cmake ..
cmake --build . --config Release 这一步会等很久
然后 会看到 dlib-master目录下回多一个build目录
进入build后 里面还会有一个dlib目录 最终会进入到我们所编译的文件
打开dlib.xcodeproj
注意Architectures 到 Valid Architecture 的配置
还有
注意iOS Deployment Target !!!!当然是看自己项目了,反正默认是最新,为了防止少走弯路!!
还有 scheme尽量选择Release
选择模拟器、真机 都编译一遍,然后合并.a文件
cd /.../dlib
lipo -create Release-iphoneos/libdlib.a Release-iphoneSimulator/libdlib.a -output libdlib.a
此时会在dlib下生成一个libdlib.a的静态文件
可以根据lipo -info 你的.a文件路径 来查看所支持的指令集
到此dlib库是编译完成了。
然后呢 将dlib库 (下载下来的dlib-master 里面的dlib文件夹,整个copy)与刚刚编译成功的libdlib.a 放进到同一个文件夹中
除了这两个外,还有一个.dat的模型,可以根据大家需求,放进来或者不放进来。
ps:训练好的模型是一定要引入的,要不然会引起崩溃的。
但是注意一点啊,加入到项目中的DlibEx,不要把dlib文件中的文件也copy到项目中
此时是最终目录的样式!
5.把 dlib所依赖的库加进去
5.配置编译器
首先,将DlibEX文件夹目录引入到 buildSettings - > Header Search Paths
此时 Library Search Paths 也会变化
然后 配置 Preprocessor Macros
如下:
DLIB_NO_GUI_SUPPORT
DLIB_JPEG_SUPPORT
DLIB_USE_LAPACK
DLIB_USE_BLAS
NDEBUG
还是注意:iOS Deployment Target
因为是c++语言与OC混编,所以编译器配置的东西还不少。走过最多的弯路是在 Compile Sources As ,看了网上很多教程 选择了ObjectiveC ++ ,导致编译错误。
Opencv
直接把opencv的库下载下来拖到项目中,或者cocoapods都可以
在集成opencv的时候 可能会遇到 exposure_compensate.hpp 跟 blenders.hpp 报Prase Issure的错误:
enum {NO, GAIN, GAIN_BLOCKS};
按照如下修改即可。
参考
opencv 库的坑
https://blog.csdn.net/raynayyue/article/details/40543813
cmake 创建dlib - cmake 出错可能原因有CMakeCache
https://blog.csdn.net/drbinzhao/article/details/76889472
Mac下安装dlib
https://www.jianshu.com/p/3e0b7d1ddc56
创建Dlib库指南
https://www.jianshu.com/p/701e8dea887e
编译iOS 用 dlib库
https://blog.csdn.net/lengshengren/article/details/52383511
如何使用Dlib
https://www.jianshu.com/p/c4b6f51d6768