本来想放一张本人实践之后最终的效果图。只怪太丑了所以就用类似的图代替一下。最终的效果可以达到实时跟踪人的面部。并且得到人脸特征点坐标。
今天主要讲讲前期的准备工作,比如由C++制作OC的静态库。
什么是dlib
摘自官网:
Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real world problems. It is used in both industry and academia in a wide range of domains including robotics, embedded devices, mobile phones, and large high performance computing environments. Dlib's open source licensing allows you to use it in any application, free of charge.
简单来讲Dlib是一套包含机器学习算法的C++工具集,用来解决现实生活的问题。最为重要的就是free of charge免费。
这个C++工具集包含了很多牛逼的特性:
- 机器学习算法
- 数值算法
- 图像模型接口算法
-
图片处理
- 高质量的人脸检测。这个部分是今天我们要用到的
- 线程操作
- 网络操作
- .....
一句话,反正这个库就是牛逼。
打包成静态库
由于dlib是用c++写的,虽然xcode知识Swift、OC、C、C++混编,但是对于这种三房库最好打成静态库。
接下来就大致介绍一下如何完成这个步骤。
-
前提条件
-
步骤
- 将项目dlib clone 到本地。项目地址
https://github.com/davisking/dlib.git
-
在终端里面打开刚才clone下来的项目里面的examples目录。
- 终端执行
mkdir build
- 终端执行
cd build
- 终端执行
cmake -G Xcode ..
- 终端执行
cmake --build . --config Release
这一步等的时间比较长,耐心一点
如果没有出现异常,最后会出现
这就说明成功了。
- 将项目dlib clone 到本地。项目地址
这一串命令最终会产生一个dlib_build
目录,里面就是编译这个库的xcode项目。在这个项目里面可以根据你的需要设置这个SDK支持的架构和支持的平台(iOS、Mac)。
特别注意,需要额外添加一些编译标识和dlib依赖的三方库。可以直接根据examples.xcproject项目来查看具体的设置
通过上面的方式就制作好了一个包含dlib的静态库。
下面是生产.a的目录
查看.a支持的架构可以通过lipo -info xxx.a
查看。比如我这里就是
将静态库添加到项目中去
刚才制作好了libdlib.a。接下来就是去使用它。
-
将刚才生产的.a和dlib的库文件拖到同一个文件夹。
-
将这两个加到项目实体中。
然后将libdlib.a拖到项目中,特别注意不要把库文件dlib目录下的文件拖进去。在文件中引用一下库文件。
#include <dlib/image_processing.h>
#include <dlib/image_io.h>
之后会报找不到头文件。
-
然后设置文件夹搜索
-
然后编译,不出意外会报如下的错。
-
添加需要的framework。非常重要。麻蛋让我踩了好久的坑。
-
然后添加
Custom Compiler Flags
中的Other C Flags
。下面这些flag定义了在预处理阶段对libdlib.a的某些特性的宏。- -DDLIB_JPEG_SUPPORT
- -DDLIB_NO_GUI_SUPPORT
- -DNDEBUG -DDLIB_USE_BLAS
-
-DDLIB_USE_LAPACK
-
添加预处理宏Preprocessor Macros。
- DLIB_JPEG_SUPPORT
- DLIB_NO_GUI_SUPPORT
- NDEBUG -DDLIB_USE_BLAS
-
DLIB_USE_LAPACK
现在编译就能够完全通过了。
接下来就是进行代码编写实现人脸特征点提取了。下次再讲吧!
扩展阅读
How to use dlib in Xcode C++ console application
Facial Landmark Detection
opencv2.framework not compile with linker flag -ObjC