iOS与c++ 混编 ,联调opencv & dlib遇到的坑~~

本文主要从零开始讲解,如何为基于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

你可能感兴趣的:(iOS与c++ 混编 ,联调opencv & dlib遇到的坑~~)